NodeMCU
NodeMCU computer | |
---|---|
![]() | |
CPU | ESP8266[1](LX106[2]) |
RAM di serie | 128 kBytes |
SO di serie | XTOS |
Sito web | www.nodemcu.com/index_en.html |
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.
Storia
[modifica | modifica wikitesto]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")
Note
[modifica | modifica wikitesto]- ^ 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
[modifica | modifica wikitesto]Altri progetti
[modifica | modifica wikitesto]Wikimedia Commons contiene immagini o altri file su NodeMCU
Collegamenti esterni
[modifica | modifica wikitesto]- (EN) Sito ufficiale, su nodemcu.com.