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 :
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.
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 :
| 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 |
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 :
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
Les ESP peuvent être démarré soit dans un mode, soit dans un autre. Pour changer de mode, il faut les redémarrer.
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).
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 :
| 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 |
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 :
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.
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
1er ligne → Core du firmware
2e ligne → Modules complémentaires
Attention : bien cocher les boites à cocher
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 :
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.
Avec esptool (voir plus bas), effacer tout le nodeMCU, puis repartir de 0
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)
E1 : Updater pip
sudo pip install --upgrade pip --index-url=https://pypi.python.org/simple/
E2 : Installer esptool
sudo pip install esptool
esptool.py --port /dev/ttyUSB0 erase_flash
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)
Les 2 scripts ci-joint, fait de mes mains permettent de :
Spiffs = (Esp8266 File System)
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.
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.
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.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ATTENTION : Dans tous ce qui suit, il faut remplacer la résistance de 500 Ohm par une résistance de 47 kOhm.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
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)
Fichier zip gerber gerber_pir-motion-notifier-with-esp01.zip
Les capteurs PIR SR501 et SR505 émettent parfois des false trigger.
D'après ce que j'ai lu sur les forums, ca peut venir de :
Pour lutter contre ces phénomènes :
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
Accéder aux fonctionnalités de PlatformIO
Compiler le programme
Uploader le programme sur l'ESP01
Lire la sortie serial de l'ESP