NodeMCU + ESP8266 : une alternative à l'Arduino ?

Posté par (page perso) . Édité par Nÿco, Benoît Sibaud, palm123, Yves Bourguignon, M5oul, Pierre Jarillon, eggman et NeoX. Modéré par Xavier Claude. Licence CC by-sa
Tags :
37
20
mar.
2016
Matériel

On entend de plus en plus parler de cette carte esp8266 qui permet facilement de se connecter et d'échanger sur un réseau WIFI. Des cartes tels que NodeMCU sont de plus en plus populaires et permettent d'utiliser l'esp8266 plus facilement, presque comme un Arduino.

Il est possible de la programmer en Lua, de créer des firmwares avec l'IDE d'Arduino et de nouveaux projets fleurissent tous les jours. Seulement, toutes ces possibilités amènent de la confusion lorsque l'on commence à s'intéresser à l'esp8266 et c'est pour éclaircir les choses que j'ai eu envie de créer cette dépêche.

Comparaison technique entre NodeMCU et Arduino

La carte qui se rapproche le plus d'un Arduino est la NodeMCU. Elle a été créée pour pouvoir utiliser l'ESP8266 avec le firmware du même nom, NodeMCU, qui permet d'interpréter des scripts Lua. Aujourd'hui cette carte peut être programmée comme un Arduino avec l'IDE d'Arduino.

NodeMCU est à l'ESP8266 ce que l'Arduino est à l'ATmega 328. Il existe aujourd'hui 14 versions de l'ESP8266. NodeMCU utilise la version 12 (ESP12E) de l'esp8266.

+---------------------+----------------+------------------------+
|                     | Arduino UNO R3 |        NodeMCU         |
+---------------------+----------------+------------------------+
| Power               | 5V             | 3,3V                   |
| Fréquence           | 16MHz          | 80MHz                  |
| Microcontroller     | ATmega328      | ESP8266                |
| Flash Memory        | 32KB           | 4MB                    |
| SRAM                | KB             | 64 KB SRAM / 96KB DRAM |
| EEPROM              | 1 KB           | Non, utiliser Flash    |
| USB                 | Oui            | Oui                    |
| External Power Port | Oui            | Non                    |
| Pins                | 32             | 22                     |
| GPIO                | 14             | 16 (11 Digital I/O)    |
| Analog I/O          | 6              | 1                      |
| WiFi                | Non            | Oui !                  |
| PWM                 | 6              | 9                      |
| SPI / I2C           | Oui            | Oui                    |
+---------------------+----------------+------------------------+

Pour le prix, l'Arduino est à 20 € pour une version officielle et à 2,50 € en Chine pour une copie. NodeMCU est à 3 € en Chine.

Historique

L'ESP8266 a été créé en 2014 par une société chinoise (Espressif). Elle a été surtout utilisée au début pour ajouter des fonctionnalités WIFI à des projets Arduino via des commandes AT. Très vite, devant la puissance de la puce et avec la publication d'un SDK par Espressif, une belle communauté a développé des outils et firmware pour pouvoir la programmer.

En deux ans, un grand nombre de modèles différents ont été commercialisés.

Firmwares

Si beaucoup de projets ont débuté pour programmer la puce, deux semblent principalement utilisés :

NodeMCU

NodeMCU est donc le nom d'une carte, mais également d'un firmware qui permet de programmer l'ESP8266 via le langage de script Lua. Cela simplifie grandement les choses, voici par exemple le code nécessaire pour se connecter à un réseau WIFI :

print(wifi.sta.getip())
--nil
wifi.setmode(wifi.STATION)
wifi.sta.config("SSID","password")
print(wifi.sta.getip())
--192.168.18.110

Voici d'autres exemples sur la page du projet. Malheureusement, la quantité de mémoire disponible pour les scripts après installation du firmware est faible pour les scripts un peu longs. Il a été tenté de « minifier » le code Lua (les commentaires, nom de variables, etc étant envoyés en mémoire) mais on perd du coup de la simplicité de programmation.

Création de firmware via l'IDE Arduino

Un nouveau projet est donc né pour programmer directement NodeMCU avec l’IDE Arduino, comme un Arduino. Ce projet est aujourd'hui très actif et utilisé.

Il ne s'agit plus ici de scripts mais bien de créer un firmware à télécharger sur la puce. Cela évite donc les problème de mémoire rencontrés avec NodeMCU. Un grand nombre de bibliothèques sont déjà disponibles pour créer vos firmware.

Conclusion (personnelle)

Je n'ai passé que peu de temps avec mon NodeMCU et cela est à mon avis plus compliqué à utiliser que les Arduino :

  • Beaucoup de solutions sont proposées, on a un peu l'impression de rentrer dans une jungle avec beaucoup de sentiers possibles (d’où cette dépêche pour éclaircir un peu les choses), là ou avec l'Arduino on est sur une autoroute ;
  • C'est une solution puissante, grâce au WIFI, aux 4 Mo de mémoire flash, à la possibilité de créer des pages web, à la rapidité du processeur ;
  • De mon coté, il me manque des GPIO et surtout des entrées analogiques. Il faut également mieux connaître l’électronique car les voltages sont différents de l'Arduino (3.3 v partout, entrée analogique entre 0 et 1 v) et les nombreux exemples de montages avec l'Arduino ne fonctionnent donc plus.
  • # Clarification

    Posté par . Évalué à 3.

    Merci pour cet article ! Je connais pas NodeMCU, je vais regarder tout ça avec intérêt :)

    NodeMCU est à l'ESP8266 ce que le ATmega 328 est à l'Arduino

    C'est pas l'inverse ? NodeMCU est à l'ESP8266 ce que l'Arduino est au ATmega 328 ? C'est à dire la plateforme complète vs le coeur ?

  • # Clarifications

    Posté par . Évalué à 4.

    L'ESP8266 c'est la puce qui est commune aux modules ESP-01, ESP-2 … ESP-12 (PCBs avec pins et mémoire flash).
    Tu relies NodeMCU à l'ESP-12 mais je crois qu'on peut flasher le firmware NodeMCU sur tous ces modèles différents (exemple https://github.com/wogum/esp01).
    La différence principale entre ces modèles est le nombre de GPIOs de l'ESP8266 qui sont reliés à des pins du pcb.
    Il faut donc faire gaffe au modèle que l'on achète, sachant que l'ESP-12 offre plus de GPIO que le ESP-01 (2 pins seulement).

    Il est aussi possible d'utiliser des GPIO expanders pour augmenter le nombre de GPIOs.

    • [^] # Re: Clarifications

      Posté par . Évalué à 2.

      J'ai dit une bêtise : tu relies le firmware NodeMCU à la board NodeMCU qui à l'avantage de se programmer en usb, contrairement aux ESP-x.
      http://blog.squix.ch/2015/03/esp8266-module-comparison-esp-01-esp-05.html (en anglais)

    • [^] # Re: Clarifications

      Posté par (page perso) . Évalué à 3.

      La confusion vient du fait que NodeMCU est un firmware ET une carte, donc le même nom pour deux choses différentes.
      Sinon, oui, tu as aussi raison :
      - L'ESP8266 est incluse au modules ESP-01, ESP-02, etc. Il est donc possible de la flasher avec n'importe quel firmware.
      - l'ESP-12 est incluse dans la carte NodeMCU

      Il est aussi possible d'utiliser des GPIO expanders pour augmenter le nombre de GPIOs.

      J'ai des modules 74HC4051 (pour les entrées analogiques) et des 74HC595 (pour les digitales), est-ce de cela dont tu veux parler ? Sinon, tu as d'autres alternatives ?
      Une autre question, beaucoup relient un arduino à un ESP8266 pour lui ajouter des fonctionnalités WIFI, mais est-ce possible de faire l'inverse (faire discuter un ESP8266 avec un arduino via une liaison serie par exemple) pour profiter des GPIO de l'arduino ?

      • [^] # Re: Clarifications

        Posté par (page perso) . Évalué à 2.

        est-ce possible de faire l'inverse (faire discuter un ESP8266 avec un arduino via une liaison serie par exemple) pour profiter des GPIO de l'arduino ?

        Pourquoi ne pourrais tu pas ?

  • # Tableau

    Posté par (page perso) . Évalué à 8.

    Le tableau est complètement cassé !

    Je suppose que c’était :

    +---------------------+----------------+------------------------+
    |                     | Arduino UNO R3 |        NodeMCU         |
    +---------------------+----------------+------------------------+
    | Power               | 5V             | 3,3V                   |
    | Fréquence           | 16MHz          | 80MHz                  |
    | Microcontroller     | ATmega328      | ESP8266                |
    | Flash Memory        | 32KB           | 4MB                    |
    | SRAM                | KB             | 64 KB SRAM / 96KB DRAM |
    | EEPROM              | 1 KB           | Non, utiliser Flash    |
    | USB                 | Oui            | Oui                    |
    | External Power Port | Oui            | Non                    |
    | Pins                | 32             | 22                     |
    | GPIO                | 14             | 16 (11 Digital I/O)    |
    | Analog I/O          | 6              | 1                      |
    | WiFi                | Non            | Oui !                  |
    | PWM                 | 6              | 9                      |
    | SPI / I2C           | Oui            | Oui                    |
    +---------------------+----------------+------------------------+
    

    ce commentaire est sous licence cc by 4 et précédentes

  • # Wemo D1 Mini

    Posté par (page perso) . Évalué à 2.

    • [^] # Re: Wemo D1 Mini

      Posté par . Évalué à 2.

      Je plussois.

      On trouve du Wemo D1 mini à $4 environ sur les sites chinois (aliexpress et cie).

      Sinon, pardon si j'ai lu trop vite ce qui précède, mais j'aimerais préciser :

      • ATMega et ESP8266 : ce sont les microcontroleurs (MCU).
      • Arduino : environnement de dév. pour ces MCU. Les extensions ESP8266 sont dispo sur GitHub (une URL à ajouter dans les préférences).
      • NodeMCU : un interpréteur LUA, qu'on peut remplacer par ses propres sketch Arduino sur un ESP8266. NodeMCU était préinstallé sur au moins l'un des modules que j'ai fait venir de Chine.

      Enfin, si quelqu'un a déjà vu passé un driver Linux pour cette puce, ça m'intéresse. En même temps, vu son architecture, je doute que ça existe.

    • [^] # Re: Wemo D1 Mini

      Posté par (page perso) . Évalué à 2.

      Oui, j'avais vu passer cette carte. Ceci étant dit, je ne pense pas qu'elle soit tellement moins chère que les "copies" de NodeMCU :
      http://fr.aliexpress.com/item/new-Wireless-module-CH340-NodeMcu-V3-Lua-WIFI-Internet-of-Things-development-board-based-ESP8266/32520574539.html
      Je vais m'en commander une pour tester.

  • # Pour les néophites

    Posté par (page perso) . Évalué à -3.

    Pour moi qui ne suit pas du tout ces cartes, est-ce que je pourrais avoir un résumé qui indique ce que cela à avoir avec le noyau linux ou le libre ?

    • [^] # Re: Pour les néophites

      Posté par . Évalué à 6.

      Arduino permettant de faire du code libre si on le souhaite, tu as déjà un lien :)

      Ensuite, sur linuxfr, contrairement au nom, des dépêches ne traitant pas forcément que de linux ou de la FSF peuvent être autorisés si l'information est considéré comme suffisament d'intérêt général.

      Là c'est du matos à vraiment pas cher pour développer des applis/utilisations et permettre à tout un chacun de faire sa propre utilisation pour les IoT.

      Je trouve que c'est assez proche du principe du libre, même si c'est pas encore de l'openhardware.

      • [^] # Re: Pour les néophites

        Posté par . Évalué à 5.

        Arduino permettant de faire du code libre si on le souhaite, tu as déjà un lien :)

        Et surtout pour Arduino, tout ce qu'ils font eux même est libre : la carte (mais pas le processeur ATMega) est en Open Hardware (CC BY-SA 2.5), les bibliothèques et le bootloader sont en LGPL et l'IDE est en GPL.

    • [^] # Re: Pour les néophites

      Posté par (page perso) . Évalué à 4.

      L'OS est un fork de FreeRTOS, la seule partie non libre est le .a avec le firmware radio.

      Espressif a publié tous les .a sous GPL, puis a changé de license:

      https://github.com/espressif/ESP8266_RTOS_SDK/issues/1

      • [^] # Re: Pour les néophites

        Posté par (page perso) . Évalué à 1.

        J'avoue avoir eu du mal à trouver des infos au niveau des licences. Quelle est donc cette nouvelle licence de espressif ?
        Sinon, comme l'a dit briaeros007, demain, on pourrait avoir des objets connectés libres grâce à ces puces (en partie non libres).
        De plus, presque tous les projets autour de l'ESP8266/NodeMCU sont libres.

        • [^] # Re: Pour lesnéophites

          Posté par (page perso) . Évalué à 2.

          Sinon, comme l'a dit briaeros007, demain, on pourrait avoir des objets connectés libres grâce à ces puces (en partie non libres).

          Il y en a deja un paquet.

  • # MicroPython sur esp8266

    Posté par . Évalué à 5.

    Il y a eu récemment une campagne sur Kickstarter pour avoir micropython sur ces MCU: https://www.kickstarter.com/projects/214379695/micropython-on-the-esp8266-beautifully-easy-iot/description

    Je ne sais pas trop quoi en penser et j'ai peur que l'on soit dans la même situation qu'en Lua avec du coup peu de mémoire disponible. Si certains ont des retours sur ce type d'environnement je suis preneur.

    De mon côté j'utilise plusieurs de ces cartes pour superviser les températures de certaines pièces chez moi. J'utilise des modules nodeMCU ayant eu quelques difficultés à utiliser directement les cartes esp12-E. Elles sont tellement petites que ce n'est pas facile de les utiliser avec une breadboard. Le gros avantage (dans mon cas) des nodeMCU ou D1 mini est qu'on les alimente en 5v avec un port microusb. J'aurais pu me contenter de l'esp01 dans mon cas, mais il aurait quand même fallu l'alimenter en 3,3V avec une ou 2 résistances pour avoir un truc stable.

    Autre point à améliorer, c'est à mon avis la consommation électrique et la gestion des modes de veille. Je n'ai pas encore trop creuser le sujet, mais c'est rarement abordé dans les tutos disponibles et il y a de gros gains possibles (200mA -> 60 voire 10mA).

    J'ai aussi noté quelques trucs bizarres de mon côté sans avoir poussé plus loin par manque de temps. J'utilise l'arduino IDE et dans mes sketchs je ne demande pas la création d'un point d'accès et pourtant j'en vois apparaitre un de plus quand je scanne mon réseau wifi.

    • [^] # Re: MicroPython sur esp8266

      Posté par . Évalué à 3.

      J'utilise l'arduino IDE et dans mes sketchs je ne demande pas la création d'un point d'accès et pourtant j'en vois apparaitre un de plus quand je scanne mon réseau wifi.

      Tu fais un WiFi.mode(WIFI_AP_STA) ?

      Depending on the time of day, the French go either way.

      • [^] # Re: MicroPython sur esp8266

        Posté par . Évalué à 1. Dernière modification le 22/03/16 à 08:38.

        Non pas du tout, j'ai modifié l'exemple fourni de serverweb et en version simplifiée ça donne ça:

            // include de ESP8266WiFi.h, WiFiClient.h et ESP8266WebServer.h
            // ...
            ESP8266WebServer server(80);
            // ...
            WiFi.begin(ssid, password);
            // Wait for connection
            while (WiFi.status() != WL_CONNECTED) {
                delay(500);Serial.print(".");
            }
            Serial.print("Connected to ");Serial.println(ssid);Serial.print("IP address: ");Serial.println(WiFi.localIP());
            // ...
            server.on("/", handleRoot);
            // ...
            server.begin();

        Je n'ai rien qui modifie le mode et définie un quelconque point d'accès.

  • # Certifications CE et FCC

    Posté par . Évalué à 1.

    Merci pour ces infos.
    Juste pour précision, je trouve que l'affirmation "La carte qui se rapproche le plus d'un Arduino est la NodeMCU" est erronée, sachant que tu compares un module WIFI comme il en existe déjà un certain nombre (plutôt des cartes d'évaluation d'ailleurs) chez Microchip ou autre fabricant. Sans doute pas avec la même communauté, je te le concède.
    Des chips WIFI avec des caractéristiques équivalentes se retrouvent chez d'autres fabricants.
    Pour ma part, je trouve que l'arduino/genuino, c'est déjà basé sur de la vieille techno d'atmel (ATmega) alors que les versions ATxmega sont largement plus intéressantes et moins chères.

    Ensuite, pour des questions de certifications (CEM touça), je m'abstiendrais actuellement d'utiliser les chips ESP (ou tout autre chip "designed in China") surtout chez moi. le CE est de l'auto-certification et pour le FCC, j'ai l'impression qu'il l'ont fait aussi en auto-certification et uniquement sur une des dernières versions du chip. Connaissant les "magouilles" et autres "arrangements" pour faire passer ce genre de certifications (et même en Europe), je me permets d'avoir quelques doutes sur le rayonnement et autres perturbations de ce genre de chip: le nombre de "hobbistes" ne fait pas la "validité technique et environnementale", plutôt bouffer des ogm tous les jours, dans l'état actuel de l'art, celà me "semble" moins risqué. ^
    Sauf à avoir des certifications par un labo européens et indépendant bien entendu.

    ps: c'est marrant un site de communauté "nodemcu.com" qui a une licence ICP (no.14038071) (surveillance du gouvernement Chinois)

    • [^] # Re: Certifications CE et FCC

      Posté par (page perso) . Évalué à 1.

      module WIFI comme il en existe déjà un certain nombre

      Ouais sauf que celle ci, l'interet c'est qu'elle peut etre autonome.

      • [^] # Re: Certifications CE et FCC

        Posté par . Évalué à 1.

        Qu'entends-tu par "autonome"?

        • [^] # Re: Certifications CE et FCC

          Posté par (page perso) . Évalué à 2.

          Qu'entends-tu par "autonome"?

          Elle n'a pas besoin d'être asservie autre micro controlleur, elle peut tourner en standalone.

          • [^] # Re: Certifications CE et FCC

            Posté par . Évalué à 2. Dernière modification le 21/03/16 à 13:54.

            Ah ok, ce que tu entends par "autonome", c'est juste avoir accès à la cpu du module Wi-Fi.
            Comme par exemple sur le "Wi-Fi micro Kit" de chez RedBearLab

    • [^] # Re: Certifications CE et FCC

      Posté par . Évalué à 4. Dernière modification le 25/03/16 à 05:07.

      ensuite, pour des questions de certifications (CEM touça), je m'abstiendrais actuellement d'utiliser les chips ESP (ou tout autre chip "designed in China") surtout chez moi. le CE est de l'auto-certification et pour le FCC, j'ai l'impression qu'il l'ont fait aussi en auto-certification et uniquement sur une des dernières versions du chip. Connaissant les "magouilles" et autres "arrangements" pour faire passer ce genre de certifications (et même en Europe), je me permets d'avoir quelques doutes sur le rayonnement et autres perturbations de ce genre de chip: le nombre de "hobbistes" ne fait pas la "validité technique et environnementale", plutôt bouffer des ogm tous les jours, dans l'état actuel de l'art, celà me "semble" moins risqué. ^ Sauf à avoir des certifications par un labo européens et indépendant bien entendu

      Tu y vas fort en accusant carrément le fabricant de chipset (pas seulement un petit OEM inconnu) de tricher sur ses émissions hors bande et sur la certif CE. Tu as des éléments un peu factuels pour étayer tes accusations ou bien c'est juste une attaque gratuite / limite raciste ? (Je bosse pas mal avec la Chine, et je sais qu'ils sont capables du meilleur comme du pire, mais en l'occurrence ils ont d'excellents labs de test parfaitement indépendants - si ça n'était pas le cas l'UE n'autoriserait pas l'import. Et les douaniers ne rigolent pas et il est pas si facile que ca de tricher ! J'ai actuellement 500 routeurs bloqués à Roissy pour une broutille, parce que le document relatif à la certification CE et aux tests se réfère à une version légèrement obsolète de EN301908, donc qu'on ne vienne pas me parler de "magouilles"…). Je pense que le "et même en Europe" se passe de commentaires (et est contradictoire avec ton souhait d'acheter des produits testés par des labos européens).

      Ah au fait: le fait qu'un chip soit "made in US" ne te protège absolument pas d'une implémentation foireuse par l'OEM sur la CEM… Donc pour être cohérent il faut que tu refuses tout produit (tout PCB) made in China. Bon courage…

      c'est marrant un site de communauté "nodemcu.com" qui a une licence ICP (no.14038071) (surveillance du gouvernement Chinois)

      Sauf que sans cela ledit site ne peut pas être implanté en Chine (donc derrière le "grand firewall"). Or tout site situé à l'étranger rame (ou est bloqué) depuis la Chine. Peut-être que les concepteurs du nodemcu ne voulaient pas se priver du marché chinois…

    • [^] # Re: Certifications CE et FCC

      Posté par . Évalué à 1.

      Bonjour,
      pour préciser le processeur un Tensilica L106 32-bit est un processeur comparable aux ARM d'Atmel avec une capacité wifi. Donc oui elle ce rapproche de l'Arduino. Et cela n'a rien de cartes d'évaluations.
      CE et FCC excusez moi mais ou donc ont fabriquées les puces Atmel, Intel etc…ainsi que tous les composants électronique, en Asie.
      Donc on soude des composants(acheté aux prix chinois de gros) sur une carte on marque CE et on fait payer.
      Au fait la Chine va bientôt sur la Lune donc les composants fait en Chine j'ai confiance.

  • # Prises commandées Wifi

    Posté par . Évalué à 2.

    A propos de NodeMCU et d'ESP8266, si vous voulez faire simplement des prises commandées basées sur ce firmware, je vous invite à regarder les prises Sonoff de chez itead

    Reste un bout de code NodeMCU pour les faire fonctionner sur un réseau MQTT sans dépendre d'un quelconque cloud et le tour est joué …

  • # Gros avantages versus arduino

    Posté par . Évalué à 4.

    Bonjour,

    il y a quand même de gros avantages pour preferer un hadware NodeMCU à un arduino :

    C'est les firmwares type : ESP Easy : http://www.esp8266.nu/index.php/Main_Page

    • connectivité réseau intégrée
    • configuration par WiFi ( même au premier boot, sans rien complier !) SSID : ESP / pass : configesp
    • utilisation comme système IoT "autonome" ( parametrage tout par interface web)
    • liste de capteur/actionneur supportée est très fournie
    • liste de controleurs supportée est fournie aussi
    • mise a jour OTA ( Mise à jour par wifi : oui,oui avec 4 Mbits, c'est possible)
    • langage basique interne en cours de développement. http://www.esp8266.nu/index.php/ESPConnexio

    a+

  • # Quelques infos pour programmer directement l'ESP8266

    Posté par . Évalué à 2.

    Il est assez facile de programmer l'ESP8266 de façon similaire à ce que l'on peut faire avec un Arduino (via l'IDE Arduino), sans passer par NodeMCU. Il faudra juste un convertisseur USB <-> TTL (ça doit valoir 1 euro sur Ebay).

    Plus d'infos ici : http://www.fais-le-toi-meme.fr/fr/electronique/tutoriel/programmes-arduino-executes-sur-esp8266-arduino-ide (je crois que l'article n'est pas terminé mais il donne déjà pas mal d'infos sur ce qu'on peut faire)

    Olivier

  • # Grave erreur !!!!

    Posté par . Évalué à 0.

    Bonjour,

    le NodeMcu comporte 4 Mbits de Ram et pas 4Mbytes !!!!!!
    NodeMCU firmware detected.
    =node.heap()
    21888

    Total : 3441461 bytes
    Used : 8785 bytes
    Remain: 3432676 bytes

    A+
    Olivier

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.