NodeMCU
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 | |
---|---|
![]() | |
CPU | ESP8266[1](LX106[2]) |
RAM di serie | 128 kBytes |
SO di serie | XTOS |
Sito web | www.nodemcu.com/index_en.html |
Storia
modificaIl 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
modificaprint(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
modificaledPin = 1
swPin = 2
gpio.mode(ledPin,gpio.OUTPUT)
gpio.write(ledPin,gpio.HIGH)
gpio.mode(swPin,gpio.INPUT)
print(gpio.read(swPin))
Richiesta HTTP
modificaconn = 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- ^ Kumar, Abhijeet, and Apoorva Sharma. "Internet of Life (IOL)." (2015). ISBN 978-93-5156-328-0
- ^ (EN) Brian Benchoff, An SDK for the ESP8266 Wi-Fi chip, su Hackaday. URL consultato il 2 aprile 2015.
- ^ (EN) nodemcu/nodemcu-firmware, su GitHub.
- ^ (EN) NodeMCU LUA Firmware • Stack • Hackaday.io, su hackaday.io. URL consultato il 10 aprile 2017.
- ^ (EN) A Dev Board For The ESP Lua Interpreter, su Hackaday. URL consultato il 10 aprile 2017.
- ^ (EN) First commit of NodeMCU Firmware, su GitHub. URL consultato il 25 agosto 2017.
- ^ (EN) Initial design of NodeMCU devkit, su GitHub. URL consultato il 25 agosto 2017.
- ^ Tuan PM, esp_mqtt: MQTT client library for ESP8266, 23 agosto 2017. URL consultato il 25 agosto 2017.
- ^ (EN) Arnim Läuger, add u8g module stubs · devsaurus/nodemcu-firmware@3360146, su GitHub. URL consultato il 25 agosto 2017.
Voci correlate
modificaAltri progetti
modifica- Wikimedia Commons contiene immagini o altri file su NodeMCU
Collegamenti esterni
modifica- (EN) Sito ufficiale, su nodemcu.com.