Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Multiple DS18B20
#1
Bonjour,

Afin de surveiller à la fois la température de l'eau, de l'ESP, du Triac... et que sais-je encore.
La bibliothèque Dallas proposant le possibilité de câbler plusieurs sonde dans le même GPIO, serait-il possible d'adapter le code comme dans cette exemple ?

J'ai trouvé ce code pas mal : compter les sonde branchées et de les interroger.

Ainsi libre à l'utilisateurs d'avoir le nombre de sonde qu'il souhaite pour sa surveillance  Smile

https://randomnerdtutorials.com/esp32-ds...duino-ide/ partie Getting Temperature from Multiple DS18B20 Temperature Sensors

Code :
/*********
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com 
*********/

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged TO GPIO 4
#define ONE_WIRE_BUS 4

// 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);

// Number of temperature devices found
int numberOfDevices;

// We'll use this variable to store a found device address
DeviceAddress tempDeviceAddress;

void setup(){
  // start serial port
  Serial.begin(115200);
 
  // Start up the library
  sensors.begin();
 
  // Grab a count of devices on the wire
  numberOfDevices = sensors.getDeviceCount();
 
  // locate devices on the bus
  Serial.print("Locating devices...");
  Serial.print("Found ");
  Serial.print(numberOfDevices, DEC);
  Serial.println(" devices.");

  // Loop through each device, print out address
  for(int i=0;i<numberOfDevices; i++){
    // Search the wire for address
    if(sensors.getAddress(tempDeviceAddress, i)){
      Serial.print("Found device ");
      Serial.print(i, DEC);
      Serial.print(" with address: ");
      printAddress(tempDeviceAddress);
      Serial.println();
    } else {
      Serial.print("Found ghost device at ");
      Serial.print(i, DEC);
      Serial.print(" but could not detect address. Check power and cabling");
    }
  }
}

void loop(){
  sensors.requestTemperatures(); // Send the command to get temperatures
 
  // Loop through each device, print out temperature data
  for(int i=0;i<numberOfDevices; i++){
    // Search the wire for address
    if(sensors.getAddress(tempDeviceAddress, i)){
      // Output the device ID
      Serial.print("Temperature for device: ");
      Serial.println(i,DEC);
      // Print the data
      float tempC = sensors.getTempC(tempDeviceAddress);
      Serial.print("Temp C: ");
      Serial.print(tempC);
      Serial.print(" Temp F: ");
      Serial.println(DallasTemperature::toFahrenheit(tempC)); // Converts tempC to Fahrenheit
    }
  }
  delay(5000);
}

// function to print a device address
void printAddress(DeviceAddress deviceAddress) {
  for (uint8_t i = 0; i < 8; i++){
    if (deviceAddress[i] < 16) Serial.print("0");
      Serial.print(deviceAddress[i], HEX);
  }
}

Cordialement
Alexis
Enphase -> Node-RED -> Source MQTT
3x IQ7+/3x 375WhC + 4x IQ8MC/4x 400WhC
1x Routeur 12.06_Custom -> CES 2,5kW
Domotique gérée sous Jeedom 4.4.19 (DIY VMM Synology)
Répondre
#2
C'est prévu dans la version 12 en développement.
André
Répondre
#3
Bonjour André 
Déjà merci pour tous le travail que tu fais.
J'avais une question est il possible de pouvoir régler l'intervalle des mesures des sondes d'abord ?
Car je me sers d'une des sondes du routeur pour réguler ma batterie d'air chaud.
Pouvoir régler le rafraîchissement des mesures des ds18b20 serait pratique,  quand on a besoin réactivité comme un rafraîchissement toutes les seconds 

Merci d'avance
Cordialement
Répondre
#4
J avais tenté d’augmenter la fréquence de rafraîchissement mais ca faisait buguer le routeur. Je n’ai pas trop chercher à comprendre d’ou ca venait exactement, potentiellement manque de ressources CPU . Mais un rafraîchissement toutes les 30 secondes est le mieux que j ai pu faire sans avoir des resets de l esp
Pour les mesures rapides j ai mis sur un esp à part le programme est tres simple à realiser pour faire une commande de SSR en fonction des températures
Répondre
#5
Bonjour
Actuellement dans la version 12, la lecture de la température se fait toutes les 60 secondes Je n'ai pas l'intention de raccourcir ce temps. Je pense que la lecture bloque l'ESP pendant un moment, c'est une liaison série, le temps que les capteurs répondent. Cela doit avoir un impact sur le déroulement en temps réel et l'ESP a plein d'autres choses à faire. De même, les DS18B20 ont de toute manière un temps d'inertie. Pour le suivi de la température, de sur-échantillantionné n'apportera pas grand-chose.

Cordialement, André.
Répondre
#6
Oui André je confirme , moins de 60sec ca met le bazar
Et de toute façon avec toute l’inertie thermique entre le fluide et la sonde ce n’est pas utile, comme je l’ai deja discuté sur le topic « thermocouple » les DS1820 ont une masse de metal importante à chauffer avant de faire bouger la mesure ….
Répondre
#7
Hello

je ne sais pas si ça peut aider mais personnellement j'ai 6 DS18B20 sur un même ESP32 et je fais la demande de mesure toutes le 2 secondes et la lecture les secondes d'après
seconde 1 : mesure
seconde 2 : lecture
seconde 3 : mesure
seconde 4 : lecture

le code est plus intelligent que 1 2 3 4  . je n'ai pas de blocage
V12.06
utilisateur de node-red
7 esp32
dont un qui pilote ma solution hydro solaire( eau sanitaire, chauffage, SPA)

Philippe Marie
Répondre
#8
Oui si on fait un esp exprès on peut le faire pedaler beaucoup plus vite pour faire l acquisition des mesures.
Encore une fois d aller vite ca n accelerera pas l’inertie de la sonde à cause de la « masse » de metal à chauffer avant d atteindre l élément sensible
Répondre
#9
(31-10-2024, 08:19 PM)Lolo69 a écrit : Oui si on fait un esp exprès on peut le faire pedaler beaucoup plus vite pour faire l acquisition des mesures.
Encore une fois d aller vite ca n accelerera pas l’inertie de la sonde à cause de la « masse » de metal à chauffer avant d atteindre l élément sensible

Oui je suis d'accord sauf que je n'ai pas de masse métallique ,vu que je traite de l'air ,j'ai juste la ds18b20 qui se trouve au bout d'un tube au centre de ma gaine de ventilation.
Après je peux prendre juste un esp 32 pour gérer les températures de la vmc double flux.
Si je veux augmenter le rafraîchissement,il a moyen de le changer dans le code ?
Répondre
#10
Oui tu peux modifier le code , je l ai fait mais si tu mets moins de 60 secondes cela fait planter aléatoirement l ESP regulierement
Je n ai plus le nom de la variable mais si tu fais une recherche sur la valeur 60001 tu devrais tomber dessus

Je parlais de la masse metallique de la sonde en elle meme
N’en déplaise à certains je ferais un montage avec un thermcouple.
Certe un peu moins précis mais en température mais extrêmement plus reactif.
Il existe des preamplis tout faits pour un prix dérisoire sur ALI

https://www.googleadservices.com/pagead/...is=8&adurl=

Tu montes ca sur un esp32 séparé avec un SSR et pour moins de 15 euro tu peux piloter le tout à moins de 10millisecondes ( voir bien moins)et un code très facile à faire générer par une IA si tu n’es pas hyper à l aise avec le code Arduino
Cela utilise un canal SPI donc c est vrai que ca limite à 2 sondes par ESP


En fait avec ces micro contrôles c est magique tu peux tout faire
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 3 visiteur(s)