Outils pour utilisateurs

Outils du site


techniques:nodemcu_esp8266_test

Presentation

ESP8266 est une gamme de microcontrolleurs simples. Ces microcontrolleurs hébergent, comme les arduino, un ensemble de blocs exécutables par un microprocesseur. Ce bloc d'instructions est exécuté à l'alimentation du microcontrolleur (sous la condition qu'il soit bien en mode UART et non Flash mode, voir plus loin pour l'explication des modes)

On retrouve dans la gamme d'ESP8266 : le modèle ESP01, ESP01S, ESP12 et ESP12E (ESP8266-12E) (présentation plus bas).

NodeMCU correspond au nom de la carte mère minimaliste (comme celle de l'arduino), qui utilise l'esp8266. NodeMCU correspond aussi au nom du firmware installé (flashé) par défaut sur la carte ; il permet de programmer l'esp via le language lua.

L'arduino classique et le NodeMcu/ESP8266 sont des microcontrolleur simple. Il n'y a pas de système d'exploitation proprement dit. Juste un firmware.

Il est possible de configurer l'EPS8266 de plusieurs manières :

  • flasher un firmware nodeMcu ; le firmware correspond en fait à un ensemble de librairies et d'un interpréteur de commande lua.

Remarque : le flash s'effectue très souvent à une vitesse de 115200 ou 230400 bauds.

Par la suite, cela permet de n'envoyer à l'esp (par communication série) que les scripts lua ,qui feront eux appels aux fonctions des modules présents dans le firmware. Remarque : Le téléchargement de script se fait le plus souvent à une vitesse de 9600 bauds sur les ESP8266.

  • flasher un firware micropython : sans doute analogue à la méthode précédent sur beaucoup de points
  • utiliser Arduino IDE, comme pour un arduino classique.

Dans ce dernier cas, on compile, puis on téléverseme un script de type “sketch”

Plus précisement, les actions effectuées par l'IDE (Arduino IDE ou PlatformIO IDE) sont :

  1. Récupérer les bibliotèques référencées par le script
  2. Tenter de compiler
  3. Si ok, téléverser en mode Flash mode le programme compilé

Comparaison Hardware et connectivités ESP/Arduino

Type Arduino UNO R3 ESP8266-12E 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

ESP01 et ESP12 : les 2 modèles de ESP8266 : avec un port USB, l'autre sans

Le type de modèle Esp8266-12 se decline en plusieurs version. Il dispose d'un port usb.

Le type Esp8266-01 ou Esp01 (ou Esp01-S), n'a pas de port usb

Dans les 2 cas, ils ont une liaison série via les GPIO TX et RX.

Remarques importante spécifiques à l'Esp01 :

  • Le pin CH_PD permet juste d'activer une fonctionnalité : alimenté mais au repos ; pour que l'esp fonctionne, il faudra que ce pin soit en 3,3V ou 5V suivant les marques, sinon rien ne se passera =⇒ Les pin VCC et CH_PD devront être en 3,3V ou 5V.
  • Les I/O GPIO0 et GPIO2 ne doivent pas être positionnés à Ground. En effet, au démarrage de l'ESP, ces I/O sont utilisés en OUTPUT et passent de LOW à HIGH pendant 30ms. Si cette séquence n'aboutit pas, l'ESP-01 reste figé et ne démarrera pas.
  • Connecter en serial_USB l'ancienne version.

Soit on s'achète un adaptateur, qui ne fait qu'adapter les niveaux de tension entre 5V et 3.3V. Soit on en créer un soit même : voir ici

Boot Le mode Flash et le mode UART

Les ESP peuvent être démarré soit dans un mode, soit dans un autre. Pour changer de mode, il faut les redémarrer.

Le mode Flash

Il permet de flasher l'ESP avec un firmware, ou une suite d'instruction exécutable (cas d'Arduino IDE) Ce mode opère sur les GPIO0 et GPIO2 ; il n'utilise pas les GPIO TX et RX.

Par contre, pour mettre l'ESP en mode flash, il est nécessaire de positionner les pins à HIGH ou LOW au démarrage de l'ESP.

Bien souvent, il s'agit de mettre le GPIO0 à GND (0V).

Le mode UART

C'est le mode de démarrage normal.

Dans le cas où un firmware est installé, l'ESP démarrera sur init.lua (dans le cas du firmware NodeMCU)

Dans le cas où un sketch a été téléversé à partir d'Arduino IDE, c'est le code téléversé qui sera directement exécuté.

Dans ce mode, les GPIO TX et RX sont utilisés normalement, si bien qu'on pourra écrire en Arduino ou Lua

 Serial.begin(9600);
 Serial.print('Something to print');
 

ou

print("'Something to print'");

Dans ce mode, la vitesse du port série UART de l'ESP devra être fixé à 9600, et le dispositif connecté également

Dans ce mode quand votre ESP est connecté en USB à un PC, il est possible d'y accéder directement :

  • via putty (créer une connection SERIAL 9600 bauds sur le bon port COM)

  • via d'autres applis précisées dans la section outillage (voir plus bas)

Synthèse

GPIO GPIO 0 GPIO 2 GPIO 15
UART Download Mode (Programming) 0 1 0
Flash Startup (Normal) 1 1 0
SD-Card Boot 0 0 1

Configuration en mode firmware (NodeMCU)

Comme vu avant, tous les appels des programmes/scritps qui sont écrits puis téléversés sur ces bêbêtes sont interprétés puis directement exécutés, sans passer par une couche système, comme c'est le cas des OS (linux, windows, apple). L'avantage d'un ESP8266 par rapport à un arduino classique :

  1. l'accès au WIFI, en mode station ou mode point d'accès
  2. un (pseudo)système de fichier, permet de stocker des fichiers (exécutable ou de données). Attention néanmoins, pour l'instant, pas de dossier : le seul dossier est le dossier racine. On ne parcourt pas de dossiers ; on accède aux fichiers uniquement via leur chemin absolu.

Choisir son firmware NodeMCU

Les firmware NodeMcu ne sont plus téléchargeable depuis une url

En fait, on customise son firmware, en choisissant quelles librairies installer, à partir d'un site internet : https://nodemcu-build.com/ Puis un moteur de build relié au site build votre firmware et vous envoie un mail quand il est prêt. Il ne suffit plus qu'à le télécharger et le flasher dans votre ESP8266.

Flasher le firmware

Pour flasher, un firmware est disponible sous windows ou bien utiliser esptool sous linux

To enable ESP8266 firmware flashing GPIO0 pin must be pulled low before the device is reset. Conversely, for a normal boot, GPIO0 must be pulled high or floating. Ceci est surtout vrai pour le modèle : le ESP-01

J'ai buildé un firmware avec les modules suivants :

cron, file, gpio, http, net, node, sjson, sntp, tmr, uart, websocket, wifi, tls

Etapes avec le programme de flash sous Windows

Etape1

1er ligne → Core du firmware

2e ligne → Modules complémentaires

Attention : bien cocher les boites à cocher

Etape2

En fonction de votre modèle, mettre les bons paramètres. Sinon, tester …

Etape3

Sélectionner le bon port COM (en général pas COM1 ni COM2, plutot autout de 34 …) Cliquer sur flasher et attendre.

Vous devriez alors voir la led bleue de l'ESP clignoter.

A la fin, si tout s'est bien passé, une adresse MAC est générée et affichée sur l'onglet “Operation”. Votre ESP est flashé. Sinon, recommencer.

Remarques :

  • L'esp8266 nodeMCU fonctionne par défaut avec un firmware en language lua ; Cela signifie que vous appelerez dans vos programmes des fonctions lua propres au firmware, avec parfois le besoin de placer en début de script les directives suivantes : require <UnDesModulesDuFirmware>
  • Avec le firmware NodeMcu, des scripts envoyés ne sont pas compilés ; on y retrouve les commentaires → They all reduce the available free heap.
  • Mais il est néanmoins possible de compiler son programme une fois sur l'esp ; les programmes compilés ont l'extension lc. A mon avis, ils contiennent exactement le script sans les commentaires.

How to unbrick nodemcu esp8266 with init.lua

Il est très facile de bricker son ESP flashé avec le firmware nodeMCU : il suffit de lui téléverser un script init.lua buggé. Dans ce cas, l'ESP arrête l'exécution en erreur puis redémarre → on boucle sur le démarrage.

  • Solution1 : Reflasher le firmware, qui par la même occasion, “efface” tout script précédent.

Avec esptool (voir plus bas), effacer tout le nodeMCU, puis repartir de 0

  • Solution2 : Toujours avec esptool : Retirer le script init.lua

https://github.com/KuangLei/NodeMCU-RemoveInit

A good way to avoid to brick nodemcu esp8266 with init.lua

Si init.lua part en boucle infinie ou plante (dans cas, l'esp redémarrera tout de suite –> autre boucle infinie), il n'est plus possible de prendre le controle de l'esp8266. Il est comme briqué. Pour éviter que ca se reproduise, on peut mettre un timer et un boolean abort dans la fonction startup dans init.lua :

 function startup()
   if abort == true then
      print('startup aborted')
      return
   end
   print('in startup')
   dofile('test.lua')
 end
 
 tmr.alarm(0,5000,0,startup)

Autre méthode :

 function abortInit()
    print(‘Press ENTER to abort startup’)
    uart.on(“data”, “\r”, function(data)
       tmr.unregister(0)
       uart.on(“data”)
       print(‘Startup aborted’)
    end, 0)
    
    tmr.alarm(0,5000,0, function()
       uart.on(“data”)
       print(‘Running startup’)
       dofile(‘main.lua’)
    end)
 end
 
 tmr.alarm(0,1000,0,abortInit)

Installer esptool.py :

E1 : Updater pip

 sudo pip install --upgrade pip --index-url=https://pypi.python.org/simple/

E2 : Installer esptool

 sudo pip install esptool

Effacer tout le nodeMcu, vraiment tout !

 esptool.py --port /dev/ttyUSB0  erase_flash

Reflasher le nodeMcu

Dans l'outil windows pour reflasher le nodeMcu, saisir les paramètres suivants avant de flasher :

Offset Bin Path
0x00000 INTERNAL:/ /NODEMCU
Undefined nodemcu-master-13

Pour l'ancien modèle surtout (ESP-01), mettre le GPIO0 à 0V (GND) (voir début de cet article)

Exemple de script lua : control des GPIO

Les 2 scripts ci-joint, fait de mes mains permettent de :

  • lancer le script gpioServer.lua
  • gpioServer.lua permet de :
    1. Indiquer son existence sur le réseau en requêtant régulièrement le serveur apache de mon raspberry pi
    2. Ecouter et prendre en compte, sur le port 80, des demandes type REST de mise à jour des GPIO

2017.11.12_scriptluaxavier.zip

Script lua pour lire une carte sd

Glossaire NodeMCU

Spiffs = (Esp8266 File System)

Outillage et liens nodeMCu

  1. ESP8266FS : FileSystem Explorer
  1. ESplorer : Outil permettant d'envoyer des commandes (wifi, fs, gpio) pour exécution, d'enregistrer les scripts sur l'esp et de les exécuter
  2. LuaLoader : Equivalent de ESplorer
  3. Espressif SDK : Equivalent de l'IDE Arduino
  4. PlatformIO IDE : Equivalent de l'IDE Arduino
  5. http://rextester.com/l/lua_online_compiler : compilateur lua online, pour vérifier ses programmes avant de les télécharger sur le node

Utilisation Arduino IDE

Comme vu avant, quand on utilise Arduino IDE, on flash le sketch comme on flash un firmware (NodeMcu) : Si c'est un ESP01, il faut mettre GPIO0 à GND pour mettre l'ESP en flash mode. Pour l'ESP12, je n'ai pas essayé encore.

Prérequis : ajout de la librairie ES8266 dans ArduinoIDE

Avant de procéder, il faut installer les bibliothèques liées aux cartes ESP.

Dans Fichier > Préférences > URL gestion de cartes supplémentaire, ajouter l'url suivante : http://arduino.esp8266.com/stable/package_esp8266com_index.json

Ensuite dans Outils > Type de carte > Gestionnaire de carte, trouver ESP8266 et installer la dernière version.

Paramétrage : Mettre exactement ce qu'il y a dans l'image suivante pour un Esp01 ou Esp12.

Connecter votre appareil, assurer vous que le Port COM est bien trouvé, puis tenter de flasher votre sketch.

Attention : 1 fois sur 4 chez moi, le flash échoue avec des message EspComm failed, ou des stacktraces. Il faut débrancher l'ESP01, attendre 3 secondes environ puis rebrancher, puis retenter.

Mon exemple de programme ino pour un relai

ESP01 : adaptateur USB pour flasher ou télécharger des programmes

Acheter 2 adaptateurs : 1 pour flasher et 1 pour télécharger des programmes lua dedans.

L'adaptateur pour télécharger des programmes est opérationnel.

L'adaptateur qui servira uniquement à flasher : il faut relier (via un fil) le pin GPIO 0 au pin GROUND. Moi j'ai fais ça via un cable en soudant les 2 extrémité.

–> Comme ça en branche l'esp01, son pin GPIO 0 sera relié au pin GRND, ce qui le mettra en flash mode.

Remarque : L'adaptateur USB gère le pin CH_PD. Il le positionne à 3,3V. Dans le cas contraire, l'esp01 ne démarrera pas. Dans le cas où l'on souhaite alimenter l'esp01 sans adaptateur USB, il faudra penser à relier le pin VCC avec le pin CH_PD.

Schéma électronique

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ATTENTION : Dans tous ce qui suit, il faut remplacer la résistance de 500 Ohm par une résistance de 47 kOhm.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Schéma fonctionnel schema-pir-esp01.jpg

Carte PCB : circuit imprimé

Le circuit imprimé a été effectué avec une application en ligne nommée EASY-EDA (https://easyeda.com/account/user/projects/all)

pcb-sr501-esp01-2d.jpg

pcb-sr501-esp01-3d.jpg

Fichier zip gerber gerber_pir-motion-notifier-with-esp01.zip

Les capteurs PIR

Les capteurs PIR SR501 et SR505 émettent parfois des false trigger.

pir-sr-501.jpg

sr501-with-or-without-trigger.jpg

D'après ce que j'ai lu sur les forums, ca peut venir de :

  1. champ radiofréquence (surtout les basses fréquences)
  2. power supply communes avec l'ESP8266 : quand l'esp8266 transmet par RF, il tire (draw) beaucoup de courant, et ca peut avoir un impact sur le fonctionnement du capteur PIR.

Pour lutter contre ces phénomènes :

  • Meilleure réponse : mettre un condensateurs d'une capacité allant de 220nF à 5uF entre pir.groundPin et pir.signalPin
  • ajouter juste après la sortie signal du capteur une résistance de 10kOhm ou plus, avant qu'elle n'attaque la base d'un transistor ou du pin du RBPI,de l'arduino ou de l'ESP8266
  • utiliser le plus gros des 2 capteurs, qui a l'air de générer moins de false triggers.
  • mettre une autre alim dédiée au capteur
  • isoler le capteur dans un boitier aluminum (cage de faraday) pour éviter la pertubation des ondes magnétiques.

PlatformIO IDE

L'IDE PlatformIO est une alternative à l'IDE Arduino. J'ai personnellement du l'utiliser sur Windows 8.1 parce qu'il m'était impossible d'utiliser l'IDE Arduino (NullPointerException lors du chargement des cards). PlatformIO est opensource, il s'agit en fait d'une extension (un plugin) qu'on peut embarquer dans l'IDE Visual Studio Code.

Extensions PlatformIO et Arduino dans Visual Studio Code

900

Accéder aux fonctionnalités de PlatformIO

900

Compiler le programme

900

Uploader le programme sur l'ESP01

900

Lire la sortie serial de l'ESP

900

techniques/nodemcu_esp8266_test.txt · Dernière modification: 2020/07/07 19:35 (modification externe)