Update 19.03.2016 Bitte beachtet auch den Teil 2 dieses Blog-Beitrages!
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:
- ESP 8266 mit mindestens 1 GPIO (also z. B. den ESP8266 01 (amazon: Demarkt ESP8266 Serial WIFI Wireless Transceive Modul Send Receive LWIP AP+STA
), andere gehen aber auch, siehe Foto) - Temperatursensor DS18B20, s. Amazon: 10 × DS18B20 Digital Temperature Sensor Thermperatursensor TO92 – 55°C – +125°C
- 4,7 K-Ohm Widerstand, s. Amazon: Leistungs-Widerstand 4K7, Kohleschicht 1W, Set 10-fach
- 3,3V , (optional!) z. B. geregelt mit einem LM1117 3.3 (amazon: 5pcs LM1117T-3.3 LM1117T LD1117 3.3V TO-220
oder so eine Platine: DC-DC Step-down Einstellbare Power Supply Module w / Draht - Optional: USART zum Flashen der ESP-LUA Firmware
- Breadboard zum Ausprobieren: Steckbrett Breadboard Experimentierboard Steckplatine 400 Kontakte
- Spaß am Basteln, Zeit und Geduld
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: