Files
varlog/_cache/articles/ac8515ca-400e-43dc-b5bb-08aa5e6689b5.json
T
2026-05-15 10:37:48 +02:00

1 line
9.0 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"uuid":"ac8515ca-400e-43dc-b5bb-08aa5e6689b5","slug":"premier-programme-esp-01-afficher-les-informations-systeme","title":"Premier programme ESP-01 : afficher les informations système","author":"cedric@abonnel.fr","published":true,"published_at":"2020-12-12 22:28","created_at":"2020-12-12 22:28:56","updated_at":"2026-05-13 18:30:19","revisions":[{"n":1,"date":"2026-05-13 18:30:19","comment":"Titre modifié, contenu modifié","title":"Premier programme ESP-01"}],"cover":"","files_meta":{"dummy.png":{"author":"","source_url":""}},"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"Électronique","content":"# Premier programme ESP-01 : afficher les informations système\n\n## Objectif\n\nLe sketch ci-dessous est un petit utilitaire de diagnostic : une fois téléversé sur un ESP-01, il publie toutes les dix secondes sur la console série un état détaillé du microcontrôleur — identifiant, fréquence, tension d'alimentation, version du SDK — ainsi qu'un état de la mémoire flash. C'est l'équivalent d'un `uname -a` couplé à un `df` pour l'ESP8266.\n\nCet exemple sert deux objectifs :\n\n- **valider la chaîne complète** (adaptateur, mode flash, IDE, board package) en réussissant un premier téléversement ;\n- **identifier précisément le module** en main : la flash réelle ne correspond pas toujours à ce qui est annoncé par le vendeur, et il peut être utile de le constater avant d'aller plus loin.\n\n> **Prérequis** : un ESP-01 programmable depuis l'IDE Arduino. Voir les articles dédiés à l'[adaptateur USB-série](https://varlog.a5l.fr/post/adaptateur-usb-vers-esp-01-activer-le-mode-programmation) et à la [configuration de l'IDE pour l'ESP-01](https://varlog.a5l.fr/post/esp-01-presentation-premiers-pas).\n\n## Le programme\n\n```cpp\n// Demande au SDK de connecter l'ADC interne à la mesure de VCC\n// plutôt qu'à la broche TOUT. Doit être déclaré en dehors de setup()\n// pour être pris en compte au démarrage.\nADC_MODE(ADC_VCC);\n\nvoid setup() {\n Serial.begin(115200);\n delay(100); // petit délai pour stabiliser l'UART\n}\n\nvoid loop() {\n /* ----- ESP8266EX ----- */\n Serial.println(\"INFO ESP8266EX\");\n\n Serial.printf(\"Numéro de série de l'ESP8266EX .....: %u\\n\",\n ESP.getChipId());\n\n float frequenceCpu = float(ESP.getCpuFreqMHz());\n Serial.printf(\"Fréquence du CPU ...................: %4.1f MHz\\n\",\n frequenceCpu);\n\n // getVcc() renvoie la tension en millivolts\n float vcc = float(ESP.getVcc()) / 1000.0;\n Serial.printf(\"Alimentation .......................: %4.2f V\\n\", vcc);\n\n // La version du core Arduino-ESP8266 contient des underscores\n // (ex: 2_7_4) ; on les remplace par des points pour la lisibilité.\n String coreVersion = ESP.getCoreVersion();\n coreVersion.replace('_', '.');\n Serial.print(\"Version du gestionnaire de carte ...: \");\n Serial.println(coreVersion);\n\n Serial.printf(\"Version du SDK .....................: %s\\n\\n\",\n ESP.getSdkVersion());\n\n /* ----- Mémoire flash ----- */\n Serial.println(\"INFO FLASH\");\n\n Serial.printf(\"Numéro de série du chip ............: %u\\n\",\n ESP.getFlashChipId());\n\n float frequenceFlash = float(ESP.getFlashChipSpeed()) / 1000000.0;\n Serial.printf(\"Fréquence ..........................: %4.1f MHz\\n\",\n frequenceFlash);\n\n Serial.printf(\"Capacité effective .................: %u octets\\n\",\n ESP.getFlashChipRealSize());\n Serial.printf(\"Capacité paramétrée dans l'EDI .....: %u octets\\n\",\n ESP.getFlashChipSize());\n\n Serial.printf(\"Taille du sketch ...................: %u octets\\n\",\n ESP.getSketchSize());\n Serial.printf(\"Mémoire disponible .................: %u octets\\n\\n\\n\",\n ESP.getFreeSketchSpace());\n\n delay(10000);\n}\n```\n\n## Téléverser et lire la sortie\n\n1. Sélectionner `Outils → Type de carte → Generic ESP8266 Module`.\n2. Régler le port série sur celui de l'adaptateur.\n3. Placer l'ESP-01 en mode flash (jumper GPIO0 ↔ GND), téléverser, retirer le jumper, redémarrer.\n4. Ouvrir le moniteur série à **115200 bauds**, fin de ligne **NL & CR**.\n\nSortie attendue (les valeurs varient d'un module à l'autre) :\n\n```\nINFO ESP8266EX\nNuméro de série de l'ESP8266EX .....: 10106374\nFréquence du CPU ...................: 80.0 MHz\nAlimentation .......................: 3.47 V\nVersion du gestionnaire de carte ...: 2.7.4\nVersion du SDK .....................: 2.2.2-dev(38a443e)\n\nINFO FLASH\nNuméro de série du chip ............: 1327304\nFréquence ..........................: 40.0 MHz\nCapacité effective .................: 1048576 octets\nCapacité paramétrée dans l'EDI .....: 1048576 octets\nTaille du sketch ...................: 268288 octets\nMémoire disponible .................: 778240 octets\n```\n\n## Lecture des informations\n\n### Bloc ESP8266EX\n\n| Information | Méthode | Commentaire |\n|---|---|---|\n| Numéro de série du SoC | `ESP.getChipId()` | Entier 24 bits dérivé de l'adresse MAC du module. Identifie de manière unique un ESP8266 donné. |\n| Fréquence du CPU | `ESP.getCpuFreqMHz()` | 80 MHz par défaut, peut passer à 160 MHz avec `system_update_cpu_freq(160)` ou via les options de carte de l'IDE. |\n| Alimentation | `ESP.getVcc()` | Tension VCC en millivolts. Nécessite `ADC_MODE(ADC_VCC)` et que la broche TOUT (ADC0) soit laissée libre. |\n| Version du core | `ESP.getCoreVersion()` | Version du board package *esp8266 by ESP8266 Community*. C'est lui qui fournit l'API Arduino utilisée ici. |\n| Version du SDK | `ESP.getSdkVersion()` | Version du SDK NONOS d'Espressif, utilisé en interne par le core. Ne pas confondre avec la version du core. |\n\nLecture de la sortie d'exemple : le module est un ESP8266 cadencé à 80 MHz, alimenté à environ 3,47 V (légèrement au-dessus du nominal de 3,3 V, ce qui reste dans la plage tolérée 3,03,6 V), compilé avec le board package 2.7.4 (basé sur le SDK NONOS 2.2.2).\n\n### Bloc Flash\n\n| Information | Méthode | Commentaire |\n|---|---|---|\n| Numéro de série de la flash | `ESP.getFlashChipId()` | Concaténation du manufacturer ID et du device ID renvoyés par la commande JEDEC. Utile pour identifier la puce flash réellement soudée. |\n| Fréquence | `ESP.getFlashChipSpeed()` | Vitesse de l'horloge SPI en Hz. 40 MHz est la valeur standard ; 80 MHz est possible mais instable sur certains lots. |\n| Capacité effective | `ESP.getFlashChipRealSize()` | Taille **physique** de la puce flash, lue dans son JEDEC ID. C'est la vérité matérielle. |\n| Capacité paramétrée | `ESP.getFlashChipSize()` | Taille que l'IDE a annoncée au firmware (paramètre *Flash Size* dans `Outils`). Doit correspondre à la capacité effective. |\n| Taille du sketch | `ESP.getSketchSize()` | Place occupée par le programme actuel. |\n| Mémoire disponible | `ESP.getFreeSketchSpace()` | Place restante utilisable pour un téléversement OTA. **Pas** la RAM libre — pour cela utiliser `ESP.getFreeHeap()`. |\n\nDans la sortie d'exemple, la flash physique fait **1 Mo** (1 048 576 octets) et l'IDE a été paramétré avec la même valeur : c'est cohérent.\n\n> **Piège classique** : si `getFlashChipRealSize()` et `getFlashChipSize()` diffèrent, le module est mal configuré dans l'IDE. Les conséquences vont de plantages aléatoires au refus de monter le système de fichiers SPIFFS/LittleFS. C'est l'un des intérêts principaux de ce sketch : détecter ce désaccord avant d'investiguer un comportement étrange.\n\n## Variante : ajouter quelques infos utiles\n\nQuelques méthodes complémentaires qu'il peut être pertinent d'ajouter au programme selon les besoins :\n\n```cpp\nSerial.printf(\"RAM libre (heap) ...................: %u octets\\n\",\n ESP.getFreeHeap());\nSerial.printf(\"Fragmentation du heap ..............: %u %%\\n\",\n ESP.getHeapFragmentation());\nSerial.printf(\"Plus gros bloc libre ...............: %u octets\\n\",\n ESP.getMaxFreeBlockSize());\n\nSerial.printf(\"Adresse MAC ........................: %s\\n\",\n WiFi.macAddress().c_str()); // nécessite #include <ESP8266WiFi.h>\nSerial.printf(\"Cause du dernier reset .............: %s\\n\",\n ESP.getResetReason().c_str());\n```\n\nCes valeurs sont particulièrement intéressantes pour diagnostiquer des plantages : `getResetReason()` indique si le module a redémarré sur un watchdog, un brown-out, un reset matériel ou une exception logicielle.\n\n## Pour aller plus loin\n\n- [L'ESP-01 : présentation et premiers pas](https://varlog.a5l.fr/post/esp-01-presentation-premiers-pas)\n- [Adaptateur USB vers ESP-01 : activer le mode programmation](https://varlog.a5l.fr/post/adaptateur-usb-vers-esp-01-activer-le-mode-programmation)\n- [ESP8266 : commandes AT](https://varlog.a5l.fr/post/esp8266-commandes-at)\n- Documentation officielle de l'API `ESP` du core Arduino : <https://arduino-esp8266.readthedocs.io/en/latest/libraries.html#esp-specific-apis>\n```","featured":false,"tags":[]}