Doit-on en conclure qu'il est impossible de brancher plusieurs capteurs analogiques sur un même ESP8266? Pas du tout: grâce au multiplexeur CD4051 (que nous avions déjà étudié dans cet article publié à l'été 2014), il est possible de brancher jusqu'à 8 capteurs analogiques différents sur l'unique entrée analogique de l'ESP8266. C'est ce que nous allons faire aujourd'hui.
Notre projet consiste donc à brancher 8 capteurs analogiques à un même module ESP8266, et à afficher leur valeur dans une page web...
...bon d'accord, dans les faits, je me suis contenté de 4 capteurs, car ça devenait un peu redondant, mais puisque le CD4051 comporte 8 entrées, vous pouvez facilement modifier mon sketch pour brancher 8 capteurs si c'est ce dont vous avez besoin.
IDE Arduino
Nous allons programmer l'ESP8266 au moyen de l'IDE Arduino. Les extensions nécessaires à la programmation de l'ESP8266 doivent donc avoir été installées. Si ce n'est pas le cas, vous pouvez suivre les instructions disponibles ici.
Le circuit
- Vous devez utilisez un module ESP8266 qui comporte une entrée analogique (ADC), comme par exemple le module ESP-12. Le module ESP-01 ne convient pas, puisqu'il ne comporte pas d'entrée analogique.
- L'entrée ADC de l'ESP8266 requiert une tension située entre 0 et 1 V; puisque les capteurs sont alimentés par une tension de 3,3 V, vous devez concevoir vos diviseurs de tension de façon à tenir compte de cette limite. La loi d'Ohm vous permet de calculer facilement les valeurs de résistances nécessaires, et c'est une bonne idée de faire quelques tests avec un multimètre avant de brancher vos capteurs sur l'ESP8266.
- L'alimentation de 3,3 V n'est pas la sortie 3,3 V du convertisseur USB-UART. Il s'agit d'une alimentation externe, car l'ESP8266 a la réputation d'être plutôt gourmand en courant.
- Je n'explique pas ici le fonctionnement détaillé du multiplexeur CD4051, puisque je l'ai déjà fait ici.
- Le capteur 1 (un potentiomètre) est relié à l'entrée Y0 (pin 13) du CD4051.
- Le capteur 2 (une photorésistance) est relié à l'entrée Y1 (pin 14) du CD4051
- Le capteur 3 (une thermistance) est relié à l'entrée Y2 (pin 15) du CD4051
- Le capteur 4 (un potentiomètre) est relié à l'entrée Y3 (pin 12) du CD4051
- GPIO4 de l'ESP8266 est configuré en sortie et relié à l'entrée S0 (pin 11) du CD4051
- GPIO5 de l'ESP8266 est configuré en sortie et relié à l'entrée S1 (pin 10) du CD4051
- GPIO15 de l'ESP8266 est configuré en sortie et relié à l'entrée S2 (pin 9) du CD4051
- La sortie du CD4051 est la pin 3; elle est reliée à l'entrée ADC de l'ESP8266.
- Les pins GPIO4, GPIO5 et GPIO6 servent à sélectionner le capteur dont la valeur sera acheminée à l'entrée ADC de l'ESP8266,
Le sketch
Voici le sketch qui permet à l'ESP8266 d'afficher les résultats sur une page web:
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
/******************************************************************************************** | |
Utilisation d'un CD4051 pour augmenter le nombre d'entrées | |
analogiques d'un ESP8266 (esp-12) | |
Les mesures de 4 capteurs analogiques sont affichées dans une page web. | |
http://electroniqueamateur.blogspot.ca/2016/03/8-capteurs-analogiques-sur-le-meme.html | |
********************************************************************************************/ | |
#include <ESP8266WiFi.h> | |
#include <WiFiClient.h> | |
#include <ESP8266WebServer.h> | |
#define pinS0 4 | |
#define pinS1 5 | |
#define pinS2 15 | |
const char* ssid = "le nom de votre reseau wifi"; | |
const char* password = "le mot de passe de votre reseau wifi"; | |
ESP8266WebServer server(80); | |
int valeur1, valeur2, valeur3, valeur4; | |
void handle_root() { | |
// lecture des différents capteurs | |
// lecture du capteur relié a l'entrée Y0 du CD4051 | |
digitalWrite(pinS2, LOW); | |
digitalWrite(pinS1, LOW); | |
digitalWrite(pinS0, LOW); | |
valeur1 = analogRead(A0); | |
// lecture du capteur relié a l'entrée Y1 du CD4051 | |
digitalWrite(pinS2, LOW); | |
digitalWrite(pinS1, LOW); | |
digitalWrite(pinS0, HIGH); | |
valeur2 = analogRead(A0); | |
// lecture du capteur relié a l'entrée Y2 du CD4051 | |
digitalWrite(pinS2, LOW); | |
digitalWrite(pinS1, HIGH); | |
digitalWrite(pinS0, LOW); | |
valeur3 = analogRead(A0); | |
// lecture du capteur relié a l'entrée Y3 du CD4051 | |
digitalWrite(pinS2, LOW); | |
digitalWrite(pinS1, HIGH); | |
digitalWrite(pinS0, HIGH); | |
valeur4 = analogRead(A0); | |
// C'est ici qu'on construit la page web: | |
server.send(200, "html", "<head> <title>ESP8266</title> </head> " | |
"<body><H1>Page web générée par votre ESP8266</H1>" | |
"<p>Valeur du capteur analogique 1: " + String(valeur1) + "</p>" | |
"<p>Valeur du capteur analogique 2: " + String(valeur2) + "</p>" | |
"<p>Valeur du capteur analogique 3: " + String(valeur3) + "</p>" | |
"<p>Valeur du capteur analogique 4: " + String(valeur4) + "</p>" | |
"<p>Visitez <a href=http://electroniqueamateur.blogspot.ca/>Électronique en Amateur</a>!</p></body>"); | |
delay(100); | |
} | |
void setup(void) | |
{ | |
pinMode(pinS0, OUTPUT); | |
pinMode(pinS1, OUTPUT); | |
pinMode(pinS2, OUTPUT); | |
// Affichage dans le moniteur série: | |
Serial.begin(115200); | |
// Connexion au réseau WiFi | |
WiFi.begin(ssid, password); | |
Serial.print("\n\r \n\rConnection au reseau en cours"); | |
// On attend la connexion | |
while (WiFi.status() != WL_CONNECTED) { | |
delay(500); | |
Serial.print("."); | |
} | |
Serial.println(""); | |
Serial.print("Nom du reseau WiFi: "); | |
Serial.println(ssid); | |
Serial.print("Adresse IP de la page web: "); | |
Serial.println(WiFi.localIP()); | |
server.on("/", handle_root); | |
server.begin(); | |
Serial.println("Le serveur web est en fonction."); | |
} | |
void loop(void) | |
{ | |
server.handleClient(); | |
} |
Utilisation et résultats
Lors du démarrage du programme, l'adresse IP de votre ESP8266 s'affiche dans le moniteur série.
Il s'agit d'accéder à cette adresse IP à partir de n'importe quel fureteur web lié au même réseau WiFi pour voir s'afficher les valeurs mesurées par chaque capteur. Vous devez rafraîchir la page pour que ces valeurs se mettent à jour.
Yves Pelletier (Twitter, Facebook)