TempCTRL v2 nodemcu lua: Unterschied zwischen den Versionen
Case (Diskussion | Beiträge) |
Case (Diskussion | Beiträge) |
||
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
Zeile 2: | Zeile 2: | ||
Hier die aktuelle Firmware-Version für das ESP8266-Modul von TempCTRL V.2 (Stand 30.01.2016) | Hier die aktuelle Firmware-Version für das ESP8266-Modul von TempCTRL V.2 (Stand 30.01.2016) | ||
− | + | ESP8266-Module sind normalerweise werksseitig mit einer Firmware ausgestattet, welche sogenannte "AT-Befehle" interpretiert. Dies ist aus verschiedenen Gründen eher unkomfortabel, weshalb man sie heutzutage oft und gern durch eine andere Firmware namens "NodeMCU" ersetzt, und dann mit LUA-Scripten arbeiten kann. Siehe auch http://nodemcu.com/index_en.html | |
+ | |||
+ | Als NodeMCU-Firmware ist hier die Version "nodemcu_float_0.9.6-dev_20150704.bin" verwendet worden und somit erprobt und getestet. Neuere Versionen sollten aber ebensogut funktionieren und können downgeloadet werden von https://github.com/nodemcu/nodemcu-firmware | ||
+ | |||
+ | |||
+ | Ansonsten werden für TempCTRL V.2 noch zwei LUA-Scripte benötigt, namens "init-lua" und "main.lua". | ||
In init.lua wird die WLAN Verbindung zum lokalen Router aufgebaut, deshalb müssen hier noch die eigenen Zugangsdaten eingesetzt werden. Der Verbindungsaufbau und die Vergabe einer IP-Adresse kann theoretisch auch per DHCP erfolgen, weshalb hier noch ein entsprechender Code-Abschnitt in auskommentierter Form vorhanden ist. Es ist aber empfehlenswert, stattdessen lieber eine statische IP-Adresse zuzuweisen. In dem entsprechenden Code-Abschnitt muss eine IP-Adresse nach Wahl, aber innerhalb des lokalen Netzwerks (also z.B.: "192.168.178.209") eingesetzt werden, sowie die Gateway-Adresse des Routers angepasst werden. | In init.lua wird die WLAN Verbindung zum lokalen Router aufgebaut, deshalb müssen hier noch die eigenen Zugangsdaten eingesetzt werden. Der Verbindungsaufbau und die Vergabe einer IP-Adresse kann theoretisch auch per DHCP erfolgen, weshalb hier noch ein entsprechender Code-Abschnitt in auskommentierter Form vorhanden ist. Es ist aber empfehlenswert, stattdessen lieber eine statische IP-Adresse zuzuweisen. In dem entsprechenden Code-Abschnitt muss eine IP-Adresse nach Wahl, aber innerhalb des lokalen Netzwerks (also z.B.: "192.168.178.209") eingesetzt werden, sowie die Gateway-Adresse des Routers angepasst werden. |
Aktuelle Version vom 31. Januar 2016, 07:42 Uhr
Hier die aktuelle Firmware-Version für das ESP8266-Modul von TempCTRL V.2 (Stand 30.01.2016)
ESP8266-Module sind normalerweise werksseitig mit einer Firmware ausgestattet, welche sogenannte "AT-Befehle" interpretiert. Dies ist aus verschiedenen Gründen eher unkomfortabel, weshalb man sie heutzutage oft und gern durch eine andere Firmware namens "NodeMCU" ersetzt, und dann mit LUA-Scripten arbeiten kann. Siehe auch http://nodemcu.com/index_en.html
Als NodeMCU-Firmware ist hier die Version "nodemcu_float_0.9.6-dev_20150704.bin" verwendet worden und somit erprobt und getestet. Neuere Versionen sollten aber ebensogut funktionieren und können downgeloadet werden von https://github.com/nodemcu/nodemcu-firmware
Ansonsten werden für TempCTRL V.2 noch zwei LUA-Scripte benötigt, namens "init-lua" und "main.lua".
In init.lua wird die WLAN Verbindung zum lokalen Router aufgebaut, deshalb müssen hier noch die eigenen Zugangsdaten eingesetzt werden. Der Verbindungsaufbau und die Vergabe einer IP-Adresse kann theoretisch auch per DHCP erfolgen, weshalb hier noch ein entsprechender Code-Abschnitt in auskommentierter Form vorhanden ist. Es ist aber empfehlenswert, stattdessen lieber eine statische IP-Adresse zuzuweisen. In dem entsprechenden Code-Abschnitt muss eine IP-Adresse nach Wahl, aber innerhalb des lokalen Netzwerks (also z.B.: "192.168.178.209") eingesetzt werden, sowie die Gateway-Adresse des Routers angepasst werden.
init.lua:
-- Global Variables (Modify for your network)
-- Achtung: An dieser Stelle müssen die Zugangsdaten für das eigene WLAN eingesetzt werden !!!
ssid = "oseg"
pass = "2390189794927415"
-- Configure Wireless Internet
wifi.setmode(wifi.STATION)
--print('\n set mode=STATION (mode='..wifi.getmode()..')\n')
wifi.sta.config(ssid,pass)
-- wifi.sta.connect()
-- For IP from DHCP uncomment the following block
--tmr.alarm(0, 1000, 1, function()
-- if wifi.sta.getip() == nil then
-- print("Connecting to AP...\n")
-- else
-- ip, nm, gw=wifi.sta.getip()
-- print("IP Info: \nIP Address: ",ip)
-- print("Netmask: ",nm)
-- print("Gateway Addr: ",gw,'\n')
-- print('MAC Address: ',wifi.sta.getmac())
-- print('Chip ID: ',node.chipid())
-- print('Heap Size: ',node.heap(),'\n')
-- tmr.stop(0)
-- end
--end)
-- Achtung: An dieser Stelle muss eine statische IP-Adresse im lokalen Netzwerk eingesetzt werden !!!
wifi.sta.setip({ip="192.168.178.209",netmask="255.255.255.0",gateway="192.168.178.1"})
srv=net.createServer(net.TCP)
-- wifi config end
-- serial config
-- uart.setup(0,9600,8,0,1)
uart.setup(0,9600,8,0,1)
-- serial config end
-- Run the main file
dofile("main.lua")
Die main.lua lauscht einfach nur auf Daten aus dem seriellen Port. Dabei handelt es sich genau um die Logging-Datensamples vom Arduino, also Temperatur usw., welcher dieser periodisch an das ESP-Modul seriell überträgt. Dieses wartet wiederum auf HTTP-Requests aus dem WLAN und antwortet dann mit Ausgabe einer minimalen WEB-Seite, welche lediglich die besagten Logging-Daten enthält.
An der main.lua braucht/sollte eigentlich nichts verändert werden. Falls aber doch, muss man auf Folgendes achten: Da sämtliche seriell einkommenden Daten sozusagen direkt ins WLAN "geschaufelt" werden, ist der NodeMCU-interne Interpreter, dem man normalerweise seriell und interaktiv auch Befehle mitgeben kann, quasi ausgehebelt, was widerum bedeutet, das sobald das lua-script einmal draufgeflasht wurde, die ESPlorer-IDE nicht mehr funktioniert. Solange man nichts ändern will ist das auch ok, aber falls doch befindet man sich in einer Dead-Lock-Situation. In diesem Fall hilft nur noch, die NodeMCU-Firmware nochmal neu auf das ESP-Modul zu brennen. Das ist zwar etwas unkomfortabel, aber zumindest ein gangbarer Weg. Und normalerweise muss man ja auch nicht hier ran.
main.lua:
-- main.lua --
print('\n main.lua serial2wifi OpenEcoLab Rahden 2015\n')
t="No data in buffer"
uart.on("data", 0,
function(data)
--print("receive from uart:", data)
t = data
end,
1)
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
conn:on("receive",function(conn,payload)
print(payload)
conn:send("HTTP/1.1 200 OK\n\n")
conn:send("<html><body>")
-- conn:send(tmr.now() .. ":") -- system-uptime
conn:send(t)
conn:send("</html></body>")
conn:on("sent",function(conn) conn:close() end)
end)
end)