Il s'agit d'un problème pour lequel nous avons déjà décrit deux solutions élégantes et efficaces: l'utilisation d'un convertisseur analogique-numérique PCF8591, et l'utilisation d'un multiplexeur CD4051.
Aujourd'hui, nous explorons une troisième option: l'utilisation d'un circuit intégré MCP3008; il s'agit d'un convertisseur analogique-numérique à 8 canaux, ayant une résolution de 10 bits. Grâce à ce circuit intégré, vous pouvez donc ajouter 8 entrées analogiques à votre ESP8266.

Le schéma ci-contre, tirée de la fiche technique du MCP3008, montre son brochage.
Les 8 entrées analogiques (canal 0 à canal 7) se trouvent sur les broches 1 à 8, du côté gauche du circuit intégré.
Du côté droit, on retrouve l'alimentation (VDD), la tension de référence (VREF), les masses (AGND et DGND), l'horloge (CLK), la sortie des signaux numériques vers l'ESP8266 (DOUT), l'entrée des signaux numériques en provenance de l'ESP8266 (DIN) et la broche "chip select" (CS/SHDN) qui permet d'activer ou de désactiver le circuit intégré.
Le circuit illustré ci-dessous permet de mesurer une tension variant entre 0 et 3,3 V (contrôlée par un potentiomètre) au canal 0 du convertisseur. VDD et VREF sont à 3,3 V, AGND et DGND sont branchés à la masse de l'ESP8266.
J'ai branché CLK à la broche GPIO 14 de l'ESP8266, DIN à GPIO 13, DOUT à GPIO 12 et CS/SHDN 15 à GPIO 15. Mais tout ça se définit dans le sketch, vous pouvez donc utiliser d'autres broches de l'ESP8266 au besoin.
N.B.: mon schéma montre les branchements sur ma carte Wemos D1 R1, mais vous utilisez évidemment n'importe quel module ESP8266. Puisque j'ai utilisé la sortie 3,3 V de la carte Wemos, j'ai branché un condensateur de 100 nF aux broches 16 et 14 du MCP3008 pour assurer une meilleure stabilité de l'alimentation (sans le condensateur, le MCP3008 refusait parfois de fonctionner, retournant la valeur 1023 peu importe la tension d'entrée).
N.B.: mon schéma montre les branchements sur ma carte Wemos D1 R1, mais vous utilisez évidemment n'importe quel module ESP8266. Puisque j'ai utilisé la sortie 3,3 V de la carte Wemos, j'ai branché un condensateur de 100 nF aux broches 16 et 14 du MCP3008 pour assurer une meilleure stabilité de l'alimentation (sans le condensateur, le MCP3008 refusait parfois de fonctionner, retournant la valeur 1023 peu importe la tension d'entrée).
Installation de la bibliothèque MCP3008
J'ai utilisé la bibliothèque MCP3008 réalisée par Uros Petrevski.
Exemple de sketch
L'utilisation de la bibliothèque est très simple: pour lire une valeur, on utilise la méthode readADC(): readADC(0) pour lire la valeur du canal 0 (donc la broche numéro 1), readADC(1) pour lire le canal 1 (broche 2), etc.
Puisque la résolution est de 10 bits, la valeur retournée se situe entre 0 et 1023. Elle varie lorsque vous tournez le potentiomètre.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/************************************************************************** | |
Ajout de 8 entrées analogiques à l'ESP8266 grâce à un MPC3008. | |
Utilise la bibliothèque MCP3008 par Uros Petrevski, Nodesign.net 2013: | |
https://github.com/nodesign/MCP3008 | |
Plus d'infos: | |
https://electroniqueamateur.blogspot.com/2019/06/ajout-de-8-entrees-analogiques-lesp8266.html | |
**************************************************************************/ | |
#include <MCP3008.h> | |
// définition des broches utilisées | |
#define CLK_PIN 14 // broche 13 (CLK) du MCP3008 branchée à GPIO 14 de l'ESP8266 | |
#define DIN_PIN 13 // broche 11 (DIN) du MCP3008 branchée à GPIO 13 de l'ESP8266 | |
#define DOUT_PIN 12 // broche 12 (DOUT) du MCP3008 branchée à GPIO 12 de l'ESP8266 | |
#define CS_PIN 15 // broche 10 (CS) du MCP3008 branchée à GPIO 15 de l'ESP8266 | |
MCP3008 adc(CLK_PIN, DIN_PIN, DOUT_PIN, CS_PIN); | |
void setup() { | |
Serial.begin(9600); // pour affichage des valeurs mensurées | |
} | |
void loop() { | |
int mesure = adc.readADC(0); // lecture du canal 0 (broche 1) du MCP3008 | |
Serial.println(mesure); // affichage dans le moniteur série | |
delay(500); // on ralentit un peu l'affichage des mesures, pour avoir le temps de les lire... | |
} |
Aucun commentaire:
Enregistrer un commentaire