Bonjour,
une de mes 2 sondes DS18B20 reste bloquée à 85.
J’utilise Jeedom sur Raspberry. Je capte la température sur 2 sondes dallas DS18B20 sur bus 1 wire via un Arduino méga connecté en Ethernet. J’utilise le plugin jeeduino pour réaliser cela. je n’ai pas touché au script généré par Jeeduino.
Les 2 sondes sont correctement câblées et renvoient les bonnes informations (programme de tests IDE ARDUINO).
Les 2 commandes remontent bien distinctement dans le plugin jeeduino.
Une des 2 sondes renvoit la bonne température. L’autre reste bloquée à 85.
Avez-vous une idée de ce que j’ai loupé?
Merci de votre aide.
T’as pas mis un seuil dans les options de ta commande ?
Résolu!!
Auto réponse qui peut aider la communauté.
en comparant le script généré par jeeduino et celui de l’exemple de la librairie one wire, j’ai rajouté « delay(1000); » après le ds.write(0x44, 1);
Je ne comprends pas tout mais il semble que le scan du bus one wire nécessite un temps de pause entre 2 capteurs.
En tout cas ça marche avec 3 sondes, tout remonte sur jeeduino. Je vais charger mon bus avec d’autres sondes et vérifier que tout est ok dans la durée.
Merci quand même.
Voir ci-dessous.
#if (UseDS18x20 == 1)
int read_DSx(int pinD)
{
byte data[12];
byte addr[8];
long first, temp;
char buffer[3];
OneWire ds(pinD);
byte nb_ds18 = 0;
ds.reset_search();
while (ds.search(addr))
{
if (OneWire::crc8(addr, 7) != addr[7]) //Check if there is no errors on transmission
{
#if (DEBUGtoSERIAL == 1)
Serial.println(F("CRC invalide..."));
#endif
return 99999;
}
if (addr[0] != 0x28)
{
#if (DEBUGtoSERIAL == 1)
Serial.println(F("Device is not a DS18B20."));
#endif
return 99999;
}
ds.reset();
ds.select(addr);
ds.write(0x44, 1);
delay(1000); // c'est ici que cela se passe...
nb_ds18++;
}
if (nb_ds18 == 0)
{
ds.reset_search();
#if (DEBUGtoSERIAL == 1)
Serial.println(F("ds not found..."));
#endif
delay(250);
return 99999;
}
nb_ds18 = 0;
delay(800);
jeedom = F("&DS18list_");
jeedom += pinD;
jeedom += F("={");
ds.reset_search();
while (ds.search(addr))
{
jeedom += '"';
jeedom += F("28-");
for (int ii = 6; ii > 0; ii--)
{
if (addr[ii] < 16) jeedom += '0';
itoa (addr[ii], buffer, 16);
jeedom += buffer;
}
jeedom += '"';
jeedom += ':';
jeedom += '"';
ds.reset();
ds.select(addr);
ds.write(0xBE);
for (int ii = 0; ii < 9; ii++)
{
data[ii] = ds.read();
}
temp = (int16_t) ((data[1] << 8) | data[0]) * 6.25;
if (nb_ds18 == 0) first = temp;
nb_ds18++;
#if (DEBUGtoSERIAL == 1)
Serial.println(temp / 100);
#endif
jeedom += temp;
jeedom += '"';
jeedom += ',';
}
jeedom += '}';
return first;
}
#endif