1 line
9.0 KiB
JSON
1 line
9.0 KiB
JSON
{"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,0–3,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":[]} |