Bonjour
Après mon projet PZEM je voulais m'attaquer à récupérer les températures au niveau de ma chaudière :
3 capteurs DS18B20 (1 retour d'eau, 1 départ d'eau, 1 cuve chaudière)
Donc j'étais partie sur 3 GPIO.
En cherchant des exemples j'ai trouvé des infos sur OneWire qui permet de connecter plusieur capteur compatible (dont les DS18B20) sur une seule GPIO.
Donc en théorie il est possible de brancher 5, 20, 1000 ... capteurs sur un simple ESP-01.
Perso je n'est pas essayé avec un ESP-01 mais avec mon NodeMcu de test : ça fonctionne nickel avec mes 3 capteurs.
J'y est ajouté le wifi et la com vers Domoticz et ça donne :
La partie Variables :
// NodeMcu V3 Pin D0/GPIO16 D1/GPIO5 D2/GPIO4 D3/GPIO0 D4/GPIO2 D5/GPIO14 D6/GPIO12 D7/GPIO13 D8/GPIO15 RX/GPIO3 TX/GPIO1 S2/GPIO9 S3/GPIO10
// ESP-01 GPIO0 GPIO2 RX/GPIO3 TX/GPIO1
// ESP-12E 4/GPIO16 5/GPIO14 6/GPIO12 7/GPIO13 9/GPIO11 10/GPIO7 11/GPIO9 12/GPIO10 13/GPIO8 14/GPIO6 16/GPIO15 17/GPIO2 18/GPIO0 19/GPIO4 20/GPIO5 21/GPIO3 22/GPIO1
//Bus OneWire
#define ONE_WIRE_BUS 0 //Data des capteurs connectés sur D3/GPIO0
OneWire oneWire(ONE_WIRE_BUS);//Ne pas toucher
DallasTemperature sensors(&oneWire);//Ne pas toucher
DeviceAddress AdrCapteur;//Ne pas toucher
//Variables
const char* ssid ="NomduWifi";//SSID du Wifi
const char* password = "MotdePasse";//Mot de passe du Wifi
const String DZ1 = "GET /json.htm?type=command¶m=udevice&idx=";//Ne pas toucher
const String DZ2 = "&nvalue=0&svalue=";//Ne pas toucher
const String DZ3 = " HTTP/1.1";//Ne pas toucher
const String AdrIP = "192.168.x.x";//Adresse IP de domoticz
const int Port = 8080;//Port de domoticz
String IDX;//Ne pas toucher
String DataInput;//Ne pas toucher
int MesIDX[]={292, 293, 294};//IDX des Capteurs OneWire
int NBreCapteurs;//Ne pas toucher
En rouge les valeurs à modifier pour votre installation
Pour la partie :
int MesIDX[]={292, 293, 294};//IDX des Capteurs OneWire
il faut remplacer 292, 293, 294 par les IDX de vos capteurs (Si 10 capteurs il faut 10 IDX...)
Il vous faudra installer les bibliothèque OneWire et Dallas en plus de ESP8266WiFiMulti.h et WiFiClient.h
Sur Domoticz ajouter 3 capteurs virtuel Température
Sur l'exemple de câblage se sont des DS18D20 type transistor perso se sont des sur câble :
Jaune data
Rouge +VCC
Noir GND
Multiples Capteurs DS18B20 sur 1 seule GPIO
Multiples Capteurs DS18B20 sur 1 seule GPIO
- Pièces jointes
-
- DS18B20MultiV2.zip
- (2.66 Kio) Téléchargé 237 fois
-
- DS18B20Multi.zip
- (1.33 Kio) Téléchargé 220 fois
-
- OneWire.png (202.95 Kio) Consulté 2537 fois
-
- Dallas.png (152.96 Kio) Consulté 2537 fois
-
- Cablage type.png (439.98 Kio) Consulté 2537 fois
Dernière modification par VBill le 23 avr. 2020, 09:01, modifié 2 fois.
Re: Multiples Capteurs DS18B20 sur 1 seule GPIO
Bon ça me démangeais de trop d'essayer avec ESP-01 : C'est fait et ça marche nickel ...
Pour les capteurs même montage
Sur le ESP-01 GPIO0 vers data
Gnd vers 0V
VCC vers +3.3v
Sans oublier le pont entre VCC et CHPD
Pour les capteurs même montage
Sur le ESP-01 GPIO0 vers data
Gnd vers 0V
VCC vers +3.3v
Sans oublier le pont entre VCC et CHPD
Re: Multiples Capteurs DS18B20 sur 1 seule GPIO
Bonjour
J'ai modifier le prog en remplacent WifiClient.h par ESP8266HTTPClient.h beaucoup plus simple à utiliser et surtout avec la possibilité de lire l'état des capteurs et d'écrire dans le Log de Domoticz (Sans espace dans le texte sinon ça ne marche pas !! Remplacer les espace par %20).
J'ai restructuré le prog avec des fonctions.
Il y a 4 entrées de programmées (Le prog est pour ma chaudière) Attention les 3 premières sont inversées (! devant digitalRead)
Je mets le nouveau prog dans le poste 1 du sujet Noms : DS18B20MultiV2
#include <ESP8266WiFiMulti.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <ESP8266HTTPClient.h>
HTTPClient domoticz_client;
// NodeMcu V3 Pin D0/GPIO16 D1/GPIO5 D2/GPIO4 D3/GPIO0 D4/GPIO2 D5/GPIO14 D6/GPIO12 D7/GPIO13 D8/GPIO15 RX/GPIO3 TX/GPIO1 S2/GPIO9 S3/GPIO10
// ESP-01 GPIO0 GPIO2 RX/GPIO3 TX/GPIO1
// ESP-12E 4/GPIO16 5/GPIO14 6/GPIO12 7/GPIO13 9/GPIO11 10/GPIO7 11/GPIO9 12/GPIO10 13/GPIO8 14/GPIO6 16/GPIO15 17/GPIO2 18/GPIO0 19/GPIO4 20/GPIO5 21/GPIO3 22/GPIO1
//Variables
const char* ssid ="NomduWifi";//SSID du Wifi
const char* password = "MotdePasse";//Mot de passe du Wifi
const char* NameLan = "ESP_DS18B20";//Nom sur le réseau
const String AdrIP = "192.168.x.x";//Adresse IP de domoticz
const int Portdz = 8080;//Port de domoticz
const int TempsT = 10;//Temps entre deux cycle de lecture des sonde de température 10 = 10 secondes
int DelayProg = 250;//Temps de cycle du programme 250 = 0.25 Seconde (Min 250 Max 1000 = 1 seconde)
int IDXow;//Ne pas toucher
String ControlInput;//Ne pas toucher
const int IDXcapteur[] = {292, 293, 294};//IDX des Capteurs OneWire
const int IDXinput1 = 295;//IDX Ventilateur
const int IDXinput2 = 296;//IDX Allumage
const int IDXinput3 = 297;//IDX Vis
const int IDXinput4 = 298;//IDX Circulateur
int NBreCapteurs;//Ne pas toucher
int TempsActuel = (TempsT * 1000);//Ne pas toucher
int StatusInput1;//Ne pas toucher
int StatusInput2;//Ne pas toucher
int StatusInput3;//Ne pas toucher
int StatusInput4;//Ne pas toucher
String Control1;//Ne pas toucher
String Control2;//Ne pas toucher
String Control3;//Ne pas toucher
String Control4;//Ne pas toucher
J'ai modifier le prog en remplacent WifiClient.h par ESP8266HTTPClient.h beaucoup plus simple à utiliser et surtout avec la possibilité de lire l'état des capteurs et d'écrire dans le Log de Domoticz (Sans espace dans le texte sinon ça ne marche pas !! Remplacer les espace par %20).
J'ai restructuré le prog avec des fonctions.
Il y a 4 entrées de programmées (Le prog est pour ma chaudière) Attention les 3 premières sont inversées (! devant digitalRead)
Je mets le nouveau prog dans le poste 1 du sujet Noms : DS18B20MultiV2
#include <ESP8266WiFiMulti.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <ESP8266HTTPClient.h>
HTTPClient domoticz_client;
// NodeMcu V3 Pin D0/GPIO16 D1/GPIO5 D2/GPIO4 D3/GPIO0 D4/GPIO2 D5/GPIO14 D6/GPIO12 D7/GPIO13 D8/GPIO15 RX/GPIO3 TX/GPIO1 S2/GPIO9 S3/GPIO10
// ESP-01 GPIO0 GPIO2 RX/GPIO3 TX/GPIO1
// ESP-12E 4/GPIO16 5/GPIO14 6/GPIO12 7/GPIO13 9/GPIO11 10/GPIO7 11/GPIO9 12/GPIO10 13/GPIO8 14/GPIO6 16/GPIO15 17/GPIO2 18/GPIO0 19/GPIO4 20/GPIO5 21/GPIO3 22/GPIO1
//Variables
const char* ssid ="NomduWifi";//SSID du Wifi
const char* password = "MotdePasse";//Mot de passe du Wifi
const char* NameLan = "ESP_DS18B20";//Nom sur le réseau
const String AdrIP = "192.168.x.x";//Adresse IP de domoticz
const int Portdz = 8080;//Port de domoticz
const int TempsT = 10;//Temps entre deux cycle de lecture des sonde de température 10 = 10 secondes
int DelayProg = 250;//Temps de cycle du programme 250 = 0.25 Seconde (Min 250 Max 1000 = 1 seconde)
int IDXow;//Ne pas toucher
String ControlInput;//Ne pas toucher
const int IDXcapteur[] = {292, 293, 294};//IDX des Capteurs OneWire
const int IDXinput1 = 295;//IDX Ventilateur
const int IDXinput2 = 296;//IDX Allumage
const int IDXinput3 = 297;//IDX Vis
const int IDXinput4 = 298;//IDX Circulateur
int NBreCapteurs;//Ne pas toucher
int TempsActuel = (TempsT * 1000);//Ne pas toucher
int StatusInput1;//Ne pas toucher
int StatusInput2;//Ne pas toucher
int StatusInput3;//Ne pas toucher
int StatusInput4;//Ne pas toucher
String Control1;//Ne pas toucher
String Control2;//Ne pas toucher
String Control3;//Ne pas toucher
String Control4;//Ne pas toucher