Robins Blog – Technik und Multimedia

Fhem: Temperaturmessung mit dem ESP 8266 und DS18B20 OHNE Arduino – Datenübertragung per WLAN (Teil 1)

Update 19.03.2016 Bitte beachtet auch den Teil 2 dieses Blog-Beitrages!

Update 21.05.2015 Programm korrigiert

Was für eine Überschrift! Die reicht eigentlich als Titel für eine Diplom-Arbeit :-). Viele von Euch verwenden zum Basteln den kostengünstigen WLAN-Baustein ESP 8266 von der Firma Espressif. Meistens benutzt man ihn aber mit der Standard-Firmware und einem Arduino – Nano oder ProMini. Die Macher von NodeMCI haben eine Library herausgebracht, welche Standard-Sensoren von den kostengünstigen 18B20 oder den DTH-22 auch ohne Arduino unterstützt. Siehe hier die Auflistung der bestehenden Module.

Ich wollte Euch heute mal kurz skizzieren, wie man den DS18B20 Temperatursensor unter ESP 8266 zum Rennen bekommt um die Temperatur-Daten dann in Fhem zu katapultieren. Der Trick geht hierbei über Telnet. Das nachfolgende Script ist nicht auf meinem Mist gewachsen, sondern vom Fhem-Forum Leser Kroonen.

Die Zutaten:

Vorbereitende Maßnahmen:

Zunächst muss die Standard-Firmware vom ESP8266 runter, am Besten mit dem ESP8266-Flasher. Vorgehensweise wie immer: GPIO0 auf Masse, Kurz den RST Pin gegen Masse setzen, Flashen und danach den GPIO0 wieder von der Masse entfernen. Die aktuelle Version von NodeMCI befindet sich hier.
Wichtig: Den richtigen GPIO-Pin für den ESP8266-X Chip nehmen, dafür diese Grafik nehmen!

Nach dem Flashen wieder den RST Pin gegen Masse setzen und das wars auch schon.

LUA-Software
Jetzt kann man mit einem geeigneten Lua-Programm den ESP 8266 mit LUA-Software bespielen. Hierzu sich mal die Videos von Hari Wiguna ansehen. Beim Übertragen der Daten GPIO0  NICHT wieder  auf Masse setzen!
Jetzt die Dateien noch für Euer System anpassen und dann auf dem ESP-Chip übertragen. Anschließend kurz resetten.
Anpassungen: Falls beim Testen eine Fehlermeldung wie

PANIC: unprotected error in call to Lua API (fhem.lua:7: attempt to concatenate a nil value)
PANIC: unprotected error in call to Lua API (attempt to concatenate a lightfunction value)
PANIC: unprotected error in call to Lua API (attempt to call a string value)

kommt, habt ihr einen falschen GPIO-Pin gewählt oder das DS18B20 liefert keine Daten.

init.Lua

--init.lua
wifi.setmode(wifi.STATION)
wifi.sta.config("ssidname","password")
wifi.sta.connect()
tmr.alarm(1, 1000, 1, function()
if wifi.sta.getip()== nil then
print("IP unavaiable, Waiting...")
else
tmr.stop(1)
print("ESP8266 mode is: " .. wifi.getmode())
print("The module MAC address is: " .. wifi.ap.getmac())
print("Config done, IP is "..wifi.sta.getip())
dofile ("fhem.lua")
end
end)

fhem.lua


--fhem.lua
require('ds18b20')
-- ESP-01 GPIO Mapping
gpio0 =3
gpio2 =4
ds18b20.setup(gpio2)
t=ds18b20.read()
print("Temp:" .. ds18b20.read() .. " C\n")
if(t==nil) then
t=0
end
tmr.alarm(0,30000, 1, function()
t=ds18b20.read()
conn=net.createConnection(net.TCP, 0)
conn:on("receive", function(conn, payload) print(payload) end )
conn:connect(8083,"192.168.178.6")
conn:send('GET /fhem?cmd=setreading%20esp8266temp%20state%20T:%20' ..t.. '\r\n HTTP/1.1\r\nHost: www.local.lan\r\n".."Connection: keep-alive\r\nAccept: */*\r\n\r\n"')
end)

notwendiges LUA DS18b20-Script

https://github.com/nodemcu/nodemcu-firmware/tree/master/lua_modules/ds18b20

Fhem


define esp8266temp CUL_WS 4
attr esp8266temp event-min-interval state:600
attr esp8266temp room Plots
define FileLog_esp8266temp FileLog ./log/esp8266temp-%Y.log esp8266temp:T:.*
define SVG_FileLog_esp8266temp_1 SVG FileLog_esp8266temp:SVG_FileLog_esp8266temp_1:CURRENT
define SVG_FileLog_esp8266temp_2 SVG FileLog_esp8266temp:SVG_FileLog_esp8266temp_2:CURRENT
attr SVG_FileLog_esp8266temp_2 room Plots

Schaltung und Kurzerklärung

Ergebnis in Fhem:

 

Die mobile Version verlassen