![]() |
Dernière révision : mars 2025 |
![]() |
![]() |
![]() |
![]() |
![]() | ![]() |
Sommaire Introduction L’électronique et l’informatique ont profondément modifié notre société. C’est certainement la révolution industrielle la plus rapide de l’histoire de l’humanité. Aujourd'hui, les systèmes embarqués sont omniprésents dans notre vie quotidienne et nous emmènent vers un monde de plus en plus connecté, avec ses avantages et ses inconvénients... L’auteur ne pourra en aucun cas être tenu responsable des dommages qui résulteraient de l’utilisation des informations publiées sur ce site, sous licence Creative Commons BY-NC-SA. Toute reproduction ou modification d'un document, même partielle, est autorisée à condition que son origine et le nom de l'auteur soient clairement indiqués (BY), qu'il soit utilisé à des fins non commerciales (NC), que son mode de diffusion soit identique au document initial (SA), et que cela ne porte pas atteinte à l’auteur. Ce document présente quelques caractéristiques et fonctionnalités d'une carte ESP8266, en espérant toujours être le plus clair et précis possible. Malgré tout le soin apporté à la rédaction, l'auteur vous remercie de bien vouloir le contacter si vous relevez la moindre erreur ou omission, et vous souhaite une agréable lecture. Présentation Le terme ESP8266 désigne une famille de microcontrôleurs développés en Chine à partir de 2014, et proposant une connectivité wifi. Le succès fut immédiat, grâce notamment à un prix très bas (quelques euros), et à l'absence d'un produit équivalent sur le marché. Espressif (la société à l'origine de l'ESP8266) développera, à partir de ce moment là, une série de microcontrôleurs de plus en plus performants, intégrant tous le wifi. La programmation s'effectue via un convertisseur USB-UART, suivant le même principe que les cartes Arduino. J'utilise d'ailleurs l'EDI de l'Arduino pour programmer l'ESP8266 (voir ici). Vous pouvez bien-sûr utiliser d'autres EDI, dont celui fourni par Espressif. ![]() NodeMCU (plate-forme) V3 (version de la plate-forme). ![]() Microcontrôleur : Tensilica Xtensa LX106 (32 bits, 80 ou 160 MHz) Mémoire vive : 64 kio1 (code) + 96 kio (data) Mémoire flash : 512 kio à 16 Mio (ESP-01 : 512 kio, ESP-01S : 1 Mio), accès via bus SPI dédié (GPIO26 à 11) E/S numériques : 11 + 6 (flash), PWM (10 bits) sur toutes les broches Entrée analogique : 1 (10 bits, 1 V max., certaines cartes permettent d'aller jusqu'à 3,3 V) Interruptions : toutes les E/S numériques, sauf GPIO16 Bus I2C : 1 Bus SPI : 2, dont 1 réservé pour l'accès à la mémoire flash UART : 1 Convertisseur USB-UART : CP2102/4 ou CH340 Wifi : 802.11 b/g/n Alimentation : Vin (10 V max.), broche 5 V ou USB Tension de fonctionnement : 3,3 V Consommation : 60 à 200 mA Attention, la tension de fonctionnement d'un ESP8266 est de 3,3 V, contrairement aux Arduino qui fonctionnent à 5 V (sauf l'Arduino Due qui fonctionne également à 3,3 V) ! Tout dépassement de cette valeur sur l'une des broches le détruira. Il faudra donc prévoir éventuellement des convertisseurs 3,3 V <> 5 V. ![]() ESP8266 ESP-01 (512 kio de mémoire flash) ou ESP-01S (1 Mio de mémoire flash). Ce modèle ne dispose que de quatre E/S. Pour récupérer les deux E/S affectées à la liaison série, vous pouvez utiliser les lignes suivantes dans votre sketch :
![]() ![]() ESP8266 ESP-12F WEMOS D1 mini. Petit, complet, et pas cher... Mon chouchou ! On trouve également une version D1 mini Pro avec 16 Mio de flash, une antenne céramique intégrée, et un connecteur pour une antenne externe. RST (reset) : active à l'état bas GPIO0 : résistance à 3V3, FLASH à GND, 0 = programming (UART bootloader), 1 = flash startup (normal), boot fails if pulled LOW GPIO2 : résistance à 3V3, résistance + LED à 3V3, HIGH at boot, boot fails if pulled LOW GPIO15 : résistance à GND, boot fails if pulled HIGH GPIO16 : HIGH at boot, used to wake up from deep sleep if connected to RST ![]() Procédure pour installer les cartes Ouvrez l'EDI Arduino (Arduino IDE) :
Flashage OTA Puisque l'ESP8266 possède une connexion wifi, peut-on utiliser cette connexion pour téléverser un sketch ? La réponse est oui ! C'est ce qu'on appelle le flashage (écriture de la mémoire flash) OTA (Over The Air). Quel intérêt ? Plus besoin de câble USB, c'est bien pratique si on doit placer l'ESP8266 dans un endroit difficile d'accès, ou pour récupérer par exemple les deux E/S de l'ESP-01 affectées à la liaison série. Bon, on a quand-même besoin de la liaison série une fois, pour téléverser un sketch qui va prendre en charge l'OTA. Il faut néanmoins savoir que l'OTA a un inconvénient, il nécessite deux fois plus de mémoire flash ! En effet, l'ESP8266 utilise la version en mémoire flash de votre sketch, qui contient la prise en charge de l'OTA, pour téléverser une nouvelle version. Il faut donc toujours avoir un sketch fonctionnel en mémoire flash, car il ne faut pas oublier que, dans un système embarqué, l'ESP8266 est souvent difficile d'accès, il doit alors pouvoir redémarrer sans problème en mode OTA, même après le téléversement défectueux d'une nouvelle version. Ouvrez l'EDI Arduino (Arduino IDE), allez dans Outils, Type de carte, ESP8266 Boards, Generic ESP8266 Module. Allez ensuite dans Outils, puis Flash Size. Regardez la ligne 1MB (FS:none OTA:~502KB). On constate que l'OTA est bien défini à environ la moitié de la mémoire flash lorsque cette dernière ne contient pas de système de fichiers (FS:none). Environ, car l'ESP8266 a besion d'un peu de place pour stocker sa configuration en mémoire flash (l'ESP8266 stocke sont bootloader en EEPROM, contrairement à l'Arduino qui le stocke en mémoire flash). Pour résumer :
// tester l'OTA sur un ESP8266 #include <ESP8266WiFi.h> #include <ArduinoOTA.h> #define nom_wifi "mon_ssid" // saisissez le nom de votre réseau wifi #define mdp_wifi "mon_mdp" // saisissez le mot de passe de votre réseau wifi #define nom_ota "test_ota" #define mdp_ota "12345678" IPAddress ip(192,168,1,21); IPAddress masque(255,255,255,0); IPAddress passerelle(192,168,1,1); IPAddress dns(192,168,1,1); void setup() { //WiFi.mode(WIFI_AP); // Access Point mode (box) //WiFi.softAPConfig(ip,passerelle,masque); //WiFi.softAP(nom_wifi,mdp_wifi,1,false,8); // channel (1 to 13, default = 1, best = 1, 6 or 11), ssid_hidden (true or false, default = false), max_connection (0 to 8, default = 4) //WiFi.setOutputPower(20.5); // puissance d'émission (0 à 20.5 dBm, -3 dBm pour une puissance divisée par 2, +3 dBm pour une puissance multipliée par 2) WiFi.mode(WIFI_STA); WiFi.config(ip,passerelle,masque,dns); WiFi.begin(nom_wifi,mdp_wifi); Serial.begin(9600); while (!Serial) delay(100); Serial.write(13); Serial.write(10); Serial.write("Numéro de série de l'ESP8266 : "); Serial.println(ESP.getChipId()); Serial.write("Fréquence CPU (MHz) : "); Serial.println(ESP.getCpuFreqMHz()); Serial.write("Fréquence mémoire flash (MHz) : "); Serial.println(ESP.getFlashChipSpeed()/1000000); Serial.write("Capacité mémoire flash (octets) : "); Serial.println(ESP.getFlashChipRealSize()); Serial.write("Mémoire flash utilisée (octets) : "); Serial.println(ESP.getSketchSize()); Serial.write("Mémoire flash disponible (octets) : "); Serial.println(ESP.getFreeSketchSpace()); Serial.write("Connexion au réseau wifi"); while (WiFi.status()!=WL_CONNECTED) { Serial.write('.'); delay(100); } Serial.write(13); Serial.write(10); Serial.write("Connecté au réseau wifi !"); Serial.write(13); Serial.write(10); Serial.write("Nom du réseau : "); Serial.println(WiFi.SSID()); Serial.write("Force du signal : "); Serial.print(WiFi.RSSI()); // Received Signal Strength Indication Serial.write(" dBm"); // dB mW, 0 dBm = puissance max. (1 mW) Serial.write(13); Serial.write(10); Serial.write("Adresse MAC : "); Serial.println(WiFi.macAddress()); Serial.write("Adresse IP : "); Serial.println(WiFi.localIP()); Serial.write("Masque de sous-réseau : "); Serial.println(WiFi.subnetMask()); Serial.write("Passerelle : "); Serial.println(WiFi.gatewayIP()); Serial.write("Serveur DNS : "); Serial.println(WiFi.dnsIP()); ArduinoOTA.setHostname(nom_ota); ArduinoOTA.setPassword(mdp_ota); ArduinoOTA.begin(); Serial.write("OTA démarré !"); } void loop() { ArduinoOTA.handle(); } Si vous voulez utiliser le DHCP de votre box, vous pouvez supprimer la ligne WiFi.config. Sinon, n'oubliez pas de modifier les valeurs ip, masque, passerelle, et dns, en fonction de votre réseau. Les quatre premières lignes mises en commentaires dans la fonction setup configurent l'ESP8266 en mode Access Point (comme une box). Lors du premier téléversement utilisant la liaison série, ouvrez le moniteur série (il doit être configuré à 9600 bauds). En fonction de votre configuration, vous devriez obtenir un affichage qui ressemble à : ![]() Si tout va bien, on peut fermer le moniteur série et supprimer toutes les lignes commençant par Serial : // tester l'OTA sur un ESP8266 #include <ESP8266WiFi.h> #include <ArduinoOTA.h> #define nom_wifi "mon_ssid" // saisissez le nom de votre réseau wifi #define mdp_wifi "mon_mdp" // saisissez le mot de passe de votre réseau wifi #define nom_ota "test_ota" #define mdp_ota "12345678" IPAddress ip(192,168,1,21); IPAddress masque(255,255,255,0); IPAddress passerelle(192,168,1,1); IPAddress dns(192,168,1,1); void setup() { WiFi.mode(WIFI_STA); WiFi.config(ip,passerelle,masque,dns); WiFi.begin(nom_wifi,mdp_wifi); while (WiFi.status()!=WL_CONNECTED) delay(100); ArduinoOTA.setHostname(nom_ota); ArduinoOTA.setPassword(mdp_ota); ArduinoOTA.begin(); } void loop() { ArduinoOTA.handle(); } Nous pouvons maintenant débrancher le câble USB de l'ordinateur, alimenter l'ESP8266 via la broche Vin, 5V, ou brancher le câble USB sur un chargeur de téléphone, par exemple. Vous devriez voir dans Outils, Port, Ports réseau, test_ota at 192.168.1.21 (Generic ESP8266 Module). Dans notre exemple, nous utilisons le mot de passe 12345678 pour sécuriser les téléversements via l'OTA : ![]() LittleFS Une partie de la mémoire flash peut être réservée pour utiliser un système de fichiers. C'est intéressant pour faire de l'acquisition de données, par exemple. Le premier système de fichiers se nomme SPIFFS (Serial Peripheral Interface Flash File System). Pour l'installer, vous devez :
SPIFFS n'est plus utilisé, il est remplacé par LittleFS qui s'installe de la même façon :
Dans les deux cas, le téléchargement ne se fait que dans un sens, du dossier data vers la mémoire flash. Il faudra donc prévoir dans le sketch la lecture d'un fichier et l'affichage de son contenu sur une page web, par exemple. 1 : 1 ki (kilo informatique) = 1024 et non pas 1000, donc 1 kio = 1024 octets et 16 kio = 16384 octets. 2 : General Purpose Input/Output (Entrée/Sortie à usage général). |
Haut de page |
![]() |
![]() |
![]() |