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 ?
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....
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 =>
@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);
}