Difference between revisions of "TempCTRL v2 nodemcu lua"

From Open Source Ecology - Germany
Jump to navigation Jump to search
Line 2: Line 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)  
  
Es werden zwei Module benötigt, namens "init-lua" und "main.lua".
+
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.
 +
 
 +
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.
 +
 
 +
 
 +
Als LUA-Script werden zwei Module 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.

Revision as of 07:35, 31 January 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.

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.


Als LUA-Script werden zwei Module 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)