NodeMCU: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
 
(22 versioni intermedie di 14 utenti non mostrate)
Riga 1:
{{O|informatica|febbraio 2017}}
{{S|hardware|elettronica}}
{{Computer
|cpu=ESP8266<ref>Kumar, Abhijeet, and Apoorva Sharma. "Internet of Life (IOL)." (2015). ISBN 978-93-5156-328-0</ref>(LX106<ref name=8266sdk>{{Cita web|cognome1=Brian Benchoff|titolo=An SDK for the ESP8266 Wi-Fi chip|sito=Hackaday|url=httphttps://hackaday.com/2014/10/25/an-sdk-for-the-esp8266-wifi-chip/|lingua=en|accesso=2 aprile 2015}}</ref>)
|os=XTOS
|nome=NodeMCU
Line 8 ⟶ 7:
}}
[[File:NodeMCU_DEVKIT_1.0_BOTTOM.JPG|miniatura|NodeMCU DEVKIT 1.0 sotto]]
'''NodeMCU''' è una piattaforma [[open source]] sviluppata specificatamente per l'[[Internet delle cose|IoT]].<ref name="nodemcu firmware">{{Cita web|url=https://github.com/nodemcu/nodemcu-firmware|titolo=nodemcu/nodemcu-firmware|sito=GitHub|lingua=en}}</ref><ref>{{Cita web|url=https://hackaday.io/project/3465-playing-with-esp8266/log/11449-nodemcu-lua-firmware|titolo=NodeMCU LUA Firmware &bull; Stack &bull; Hackaday.io|sito=hackaday.io|lingua=en|accesso=2017-04-10 aprile 2017}}</ref> Essa include un [[firmware]] che funziona tramite il modulo [[Wi-Fi]] [[System-on-a-chip|SoC]] [[ESP8266]] e hardware<ref>{{Cita web|url=httphttps://hackaday.com/2015/01/01/a-dev-board-for-the-esp-lua-interpreter/|titolo=A Dev Board For The ESP Lua Interpreter|sito=Hackaday|lingua=en|accesso=2017-04-10 aprile 2017}}</ref> con la base del modulo ESP-12 ed è programmabile in [[Lua]].
 
== Storia ==
 
Il progetto '''[[NodeMCU]]''' inizia nell'ottobre 2014 poco dopo l'uscita del modulo ESP8266 della [[Espressif Systems]], quando Hong rilascia ili primoprimi file del futuro firmware di NodeMCU-Firmware su [[GitHub]].<ref>{{Cita web|url=https://github.com/nodemcu/nodemcu-firmware/commit/9c98808289d0863a41c695e03d4067424fc1cdec|titolo=First commit of NodeMCU Firmware|sito=GitHub|lingua=en|accesso=2017-08-25}}</ref> Due mesi dopo, il progetto si espanse includendo una piattaforma [[Hardware libero|harwarehardware libera]] sviluppata da Huang R rilasciata con estensione [[File Gerber|Gerber]] denominata "Devkit v0.9". <ref>{{Cita web|url=https://github.com/nodemcu/nodemcu-devkit/commit/3c155e5a9f24aa8463aef8c7b011c69e94fcd9c7|titolo=Initial design of NodeMCU devkit|sito=GitHub|lingua=en|accesso=2017-08-25}}</ref>
 
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]] [[Internet delle cose|IoT]], usando [[Lua]] per accedere al delegatobroker [[MQTT]]. <ref>{{Cita pubblicazione|nome=Tuan|cognome=PM|data=2017-08-23|titolo=esp_mqtt: MQTT client library for ESP8266|accesso=2017-08-25|url=https://github.com/tuanpmt/esp_mqtt}}</ref>
 
Un altro avanzamento importante update fu effettuato il 30nel Gennaiogennaio 2015, quando DevsaurusArnim portòLäuger theportò la libreria "[https://github.com/olikraus/u8glib u8glib]" su [[ NodeMCU]], ,dando la possibilità aalla [[NodeMCU]]scheda di gestire [[display]] [[Schermo a cristalli liquidi|LCD]], Screen, [[OLED]], e anche display [[Video Graphics Array|VGA]].<ref>{{Cita web|url=https://github.com/devsaurus/nodemcu-firmware/commit/33601462efdcea189f1f20f2cece66581ee57951|titolo=add u8g module stubs · devsaurus/nodemcu-firmware@3360146|autore=Arnim Läuger|sito=GitHub|lingua=en|accesso=2017-08-25}}</ref>
 
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 [https://nodemcu.readthedocs.io/en/latest/en/build/ costruire firmware] personalizzati che utilizzino solo i moduli necessari per il loro progetto.
 
== Esempi di codice ==
È possibile trovare sul sito ufficiale di NodeMCU una serie di esempi. Oltre questi la [https://nodemcu.readthedocs.io/ Documentazione di NodeMCU] offre piccoli esempi delle funzionalità e dei moduli.
 
=== Connessione ad un Access Point ===
<syntaxhighlight lang="lua" line="1">
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)
</syntaxhighlight>
 
=== Controllo di una porta GPIO ===
<syntaxhighlight lang="lua" line="1">
ledPin = 1
swPin = 2
gpio.mode(ledPin,gpio.OUTPUT)
gpio.write(ledPin,gpio.HIGH)
gpio.mode(swPin,gpio.INPUT)
print(gpio.read(swPin))
</syntaxhighlight>
 
=== Richiesta HTTP ===
<syntaxhighlight lang="lua" line="1">
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")
</syntaxhighlight>Si può fare lo stesso usando il [https://nodemcu.readthedocs.io/en/latest/en/modules/http/ modulo HTTP] :<syntaxhighlight lang="lua" line="1">
http.get("http://nodemcu.com", nil, function(code, data)
if (code < 0) then
print("Richiesta HTTP fallita")
else
print(code, data)
end
end)
</syntaxhighlight>
 
=== Connessione a un client MQTT ===
<syntaxhighlight lang="lua" line="1">
-- 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
</syntaxhighlight>
 
=== UDP client e server ===
<syntaxhighlight lang="lua" line="1">
-- 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")
</syntaxhighlight>
 
== Note ==
<references />
 
== Voci correlate ==
* [[ESP8266]]
 
* [[ESP32]]
* [[ESP Easy]]
* [[Internet of things]]
* [[Microcontroller|MCU (Micro Controller Unit)]]
 
== Altri progetti ==
{{interprogetto}}
 
== Collegamenti esterni ==
* {{Collegamenti esterni}}
 
[[Categoria:Microcontrollori]]
[[Categoria:Internet delle cose]]
[[Categoria:Hardware libero]]
{{Portale|informatica|software libero}}