NodeMCU
![](http://upload.wikimedia.org/wikipedia/commons/thumb/7/7e/NodeMCU_DEVKIT_1.0.jpg/260px-NodeMCU_DEVKIT_1.0.jpg)
Développeur | ESP8266 Opensource Community |
---|
Type | Microcontrôleur à carte unique |
---|
Alimentation | USB |
---|---|
Processeur | ESP8266[1](LX106[2]) ESP32 ESP32-C3 (RISC-V)[3] |
Mémoire | 128kBytes |
Stockage | 4MBytes[4] |
Système d'exploitation | XTOS |
modifier - modifier le code - modifier Wikidata
NodeMCU est une plate-forme open source IoT, matérielle et logicielle[5],[6], basée sur un SoC Wi-Fi ESP8266 ESP-12 fabriqué par Espressif Systems[7],[2]. Le terme « NodeMCU » se réfère par défaut au firmware plutôt qu'aux kits de développement. Le firmware, permettant nativement l'exécution de scripts écrits en Lua, est basé sur le projet eLua[8] et construit sur le SDK Espressif Non-OS pour ESP8266[9]. Il utilise de nombreux projets open source comme lua-cjson[10] et spiffs[11]. Depuis , une version utilisant le processeur ESP32-C3 d’architecture RISC-V est également disponible[3].
Historique
NodeMCU a été créé peu de temps après l'apparition commerciale de l'ESP8266, lancé par Espressif Systems en [12]. L'ESP8266 est un SoC Wi-Fi intégrant un microprocesseur Tensilica (en) Xtensa LX106[2], souvent utilisé dans les applications IoT. Le projet NodeMCU a démarré le , lorsque Hong a publié le premier fichier de nodemcu-firmware sur GitHub[13]. Deux mois plus tard, le projet a été étendu pour inclure une plate-forme matérielle ouverte (open-hardware) avec la publication du fichier à base du composant ESP8266 au format gerber, par le développeur Huang R[14]. Le support du protocole de messagerie MQTT a ensuite été ajouté avec le port d'une bibliothèque du projet Contiki vers la plate-forme ESP8266[15]. Dès lors NodeMCU a été en mesure de supporter le protocole MQTT IoT, à l'aide de Lua pour accéder au broker MQTT. Une autre mise à jour importante a été faite le , avec le port de la bibliothèque d'affichage u8glib[16],[17], permettant ainsi à une carte NodeMCU de gérer facilement des écrans LCD, OLED ou VGA.
Durant l'été 2015, les créateurs ont abandonné ce projet de firmware et un groupe indépendant de contributeurs a pris le relais. À l'été 2016, la plate-forme NodeMCU incluait plus de 40 modules différents. En raison de contraintes de ressources, les utilisateurs doivent sélectionner les modules pertinents pour leur projet et construire un firmware adapté à leurs besoins[18],[19].
En , Espressif annonce la disponibilité d'un nouveau modèle de NodeMCU basé sur le processeur ESP32-C3, d'architecture RISC-V[3].
Projets associés
ESP8266 Arduino de Base
Lorsque le projet Arduino.cc a commencé à développer de nouvelles cartes à microcontrôleur basées sur des processeurs non-AVR, comme le SAM3X d'Atmel (architecture ARM Cortex-M) utilisé dans l'Arduino Due, ils ont eu besoin de modifier l'IDE Arduino, de sorte qu'il serait relativement facile de changer la chaîne d'outils de compilation pour permettre la compilation du C/C++ Arduino vers ces nouveaux processeurs. Pour cela, ils ont introduit la notion de Board Manager (gestionnaire de cartes) et de cores, un core étant l'ensemble des composants logiciels requis pour permettre la compilation vers une architecture cible.
Des contributeurs ont alors développé un core à destination de l'ESP8266[20], permettant l'utilisation de l'IDE Arduino comme solution de développement pour l'ESP8266, et donc pour NodeMCU.
The Button
The Button est un bouton-poussoir connecté en Wi-Fi, conçu par Peter R Jennings[21]. The Button est conçu avec une seule fonctionnalité : lorsque le bouton est enfoncé, une connexion à un serveur web va effectuer la tâche souhaitée. Les applications fournies incluent les fonctions sonnette ou bouton d'alarme.
NodeUSB
NodeUSB est une plate-forme IoT open-hardware de la taille d'une clé USB standard. Il a été conçu pour tirer parti du langage de script de NodeMCU pour une programmation facile. Il est idéal pour les solutions Plug and Play, ce qui permet de faciliter le prototypage pour les développeurs[22].
ijWatch
ijWatch est une smartwatch Wi-Fi open-hardware et open-source, équipée d'un écran OLED et exécutant un firmware NodeMCU[23]. L'auteur estime qu'il s'agit de la première smartwatch, car la montre elle-même est entièrement fonctionnelle sans l'appariement d'un périphérique bluetooth tel qu'un téléphone intelligent.
Les broches de NodeMCU
NodeMCU donne accès aux GPIO (General Purpose Input/Output) et la documentation du projet fournit la table des connections.
IO index | ESP8266 pin | IO index | ESP8266 pin |
---|---|---|---|
0 [*] | GPIO16 | 7 | GPIO13 |
1 | GPIO5 | 8 | GPIO15 |
2 | GPIO4 | 9 | GPIO3 |
3 | GPIO0 | 10 | GPIO1 |
4 | GPIO2 | 11 | GPIO9 |
5 | GPIO14 | 12 | GPIO10 |
6 | GPIO12 |
[*] D0 (GPIO16) ne peut-être utilisé que pour des entrées-sorties en lecture ou écriture, et ne supporte pas les fonctions open-drain, interrupt, PWM/I²C et 1-Wire.
Des exemples de Code
Le dépôt NodeMCU contient sa propre collection d'exemples de code[24]. La documentation NodeMCU[25] fournit de petits exemples pour la plupart des fonctions et des modules.
Se connecter à un AP
print("WIFI !") function listap(t) for ssid,v in pairs(t) do print(ssid,v) end end wifi.setmode(wifi.STATION) wifi.sta.getap(listap) print("connexion au WIFI...") config={} config.ssid="LE NOM DU WIFI" -- modifier ceci config.pwd="LE MOT DE PASSE" -- et ceci aussi wifi.sta.config(config) myTimerWifi = tmr.create() function tryIp() print(".") ip = wifi.sta.getip() if ( ( ip ~= nil ) and ( ip ~= "0.0.0.0" ) )then print("Succès ! Notre ip : ",ip) myTimerWifi:stop() end end myTimerWifi:alarm(1000, tmr.ALARM_AUTO, tryIp)
Accès GPIO
bleu=4 gpio.mode(bleu,gpio.OUTPUT) gpio.write(bleu,1)
Requête HTTP
-- A simple HTTP client 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")
Le module HTTP permet également les requêtes HTTP, de manière plus simplifiée[26].
Serveur HTTP
-- a simple HTTP server srv = net.createServer(net.TCP) srv:listen(80, function(conn) conn:on("receive", function(sck, payload) print(payload) sck:send("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n<h1> Hello, NodeMCU.</h1>") end) conn:on("sent", function(sck) sck:close() end) end)
Se connecter à un Broker MQTT
-- 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
Client et serveur UDP
-- a udp server s=net.createServer(net.UDP) s:on("receive",function(s,c) print(c) end) s:listen(5683) -- a udp client cu=net.createConnection(net.UDP) cu:on("receive",function(cu,c) print(c) end) cu:connect(5683,"192.168.18.101") cu:send("hello")
Source et références
- (en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « NodeMCU » (voir la liste des auteurs).
- Références
- ↑ Kumar, Abhijeet and Apoorva Sharma. "Internet of Life (IOL)" (2015). (ISBN 978-93-5156-328-0)
- ↑ a b et c (en) Brian Benchoff, « A dev board for the ESP LUA Interpreter », sur Hackaday (consulté le )
- ↑ a b et c (en) Jean-Luc AUfranc, « NodeMCU ESP32-C3 WiFi & BLE IoT boards show up for about $4 », sur CNX-Software,
- ↑ (en) Vowstar, « NodeMCU Devkit », sur Github, NodeMCU Team (consulté le )
- ↑ (en) Zeroday, « A lua based firmware for wifi-soc esp8266 », sur Github (consulté le )
- ↑ (en) Hari Wiguna, « NodeMCU LUA Firmware », sur Hackaday (consulté le )
- ↑ (en) Espressif Systems, « Espressif Systems », sur Espressif-WikiDevi (consulté le )
- ↑ (en) Projet eLua, sur le site eluaproject.net (consulté le 11 juillet 2017)
- ↑ (en) Espressif Non-OS SDK pour ESP8266, sur le site bbs.espressif.com (consulté le 11 juillet 2017)
- ↑ (en) Mpx, « Lua CJSON is a fast JSON encoding/parsing module for Lua », sur Github (consulté le )
- ↑ (en) Pellepl, « Wear-leveled SPI flash file system for embedded devices », sur GitHub (consulté le )
- ↑ (en) Espressif system, « IoT Wi-Fi 802.11b/g/n integrated SoC implementation of volume production », 中国上海讯, (lire en ligne, consulté le )
- ↑ (en) Hong, « First commit of NodeMCU Firmware », sur Github (consulté le )
- ↑ (en) Huang R., « Initial design of NodeMCU devkit », sur Github (consulté le )
- ↑ (en) Tuan PM, « MQTT client library for ESP8266 », sur Github (consulté le )
- ↑ (en) Olikraus et Daniel Sittig, « Universal Graphics Library for 8 Bit Embedded Systems », sur Google code (consulté le )
- ↑ (en) Devsaurus, « U8glib for esp8266 », sur Github (consulté le )
- ↑ (en) Building the firmware, sur le site NodeMCU Documentation (consulté le 11 juillet 2017)
- ↑ « NodeMCU custom builds », sur nodemcu-build.com (consulté le )
- ↑ « ESP8266 core for Arduino », sur GitHub (consulté le )
- ↑ (en) NodeUSB, « An open IoT platform that simply works. », sur NodeUSB (consulté le )
- ↑ (en) Anne Jan Brouwer, « ijWatch-Part of IJhack project ijWare », sur ijWare (consulté le )
- ↑ (en) nodemcu-firmware, sur le site github.com (consulté le 11 juillet 2017)
- ↑ (en) NodeMCU documentation (consulté le 11 juillet 2017)
- ↑ (en) HTTP module, sur le site NodeMCU Documentation (consulté le 11 juillet 2017)
Voir aussi
Articles connexes
- ESP8266 ;
- ESP32 ;
- ESP Facile (en) ;
- MCU (Micro-Contrôleur) ;
- L'Internet des objets ;
- Système embarqué.
Portail des logiciels libres
Portail de l’informatique
Portail de l’électricité et de l’électronique