![]() |
Mesure de la température |
novembre 2019 |
Pour pouvoir exploiter l'I2C avec ce circuit il faut (à ma connaissance) s'y prendre en deux fois :
- Un premier câblage pour programmer l'esp avec entre autres Gpio0 à l'état bas et Gpio2 à l'état haut.
- Un deuxième câblage avec le signal I2C-SDA sur Gpio0 et I2C-SCL sur Gpio2.
Pour le point un, la programmation, je triche un peu, j'utilise un petit programmateur (à 1,89 euros). Son utilisation est super simple
on enfiche l'esp à programmer, on positionne le petit bouton sur "prog", on connecte à la liaison usb du micro et on envoie le télé versement.
Test du montage sur une plaque d'essai.
Le schéma est aussi simple qu'avec un esp-12 mais ici la ligne SDA de l'I2C est relié à la ligne Gpio2 et le SCL à la broche Gpio2.
Un adaptateur AMS1117 est utilisé pour convertir le 5v de l'interface USB en 3v3 nécessaire au montage. Ce circuit est au format CMS il peut donc être directement
soudé sur les broches de la prise USB. Vous pouvez éventuellement ajouter un condensateur de chaque côté du circuit un de 100nF côté 5v et un 10 microF côté 3v3.
Le schéma des connexions de l'esp8266-1.
Le petit programmateur bien pratique de l'ESP8266-1.
Le régulateur AMS1117 et la prise USB bien pratique pour alimenter un montage.
Dés que le montage est alimenté il envoie ses résultats vers le serveur mosquitto qui est déclaré dans le programme,
il est alors facile de les exploiter avec node-red et éventuellement grafana.
Attention pour la librairie de l'écran Oled "SSD1306Wire.h", c'est celle-ci
qu'il faut télécharger sur le site "github", elle est différente de celle qui est disponible dans l'environnement "Arduino".
On la reconnait au "w" de Wire qui doit dans notre cas être une majuscule. (Merci à Guy, pour cette précision qui peut éviter pas mal de galère !).
Merci également à tous les contributeurs(46) de ce petit package qui contient plusieurs librairies. Vous devez charger le zip complet comme montré sur
l'image ci-contre.
Le code de base qui doit vous permettre de démarrer pour vos propres projets...
Le sensor de température n'est pas très précis (en réalité, il suit la température, mais dans mon cas avec 3 degrés de plus ! j'enlève donc
dans le programme les 3 degrés, les courbes avec cette petite adaptation sont bonnes !). Le programme est le même que celui utilisé dans l'exemple
du site à base de 8266-12 les sorties utilisées en Gpio sont simplement adaptées.
// Mesure de la temperature interieur avec un ESP8266-1
// Exploitation de l'I2C
// novembre 2019
// Castoo
#include "ESP8266WiFi.h"
#include "PubSubClient.h"
#include "Wire.h"
#include "SSD1306Wire.h"
#include "Temperature_LM75_Derived.h"
// l'adresse I2C (ici 0x3C) peut être différente en fonction du module utilisé
SSD1306Wire display(0x3c, 0, 2);
Generic_LM75 temperature; // Declaration variable de lecture de la température
const char* box = "raspi-mqtt"; // Nom du ssid du serveur raspberry Mosquitto
const char* m_passe = "xxxxxxxxxxxxx"; // Passe WiFi
const char* mqtt_server = "10.3.141.1"; // Adr de serveur mosquitto
const char* mqtt_user = "admin"; // login sur serveur mosquitto
const char* mqtt_password = "xxxxxxxxxxxxx"; // Passe sur serveur mosquitto
char msg_envoye[50];
char ch_result[10];
WiFiClient espClient; // déclaration Objet wifi
PubSubClient client(espClient); // déclaration objet mosquitto
// ------------------- Cnx au serveur Raspberry Mosquitto ------------------
void setup_wifi() {
delay(10);
WiFi.begin(box, m_passe);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
randomSeed(micros());
}
// ----------------------------- Cnx à mosquitto ------------------------
void reconnect() {
while (!client.connected()) {
String clientId = "ESP8266TempESP1-"; // Creatation d'un ID aléatoire (identification ESP sur mosquitto)
clientId += String(random(0xffff), HEX);
if (!client.connect(clientId.c_str(), mqtt_user, mqtt_password)) { delay(5000); }
}
}
void setup(){
// initialisation de l'ecran (voir la documentation de la librairie)
display.init();
display.flipScreenVertically();
display.setFont(ArialMT_Plain_24); // ArialMT_Plain_10
display.setTextAlignment(TEXT_ALIGN_CENTER);
display.clear();
delay(500);
setup_wifi(); // cnx wifi
client.setServer(mqtt_server, 1883); // cnx mosquitto
delay(2000);
Wire.begin();
}
void loop(){
float resultat = 0;
resultat = temperature.readTemperatureC();
resultat -= 3; // Etalonnage (pour ma part il y avait 3 degrés de trop !)
snprintf (ch_result, 50, "%.2f °", resultat);
display.clear();
display.drawString(64, 22, ch_result);
display.display();
if (!client.connected()) { reconnect(); }
client.loop();
snprintf (msg_envoye, 50, "T %.2f °", resultat);
client.publish("temp_int2", msg_envoye);
delay(100000); // environ 3 minutes
display.clear();
display.drawString(64, 22, "Données émises");
display.drawString(100, 32, msg_envoye);
display.display();
}
Doc sensor Data-sheet du LM75.
Un circuit vraiment facile à tester, les composants utilisés sont vraiment très abordables. Utiliser l'I2C sur un petit processeur comme l'esp avec une interface wifi ouvre la porte à de nombreux projets...