Lecture température sonde DS18B20

Bonjour tout le monde,

Je me sens un peu perdu à cause d'un problème qui me semble très simple à résoudre mais je n'y parviens pas. Je souhaite, pour commencer, lire la valeur d'une sonde DS18B20 étanche dont voici mon raccordement en photo.

J'utilise un ESP32 devkit 1 V4. J'utilise le GPIO 12 (ADC2_5) pour la lecture des donnés. J'ai beau utiliser les codes trouvés sur le net ou ceux fournis avec les sondes mais ca bloque toujours alors que les bonnes librairies sont installées (DallasTemperature de Miles Burton et OneWire de Paul Stoffregen).

Auriez-vou un code sur que je pourrais utiliser en remplacer simplement l'adresse de votre GPIO par le mien ?

Merci

Bonjour @akawa

pour les GPIO des ESP32 il y a quelques réserves.......

l'une d'elle est la suivante : si GPIO12 est à l'état haut à la mise sous tension l'ESP32 ne peut pas booter normalement.
La résistance de tirage à 3,3V associée en général l aux DS18B20 pose donc ici problème sur GPIO12, maivaise pioche....

Changer de GPIO !!

Cette page WEB est à garder sous le coude pour connaître les particularités des GPIO :rocket:
https://randomnerdtutorials.com/esp32-pinout-reference-gpios/

Sur ce même site Random Nerd Tutorials , de très nombreux exemples commentés dont un pour DS18B20 sur ESP32 : https://randomnerdtutorials.com/esp32-ds18b20-temperature-arduino-ide/

Effectivement c'est ce que je me suis dis et je l'ai mis sur le 14.

J'utilise se code:

#include <OneWire.h>

// ---------- Initialisation des variables ---------------------

// Variables propres au DS18B20
const int DS18B20_PIN=14;
const int DS18B20_ID=0x28;
// Déclaration de l'objet ds
OneWire ds(DS18B20_PIN); // on pin DS18B20_PIN (a 4.7K resistor is necessary)

// Variables générales
float DS18B20_temperature;
const int SERIAL_PORT=9600;

void setup() {
// Initialisation du port de communication avec le PC
Serial.begin(SERIAL_PORT);
Serial.println("Initialisation du programme");
}

void loop() { 
DS18B20_temperature = getTemperatureDS18b20(); // On lance la fonction d'acquisition de T°
// on affiche la T°
Serial.print("(DS18B20) =>\t temperature: "); 
Serial.println(DS18B20_temperature);
}

/* --------------- Acquisition de la température ----------------------------------- */
float getTemperatureDS18b20(){
byte i;
byte data[12];
byte addr[8];
float temp =0.0;

//Il n'y a qu'un seul capteur, donc on charge l'unique adresse.
ds.search(addr);

// Cette fonction sert à surveiller si la transmission s'est bien passée
if (OneWire::crc8( addr, 7) != addr[7]) {
Serial.println("getTemperatureDS18b20 : <!> CRC is not valid! <!>");
return false;
}

// On vérifie que l'élément trouvé est bien un DS18B20
if (addr[0] != DS18B20_ID) {
Serial.println("L'équipement trouvé n'est pas un DS18B20");
return false;
}

// Demander au capteur de mémoriser la température et lui laisser 850ms pour le faire (voir datasheet)
ds.reset();
ds.select(addr);
ds.write(0x44);
delay(850);
// Demander au capteur de nous envoyer la température mémorisé
ds.reset();
ds.select(addr);
ds.write(0xBE);

// Le MOT reçu du capteur fait 9 octets, on les charge donc un par un dans le tableau data[]
for ( i = 0; i < 9; i++) {
data[i] = ds.read();
}
// Puis on converti la température (*0.0625 car la température est stockée sur 12 bits)
temp = ( (data[1] << 8) + data[0] )*0.0625;

return temp;
}

Et le moniteur de série ne m'affiche rien mise à part l'heure =>

il ya l'embarras du choix une fois repérées les contraintes !!

Merci @al1fch tout fonctionne. Effectivement il ne faut pas utiliser le GPIO12.
J'ai suivi ce tuto et mon projet fonctionne. Merci !!!! :slight_smile:

@al1fch ,
Sais tu me dire s'il est normal que quand ma sonde S1 > 25 mes relais s'éteignent alors qu'elles doivent s'allumée ? Est-ce que ca serait ma resistan qui causerait cela ? Merci

 if(s1>=25){
    Serial.println("S1 est bien plus haut que 25°C");
   digitalWrite(22,HIGH);
  digitalWrite(23,HIGH);
  digitalWrite(32,HIGH);
  digitalWrite(33,HIGH);
  digitalWrite(25,HIGH);
  digitalWrite(26,HIGH);
  digitalWrite(27,HIGH);
  digitalWrite(13,HIGH);
  } else {
   digitalWrite(22,LOW);
  digitalWrite(23,LOW);
  digitalWrite(32,LOW);
  digitalWrite(33,LOW);
  digitalWrite(25,LOW);
  digitalWrite(26,LOW);
  digitalWrite(27,LOW);
  digitalWrite(13,LOW); 
    }

comportement de nombreuses petites cartes à relais , ces derniers sont activés quand la carte reçoit un état logique bas.

Me conseillerais tu d'utiliser le 3,3v pour les sondes en "parasite" et les relais en 5v ?

Ne pratiquant ni le mode parasite des DS18B20 , ni la comande de cartes à relais 5V à partir d'un GPIO 3,3V je ne suis d'aucune aide.

Pas de souci, je pense même mélanger plusieurs informations ^^

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.