Pour une fois, je publie un article sans avoir fini mon projet (car tout le matériel nécessaire n’est pas encore arrivé …), mais comme il y a beaucoup de nouveautés et que mon prototype marche plutôt bien; je profite du délai de livraison pour décrire et expliquer cette nouvelle approche (nouvelle pour moi mais très utilisée dans le monde de la domotique).
Mon projet : Suivre la température des congélateurs/réfrigérateur/cave à vins du garage.
Malgré plusieurs tentatives (avec des sondes Zigbee ou 433Mhz), je ne suis jamais arrivé à un résultat correct (même si je sais que cela fonctionne bien chez certains !). J’ai perdu des sondes (hs à cause du froid ?), usé des batteries trop rapidement ou bien les températures étaient bloquées (plus de mises à jour).
Je vais donc utiliser un ESP32 sur un kit de développement (c’est la carte avec les connecteurs et les PINs sur laquelle est implanté le processeur ESP32) et raccorder dessus un bus OneWire avec plusieurs sondes DS18B20.
![]() |
![]() |
L’ESP32 de la société chinoise Espressif est le processeur qui se trouve sur la carte de développement ci-dessus, c’est une version plus avancée de l’ESP8266. Il peut se programmer avec l’IDE (Environnement de Développement) Arduino en langage C/C++ ou en LUA. Il y a d’autres possibilités (PlatformIO par exemple), mais je vais prendre l’option IDE Arduino + C/C++. Les avantages principaux de l’ESP32 par rapport à un Arduino :
- Wifi et Bluetooth intégré,
- + de PIN (et certaines qui n’existent pas sur un Arduino),
- énormément plus de mémoire (4 Mo versus 32Ko pour le Uno),
- beaucoup plus rapide (240Mhz versus 16Mhz),
- consommation électrique moindre,
- plus petit,
- alimentation via un connecteur micro-USB avec un chargeur de téléphone,
- moins de 4€ port compris pour les dernières cartes de développement commandées chez Greatzt Store chez Ali.
L’ESP32 fonctionne en 3.3v et la carte est alimenté en 5v, elle transforme le 5v en 3.3v pour l’ESP32.

La communication avec Domoticz se fera en Wifi, l’ESP32 enverra des requêtes JSON à Domoticz pour mettre à jour les dispositifs de suivi des températures. C’est très simple et je n’utilise qu’un seul ESP32.

Le bus OneWire (un fil donc ! + alim et terre) est filaire ce qui évitera les problèmes de batteries, et il supporte plusieurs topologies (série, étoile, //, mixte). Sur la carte ESP32, il n’y aura donc que 3 connexions. Comme le bus fonctionne en 3.3v ou en 5v, on réutilisera le 3.3v en sortie de l’ESP32. Ce bus peut supporter jusqu’à 100 dispositifs.

Vu le tarif, la topologie du bus et l’organisation de mon garage, je vais installer 6 sondes :
- une dans le congélateur blanc
- une dans la cave à vins
- une dans le compartiment congélateur du réfrigérateur gris
- une dans le réfrigérateur gris
- une pour la température du garage
- une pour la température extérieure
On peut même mettre une sonde en haut d’un appareil et une autre en bas pour vérifier l’écart de température 🙂 !
Comme dans cette zone du garage, j’ai deux prises Zwave qui alimentent mes pompes en cas de pluies importantes, je vais remplacer ces 2 prises par une carte 2 relais comme dans l’article de Philippe sur l’arrosage. Il reste à voir l’alimentation en 5v (ou bien trouver des relais en 3.3v), Domoticz pilotera les relais via l’ESP32 en http.
J’ai aussi 2 prises Zwave pour l’alimentation du congélateur et du réfrigérateur mais elles servent aussi pour remonter la consommation électrique de ces appareils donc je les garde.
Passons maintenant à la mise en oeuvre. J’ai beaucoup utilisé ce site qui est une mine d’informations sur le sujet, mais je vais reprendre les points principaux dans cet article car il y a quelques trucs qui ne fonctionnaient pas du premier coup.
Sur la base d’un IDE Arduino version 1.8.13 installé en version française (dans mon cas sur un raspberry), il faut rajouter des « gestionnaires de cartes supplémentaires » choix « Fichier + Préférences » puis dans l’onglet « Paramètres » ajouter les URLs nécessaires, on va aussi ajouter l’ESP8266 :
- https://dl.espressif.com/dl/package_esp32_index.json + Entrée
- https://arduino.esp8266.com/stable/package_esp8266com_index.json + Entrée

Puis OK dans chaque fenêtre et on va dans « Outils + Type de carte + Gestionnaire de carte« , dans le champ de recherche on rentre « esp » (comme dans l’écran ci-dessous) et on installe les gestionnaires de carte pour esp8266 et esp32.

Ensuite dans le menu « Outils« , on va avoir le choix de la carte à configurer. Il faudra aussi choisir le port de communication avec la machine sur laquelle l’IDE Arduino est installé et la vitesse d’Upload.

Pour la gestion de la température, nous allons installer une bibliothèque supplémentaire choix « Outils + Gérer les bibliothèques » et indiquer « dallas » dans le champ de recherche puis « Installer ».

Le C et le C++ sont des langages compilés, seul le code exécutable est envoyé sur l’ESP32. Vous allez donc avoir des erreurs de compilation qui seront parfois liées à l’absence d’une bibliothèque, il faudra donc la rajouter comme pour DallasTemperature ci-dessus.
Voici le premier programme à utiliser pour ce projet : la récupération des adresses de chaque sonde.
Dans ce programme (et dans les programmes C/C++ en général), on trouve 4 parties :
- Les appels aux bibliothèques utilisées dans le programme et la définition des variables globales du programme (lignes 1 à 9), notre bus OneWire est connecté sur la sortie D22 de l’ESP32. A garder à l’esprit : ne pas utiliser la sortie D2 qui est liée à la LED bleue de la carte et qui peut poser des problèmes de chargement de programmes !
- Les fonctions qui peuvent être multiples et qui s’exécutent à chaque fois qu’elles sont appelées dans le programme (la fonction OneWireScanner est en ligne 11 à 53 et elle est appelée en ligne 60 dans la boucle du programme).
- L’initialisation qui est unique et ne s’exécute qu’une seule fois (lignes 55 à 57), elle a le format suivant :
void setup(){
}
- La boucle principale qui est aussi unique mais qui s’exécute indéfiniment (lignes 59 à 62), elle a le format suivant :
void loop(){
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
// One Wire scanner #include <OneWire.h> // Appel à la Bibliothèque OneWire.h // Bus OneWire connecté sur la broche D22 // Installer une résistance de 4.7K entre le +3.3V et le câble de données OneWire ds(22); 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); // Activation de la sortie série } void loop() { // Boucle du programme qui s'exécute indéfiniment OneWireScanner(); // Appel à la fonction OneWireScanner sans paramètre delay(5000); // Attente de 5s } |

Affichage de l’exécution du programme dans la console
On voit l’adresse de la sonde installée et son type, il faut récupérer les adresses de chaque sonde, une par une, pour les réutiliser dans le programme global.
Des informations complémentaires à lire pour mieux comprendre et maîtriser cet environnement :
- Un excellent article pour mieux comprendre lorsque l’on débute
- Comment utiliser l’interface arduino ?
- Au sujet des bibliothèques
- Forum Arduino en français
- Des passionnés de modélisme ferroviaire qui partagent leurs expériences
Article à venir pour le programme complet lorsque tout le matériel sera disponible …




