Mesure de température avec un 18B20 et la bibliothèque DallasTempérature

Bonjour à toutes et à tous,

La mesure d'une température à l'aide d'une sonde 18B20 prend du temps.

Dans sa fonction sensors.requestTemperatures();, une fonction interne : blockTillConversionComplete(bitResolution, req.timestamp); fixe un délai d'attente min de 750 ms avant de pouvoir lire la température.

C'est rédhibitoire pour moi dans mon application.

Y a-t-il dans la bibliothèque DallasTempérature un autre fonction n'imposant pas ce délai, sachant que de toutes façons, il faudra attendre ce temps là. Mais ce temps peut être pris à faire autre chose ; ce qui est le cas dans mon application.

S'il n'y a pas, il va falloir que je mette les mains dans le cambouis d'un vielle fonction que j'avais trouvée et qui peut apparemment être scindée en deux : je lance la première partie, je fais mes autres traitements, et au bout d'une seconde, je viens chercher le résultat.

Cordialement.

Pierre.

La lib. NonBlockingDallas fait exactement ce que tu cherches… et en réduisant la résolution du capteur tu peux envisager des mesures plus rapides que les 700 ms du maximum.

Il y a une méthode .setWaitForConversion() à laquelle on passe un argument True ou False pour que le lancement d'une mesure soit bloquant ou non. Il y a des exemples installés avec la librairie en question.

Pour information :


texte en gras

Quand avez vous besoin d'un pas de 0,0625 °C ? (avec ses 750ms de durée de conversion)
A ce jour je n'ai jamais eu besoin de dépasser 10bits

Merci à tous pour vos informations.

Je me doutais bien que la bibliothèque DallasTemperature permettait de sauter cette latence de mesure, mais je n'avais pas poussé assez loin ma lecture des différentes fonctions.

En tous cas, en mettant setWaitForConversion() à false, on évite cette latence.

Avec un ESP32 et trois sondes 18B20 connectées et après avoir relevé les adresses de chaque sonde (sondeX) et les utilisant dans la fonction de lecture, j'obtiens les résultats suivants, quelque soit la résolution choisie (9 à 12 bits) :

  • lancement de la mesure par sensors.requestTemperatures(); --> 2 mS
  • mes autres tâches qui durent environ 1 S
  • lecture de chaque sonde par sensors.getTempC(sondeX, 0); --> 12 mS

Je ne sais pas faire mieux.

Cordialement.

Pierre.

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