NodeMCU

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

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.

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 | modifica wikitesto]

È 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 | modifica wikitesto]
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 | modifica wikitesto]
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 | modifica wikitesto]
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 | modifica wikitesto]
-- 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 | modifica wikitesto]
-- 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") 
  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 | modifica wikitesto]

Altri progetti

[modifica | modifica wikitesto]

Collegamenti esterni

[modifica | modifica wikitesto]