NodeMCU

piattaforma IoT open source programmabile in linguaggio Lua

NodeMCU è una piattaforma open source sviluppata specificatamente per l'IoT.[3][4] Essa include un firmware che funziona tramite il modulo Wi-Fi SoC ESP8266 e hardware[5] con la base del modulo ESP-12 ed è programmabile in Lua.

NodeMCU
computer
CPUESP8266[1](LX106[2])
RAM di serie128 kBytes
SO di serieXTOS
Sito webwww.nodemcu.com/index_en.html
NodeMCU DEVKIT 1.0 sotto

Storia modifica

Il progetto NodeMCU inizia nell'ottobre 2014 poco dopo l'uscita del modulo ESP8266 della Espressif Systems, quando Hong rilascia i primi file del futuro firmware di NodeMCU su GitHub.[6] Due mesi dopo, il progetto si espanse includendo una piattaforma hardware libera sviluppata da Huang R rilasciata con estensione Gerber denominata "Devkit v0.9".[7]

Nello stesso mese, Tuan PM porta la libreria client MQTT da Contiki alla piattaforma ESP8266 SoC e lo adattò al progetto NodeMCU. Così facendo NodeMCU fu in grado di supportare il protocollo MQTT IoT, usando Lua per accedere al broker MQTT.[8]

Un altro avanzamento importante fu effettuato nel gennaio 2015, quando Arnim Läuger portò la libreria "u8glib" su NodeMCU, dando la possibilità alla scheda di gestire display LCD, OLED, e anche display VGA.[9]

Nell'estate 2015 i creatori hanno abbandonato lo sviluppo del firmware ma un gruppo di creatori indipendenti continua a portare avanti il progetto. Nel 2016 NodeMCU includeva più di 40 moduli diversi. Tuttavia gli utenti, a causa di insufficienza di risorse della scheda, sono costretti a costruire firmware personalizzati che utilizzino solo i moduli necessari per il loro progetto.

Esempi di codice modifica

È possibile trovare sul sito ufficiale di NodeMCU una serie di esempi. Oltre questi la Documentazione di NodeMCU offre piccoli esempi delle funzionalità e dei moduli.

Connessione ad un Access Point modifica

print(wifi.sta.getip())
--nil, il nodemcu non è collegato a nessun access point
wifi.setmode(wifi.STATION)
wifi.sta.config("SSID","password")
-- wifi.sta.connect() non è più necessario in quanto wifi.sta.config autoconnette il nodemcu all'ap.
tmr.create():alarm(1000, 1, function(cb_timer)
  if wifi.sta.getip() == nil then
    print("Connessione...")
  else
    cb_timer:unregister()
    print("Connesso, l'IP è :  "..wifi.sta.getip())
  end
end)

Controllo di una porta GPIO modifica

ledPin = 1
swPin = 2
gpio.mode(ledPin,gpio.OUTPUT)
gpio.write(ledPin,gpio.HIGH)
gpio.mode(swPin,gpio.INPUT)
print(gpio.read(swPin))

Richiesta HTTP modifica

conn = net.createConnection(net.TCP, 0)
conn:on("receive", function(sck, payload) print(payload) end)
conn:on("connection", function(sck)
  sck:send("GET / HTTP/1.1\r\nHost: nodemcu.com\r\n"
          .. "Connection: keep-alive\r\nAccept: */*\r\n\r\n")
end)
conn:connect(80, "nodemcu.com")

Si può fare lo stesso usando il modulo HTTP :

http.get("http://nodemcu.com", nil, function(code, data)
    if (code < 0) then
      print("Richiesta HTTP fallita")
    else
      print(code, data)
    end
  end)

Connessione a un client MQTT modifica

-- init mqtt client with keepalive timer 120sec
m = mqtt.Client("clientid", 120, "user", "password")

-- setup Last Will and Testament (optional)
-- Broker will publish a message with qos = 0, retain = 0, data = "offline"
-- to topic "/lwt" if client don't send keepalive packet
m:lwt("/lwt", "offline", 0, 0)

m:on("connect", function(con) print ("connected") end)
m:on("offline", function(con) print ("offline") end)

-- on publish message receive event
m:on("message", function(conn, topic, data)
  print(topic .. ":" )
  if data ~= nil then
    print(data)
  end
end)

-- for secure: m:connect("192.168.11.118", 1880, 1)
m:connect("192.168.11.118", 1880, 0, function(conn) print("connected") end)

-- subscribe topic with qos = 0
m:subscribe("/topic",0, function(conn) print("subscribe success") end)
-- or subscribe multiple topic (topic/0, qos = 0; topic/1, qos = 1; topic2 , qos = 2)
-- m:subscribe({["topic/0"]=0,["topic/1"]=1,topic2=2}, function(conn) print("subscribe success") end)
-- publish a message with data = hello, QoS = 0, retain = 0
m:publish("/topic","hello",0,0, function(conn) print("sent") end)

m:close();
-- you can call m:connect again

UDP client e server modifica

-- un server udp
s=net.createServer(net.UDP)
s:on("receive",function(s,c) print(c) end)
s:listen(5683)

-- un client udp
cu=net.createConnection(net.UDP)
cu:on("receive",function(cu,c) print(c) end)
cu:connect(5683,"192.168.18.101")
cu:send("hello")

Note modifica

  1. ^ Kumar, Abhijeet, and Apoorva Sharma. "Internet of Life (IOL)." (2015). ISBN 978-93-5156-328-0
  2. ^ (EN) Brian Benchoff, An SDK for the ESP8266 Wi-Fi chip, su Hackaday. URL consultato il 2 aprile 2015.
  3. ^ (EN) nodemcu/nodemcu-firmware, su GitHub.
  4. ^ (EN) NodeMCU LUA Firmware • Stack • Hackaday.io, su hackaday.io. URL consultato il 10 aprile 2017.
  5. ^ (EN) A Dev Board For The ESP Lua Interpreter, su Hackaday. URL consultato il 10 aprile 2017.
  6. ^ (EN) First commit of NodeMCU Firmware, su GitHub. URL consultato il 25 agosto 2017.
  7. ^ (EN) Initial design of NodeMCU devkit, su GitHub. URL consultato il 25 agosto 2017.
  8. ^ Tuan PM, esp_mqtt: MQTT client library for ESP8266, 23 agosto 2017. URL consultato il 25 agosto 2017.
  9. ^ (EN) Arnim Läuger, add u8g module stubs · devsaurus/nodemcu-firmware@3360146, su GitHub. URL consultato il 25 agosto 2017.

Voci correlate modifica

Altri progetti modifica

Collegamenti esterni modifica