NodeMCU

Un article de Wikipédia, l'encyclopédie libre.
Sauter à la navigation Sauter à la recherche
NodeMCU
NodeMCU DEVKIT 1.0.jpg
Caractéristiques
Développeur
ESP8266 Opensource Community
Type
Système d'exploitation
XTOS
Alimentation
USB
Processeur
ESP8266[1](LX106[2])
Stockage
4MBytes[3]
Mémoire
128kBytes
Site web

NodeMCU est une plate-forme open source IoT[4],[5]. Il contient le firmware qui fonctionne sur le ESP8266 Wi-Fi SoC de Espressif Systèmes[6] et le matériel[2] qui est basé sur le module ESP-12. Le terme "NodeMCU" se réfère par défaut au firmware plutôt qu'aux kits de développement. Le firmware utilise le Lua qui est un langage de script. Il est basé sur le projet eLua[7] et construit sur l'Espressif Non-OS SDK pour ESP8266[8]. Il utilise de nombreux projets open source comme lua-cjson[9] et spiffs[10].

Historique[modifier | modifier le code]

NodeMCU DEVKIT 1.0 BAS

NodeMCU a été créé peu de temps après l'apparition commerciale de l'ESP8266. Le 30 décembre 2013, la société « Espressif Systems » a commencé la production du modèle : ESP8266[11]. L'ESP8266 est un SoC Wi-Fi gratuit intégré à un Tensilica Xtensa LX106 de base[réf. nécessaire], largement utilisé dans les applications IoT (voir les projets associés ci-dessous). NodeMCU a commencé le 13 octobre 2014, lorsque Hong a publié le premier fichier de nodemcu-firmware sur GitHub[12]. Deux mois plus tard, le projet a été étendu pour inclure une plate-forme ouverte (open-hardware) lorsque le développeur Huang R a publié le fichier au format gerber à base du composant ESP8266, nommé devkit v0.9[13]. Dans le mois courant, Tuan PM a mis à disposition de téléchargement la bibliothèque client MQTT de Contiki vers la plate-forme SoC ESP8266[14] et l'a inséré au projet NodeMCU. Dès lors NodeMCU a été en mesure de supporter le protocol MQTT Ido, à l'aide de Lua pour accéder au broker MQTT. Une autre mise à jour importante a été faite le 30 janvier 2015, lorsque Devsaurus a porté le u8glib[15] vers le projet NodeMCU[16] permettant ainsi au NodeMCU de gérer facilement les écrans LCD, OLED et même des écrans 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, le 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[17].

Projets associés[modifier | modifier le code]

ESP8266 Arduino de Base[modifier | modifier le code]

Lorsque la plate-forme Arduino a commencé à développer de nouveaux circuits MCU fondés sur des processeurs non-AVR comme le BRAS/SAM MCU et utilisé dans l'Arduino Due, ils avaient besoin de modifier l'IDE Arduino, de sorte qu'il serait relativement facile de changer l'IDE pour prendre en charge d'autres chaînes d'outils afin de permettre à l'Arduino C/C++ d'être compilé vers le bas des nouveaux processeurs. 

The Button[modifier | modifier le code]

The Button est un bouton-poussoir Wi-Fi connecté conçu par Peter R Jennings[18]. 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 incluent une sonnette ou le bouton de panique.

NodeUSB[modifier | modifier le code]

NodeUSB est une plate-forme Ido ouverte de la taille d'une clé USB standard. Il a été conçu pour tirer parti de NodeMCU (Lua) 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[19].

ijWatch[modifier | modifier le code]

ijWatch est une smartwatch Wi-Fi open-hardware et open-source, équipée d'un écran OLED et exécutant un firmware NodeMCU[20]. 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[modifier | modifier le code]

NodeMCU donne accès aux GPIO (General Purpose Input/Output) et il est nécessaire de se référer à la table de correspondance ci-dessous pour les développements.

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

Des exemples de Code[modifier | modifier le code]

Le dépôt NodeMCU contient sa propre collection d'exemples de code[21]. De plus, la documentation NodeMCU[22] fournit de petits exemples pour la plupart des fonctions et des modules.

Se connecter à un AP[modifier | modifier le code]

Accès GPIO[modifier | modifier le code]

Requête HTTP[modifier | modifier le code]

-- 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")

Pour faire quelque chose de similaire en utilisant le module HTTP[23]:

Serveur HTTP[modifier | modifier le code]

-- 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[modifier | modifier le code]

-- 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[modifier | modifier le code]

-- 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")

Sources[modifier | modifier le code]

Notes et références[modifier | modifier le code]

  1. Kumar, Abhijeet, and Apoorva Sharma. "Internet of Life (IOL)." (2015). (ISBN 978-93-5156-328-0)
  2. a et b (en) Brian Benchoff, « A DEV BOARD FOR THE ESP LUA INTERPRETER », sur Hackaday (consulté le 2 avril 2015)
  3. (en) Vowstar, « NodeMCU Devkit », sur Github, NodeMCU Team (consulté le 2 avril 2015)
  4. (en) Zeroday, « A lua based firmware for wifi-soc esp8266 », sur Github (consulté le 2 avril 2015)
  5. (en) Hari Wiguna, « NodeMCU LUA Firmware », sur Hackaday (consulté le 2 avril 2015)
  6. (en) Espressif Systems, « Espressif Systems », sur Espressif-WikiDevi (consulté le 3 juin 2017)
  7. (en) Projet eLua, sur le site eluaproject.net (consulté le 11 juillet 2017)
  8. (en) Espressif Non-OS SDK pour ESP8266, sur le site bbs.espressif.com (consulté le 11 juillet 2017)
  9. (en) Mpx, « Lua CJSON is a fast JSON encoding/parsing module for Lua », sur Github (consulté le 2 avril 2015)
  10. (en) Pellepl, « Wear-leveled SPI flash file system for embedded devices », sur GitHub (consulté le 2 avril 2015)
  11. (en) Espressif system, « IoT Wi-Fi 802.11b/g/n integrated SoC implementation of volume production », 中国上海讯,‎ (lire en ligne)
  12. (en) Hong, « First commit of NodeMCU Firmware », sur Github (consulté le 2 avril 2015)
  13. (en) Huang R., « Initial design of NodeMCU devkit », sur Github (consulté le 2 avril 2015)
  14. (en) Tuan PM, « MQTT client library for ESP8266 », sur Github (consulté le 2 avril 2015)
  15. (en) Olikraus et Daniel Sittig, « Universal Graphics Library for 8 Bit Embedded Systems », sur Google code (consulté le 2 avril 2015)
  16. (en) Devsaurus, « U8glib for esp8266 », sur Github (consulté le 2 avril 2015)
  17. (en) Building the firmware, sur le site NodeMCU Documentation (consulté le 11 juillet 2017)
  18. (en) Peter Jennings, « The Button - a WiFi connected push button », sur Benlo.com (consulté le 2 avril 2015)
  19. (en) NodeUSB, « An open IoT platform that simply works. », sur NodeUSB (consulté le 2 avril 2015)
  20. (en) Anne Jan Brouwer, « ijWatch-Part of IJhack project ijWare », sur ijWare (consulté le 2 avril 2015)
  21. (en) nodemcu-firmware, sur le site github.com (consulté le 11 juillet 2017)
  22. (en) NodeMCU documentation (consulté le 11 juillet 2017)
  23. (en) HTTP module, sur le site NodeMCU Documentation (consulté le 11 juillet 2017)

Voir aussi[modifier | modifier le code]