Kürzlich wollte ich wieder einmal die Temperatur mit dem ESP32 lesen. Es stellten sich wieder einmal ein paar Fallstricke heraus die ich hier dokumentiere.
Folgende Formel ist Quark:float voltage = analogread* 5.0; voltage /= 1024.0; (oder 4096) float temperatureC = (voltage - 0.5) * 100 ; //
Erstmal grundlegend: Der ESP32 (und wahrscheinlich auch andere ESPs) lesen nicht innerhalb eines Bereiches von 0-1024 wie der Arduino. Ein Wert beschreibt die V innerhalb von 0-Vin. So ist beim Arduino zum Beispiel der Wert 500 ungefährt 2,5V.
Der ESP wieder hat einen Bereich von 0-4096. Und das nicht allein: Im Gegensatz zum Arduino hat er ein Vin von 3,3V, nicht 5V!
Soviel zum ESP.
Nun das grundsächliche zum TMP36: Eigentlich ein üblicher Temperaturmesser. Er hat eine hohe Spannungstoleranz und gibt Werte von 10mV/°C heraus. Verwirrend wird es erst beim Temperaturbereich. So geben einige Blogs -40° bis +125°, andere -50° bis 125° und im Datenblatt schließlich stehen -50° bis 150°.
Meiner persönlichen Erfahrung nach, bekomme ich die besten Werte mit einer Annahme von -50° bis 125°, das ist aber sicher eine Erfahrungssache und wurde lediglich bei Raumtemperatur geschätzt/beobachtet.
Kommen wir also nun zum Programm. Als nützlich herausgestellt hat sich die mapping-Funktion des ArduinoFrameworks. Dort tragen wir nun als ersten Parameter den gelesenen Wert ein, danach die den minimalen und maximalen Wert welcher auftauchen kann bei dem gelesenen Wert, also 0 und 4095 und als letzte beide Parameter den minimalen und maximalen Wert auf welcher der gelesene Wert gemappt werden soll, in unserem Fall also die Minimal- sowie Maximaltemperatur des Sensors.

Und voilà, heraus sollte ein authentischer Wert kommen!