Articles récents
Domotique : Mesurer la température avec un ESP32 et un capteur DS18B20
On m'a beaucoup évoqué l'ESP8266, qui est un microcontrôleur doté d'une interface WIFI. Et donc, c'est en recherchant des informations sur cette puce que j'ai découvert l'ESP32 qui est une mise à jour du premier.
Sur le papier, il semble assez intéressant avec des interfaces WIFI B/G et Bluetooth Low Energy (BLE V4.2), mais aussi le support de nombreux protocoles I2C, I2S, 1-wire, SPI, PWM... Bref, une petite merveille de technologie pour un coût modéré (moins de dix euros).
C'est le composant parfait pour réaliser une application domotique simple plutôt qu'un Raspberry pi.
ESP32 est une puce fabriquée par la société chinoise ESPRESSIF qui est la version supérieure de la fameuse ESP8266. C'est un microcontrôleur que l'on trouve sous plusieurs formes de modules proposés par des constructeurs différents. Les fonctionnalités offertes par l'ESP32 sont pléthoriques, il suffit de regarder le schéma d'architecture pour entrevoir ce qui est proposé!
La première étape consiste à installer la partie software. Personnellement, j'ai opté pour la solution Arduino (en C/C++) mais il existe également un framework en micropython ou en Lua. Pour installer sous windows :
https://github.com/espressif/arduino-esp32/blob/master/docs/arduino-ide/windows.md
Il suffit de suivre le processus d'installation, rien de difficile.
Installation des librairies du DS18B20:
La première étape consiste à récupérer l'adresse 1-wire du capteur, pour cela il est nécessaire de :
La seconde étape consiste à installer la librairie du composant Dallas:
Le schéma de câblage est assez simple. Nous utiliserons le GPIO 14 de l'ESP32 avec la sortie out du ds18b20 pour l'échange de données. Les autres autres sorties du ds18b20 sont reliées au +5V et au ground. Attention n'oubliez pas de protéger l'entrée de l'ESP32 avec une résistance de 4.7KΩ pour faire tomber la tension, car l'entrée de l'ESP32 ne supportera pas des tensions supérieures à 3.3V. Autre solution, il existe des plaquettes qui intègrent le ds18b20 et la résistance (voir photo ci-dessous).
Voilà , on est prêt pour attaquer le code. La première opération consiste à récupérer l'adresse du capteur de température.
/* One Wire scanner
* Code inspiré de l'exemple livré avec la librairie Arduino DallasTemperature
* Code inspired by DallasTemperature Aduino library from
* http://milesburton.com/Dallas_Temperature_Control_Library
*/
#include (OneWire.h) //remplacer () par <>
// Bus OneWie connecté sur la broche 14 | OneWire bus connected on Pin 4
// Installer une résistance de 4.7K entre le +5V et le cable de données
// A 4.7K resistor is necessary between +5V and Data wire
OneWire ds(14);
byte i;
byte type_s;
byte data[12];
byte addr[8];
void OneWireScanner(){
if ( !ds.search(addr)) {
Serial.println("No more addresses.");
Serial.println();
ds.reset_search();
return;
}
Serial.print("ROM = ");
for( i = 0; i < 8; i++) {
Serial.write(' ');
Serial.print("0x");
Serial.print(addr[i], HEX);
if ( i != 7 ) {
Serial.print(", ");
}
}
if (OneWire::crc8(addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return;
}
Serial.println();
// the first ROM byte indicates which chip
switch (addr[0]) {
case 0x10:
Serial.println(" Chip = DS18S20"); // or old DS1820
type_s = 1;
break;
case 0x28:
Serial.println(" Chip = DS18B20");
type_s = 0;
break;
case 0x22:
Serial.println(" Chip = DS1822");
type_s = 0;
break;
default:
Serial.println("Device is not a DS18x20 family device.");
return;
}
}
void setup() {
Serial.begin(115200);
}
void loop() {
// put your main code here, to run repeatedly:
OneWireScanner();
delay(5000);
}
Ce qui affiche dans le moniteur série:
Maintenant que nous avons l'adresse, voyons pour lire les données sur le capteur ds18b20:
/*********
Rui Santos
Complete project details at http://randomnerdtutorials.com
Based on the Dallas Temperature Library example
*********/
#include (OneWire.h)
#include (DallasTemperature.h) //remplacer les () par <>
// Data wire is plugged into port 14 on the Arduino or ESP32
#define ONE_WIRE_BUS 14
#define TEMPERATURE_PRECISION 10
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
// Tableaux contenant l'adresse de chaque sonde OneWire | arrays to hold device addresses
DeviceAddress insideThermometer = { 0x28, 0xFF, 0x9B, 0xB5, 0xA0, 0x16, 0x3, 0xCD };
void setup() {
Serial.begin(115200);
// Start up the library
sensors.begin();
// locate devices on the bus
Serial.print("Locating devices...");
Serial.print("Found ");
Serial.print(sensors.getDeviceCount(), DEC);
Serial.println(" devices.");
// report parasite power requirements
Serial.print("Parasite power is: ");
if (sensors.isParasitePowerMode()) Serial.println("ON");
else Serial.println("OFF");
// Vérifie sir les capteurs sont connectés | check and report if sensors are conneted
if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0");
// set the resolution to 9 bit per device
sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION);
// On vérifie que le capteur st correctement configuré | Check that ensor is correctly configured
Serial.print("Device 0 Resolution: ");
Serial.print(sensors.getResolution(insideThermometer), DEC);
Serial.println();
}
void printTemperature(String label, DeviceAddress deviceAddress){
float tempC = sensors.getTempC(deviceAddress);
Serial.print(label);
if (tempC == -127.00) {
Serial.print("Error getting temperature");
} else {
Serial.print(" Temp C: ");
Serial.print(tempC);
Serial.print(" Temp F: ");
Serial.println(DallasTemperature::toFahrenheit(tempC));
}
}
void loop() {
// put your main code here, to run repeatedly:
Serial.print("Requesting temperatures...");
sensors.requestTemperatures();
Serial.println("DONE");
// print the device information
printTemperature("Inside : ", insideThermometer);
delay(5000);
}
Ce qui donne dans le moniteur série:
Conclusion
Un premier montage qui met en oeuvre l'ESP32, pas trop difficile à réaliser. Je suis assez impressionné par les capacités de ce microcontrôleur. Reste à vérifier une connexion wifi pour être totalement convaincu.
© 2024 www.doritique.fr par Robert DORIGNY
ces ptits microcontrleurs sont des tueries