2022-05-22
md
Installation du micrologiciel AT sur un ESP-01S

ESP-01 image À quel point peut-il être difficile d'installer le micrologiciel AT d'origine sur un ESP-01 ? Cette toute petite carte avec ce micrologiciel a révélé les microcontrôleurs ESP8266 d'Espressif aux bricoleurs. On trouve encore ces dispositifs sur le marché. Le micrologiciel AT 1.2.0 était embarqué sur des ESP-01S que j'ai obtenus il y a quelques semaines. Ayant remplacé ce micrologiciel pour un projet antérieur, j'ai voulu le réinstaller, mais avec une version plus récente. J'ai pu installer la version 1.7.5. Cependant, je n'ai pas réussi à installer la dernière version (version 2.2.0) du micrologiciel AT en suivant les instructions d'Espressif, mais il y une version compilée par un tiers qui fonctionne.

Table of contents

  1. Obtenir la version 1.7.5 du micrologiciel AT
  2. Téléverser le micrologiciel avec esptool.py
  3. Mise à jour vers la version 1.7.5
  4. Version 2.2.0
  5. Avertissement nécessaire ?

Obtenir la version 1.7.5 du micrologiciel AT toc

Suite à la deuxième suggestion de Robert Oostenveld dans Restoring the AT firmware on the ESP8266 (22 septembre 2018), j'ai accédé à la plus récente version du référentiel ESP8266 NonOS. Cette version a maintenant deux ans et est obsolète selon l'avertissement qu'on y trouve.

À partir de décembre 2019, Nous n'ajouterons aucune nouvelle fonctionnalité au SDK ESP8266 NonOS. Nous ne corrigerons que les bogues critiques dans le SDK ESP8266 NonOS. Nous ne maintiendrons que la branche principale du SDK ESP8266 NonOS, basée sur la v3.0. en y apportant des correctifs de façon continue. Cela signifie : Toutes les autres branches publiées ne seront pas mises à jour. Toutes les futures versions seront publiées uniquement à partir de la branche principale mentionnée ci-dessus. Il est suggéré d'utiliser ESP8266_RTOS_SDK, au lieu du SDK ESP8266 NonOS, pour vos projets.

Néanmoins le répertoire bin/at/ contient la version 1.7.4 du micrologiciel AT (Nano) qui supporte une bibliothèque SSL avec moins de chiffrements, mais qui tient sur 1Mo de mémoire flash ce qui correspond à la quantité de mémoire flash sur les versions "plus récentes" de l'ESP-01 parfois identifiée comme l'ESP-01S (voir Differences between ESP-01 and ESP-01S). La version "normale" du micrologiciel AT nécessite au moins 2 Mo de mémoire flash, elle ne peut donc pas être installée sur l'EPS-01. Or il s'adonne qu'il a une version 3.0.5 du SDK qui contient 11 nouveaux changements par rapport à la branche master et qui, en même temps, est en retard par rapport à 32 changements. Qu'importe la confusion, cette branche contient la version 1.7.5 du micrologiciel AT qui est la plus récente.

Je n'avais besoin que de trois fichiers binaires du référentiel

mais il peut être utile de télécharger tous les fichiers .bin des répertoires bin/ et bin/at/512+512/ pour expérimenter davantage (ce que je n'ai pas entrepris). Voici une très longue commande bash qui fera tous ces téléchargements pour autant que wget soit installé.

wget https://github.com/espressif/ESP8266_NONOS_SDK/raw/release/v3.0.5/bin/blank.bin https://github.com/espressif/ESP8266_NONOS_SDK/raw/release/v3.0.5/bin/boot_v1.2.bin https://github.com/espressif/ESP8266_NONOS_SDK/raw/release/v3.0.5/bin/boot_v1.2.bin https://github.com/espressif/ESP8266_NONOS_SDK/raw/release/v3.0.5/bin/boot_v1.6.bin https://github.com/espressif/ESP8266_NONOS_SDK/raw/release/v3.0.5/bin/boot_v1.7.bin https://github.com/espressif/ESP8266_NONOS_SDK/raw/release/v3.0.5/bin/esp_init_data_default_v05.bin https://github.com/espressif/ESP8266_NONOS_SDK/raw/release/v3.0.5/bin/esp_init_data_default_v08.bin https://github.com/espressif/ESP8266_NONOS_SDK/raw/release/v3.0.5/bin/at/512%2B512/user1.1024.new.2.bin https://github.com/espressif/ESP8266_NONOS_SDK/raw/release/v3.0.5/bin/at/512%2B512/user2.1024.new.2.bin

Ensuite, j'ai créé un fichier texte nommé upload.txt qui contient le nom des fichiers binaires à téléverser sur l'ESP01 ainsi que l'adresse à laquelle ils doivent être placés dans la mémoire flash.

write_flash -e -fm dout --flash_freq 80m -fs 1MB 0x00000 boot_v1.2.bin 0x01000 user1.1024.new.2.bin 0xfc000 esp_init_data_default_v05.bin

Les trois dernières lignes sont extraites de la section Flash size 8Mbit: 512KB+512KB. La première ligne contient les paramètres de téléversement avec l'utilitaire esptool.py qui sera utilisé dans la section suivante.

Téléverser le micrologiciel avec esptool.py toc

Il doit y avoir plus de cinq copies du script Python esptool.py d'Espressif dans répertoires de mon ordinateur de bureau. J'ai choisi de travailler avec une copie récente (version 3.1) trouvée dans les outils PlatformIO. J'ai créé un sous-répertoire nommé AT du répertoire où se trouve esptool.py et j'y ai copié les quatre fichiers mentionnés dans la section précédente. Il faut connecter l'ESP-01S à l'ordinateur de bureau avec un adaptateur USB-série (TTY) ou un programmeur comme ceux visibles à droite. Puis il faut repérer le périphérique qui sera créé après ce branchement. D'après une longue expérience, je sais que ce sera très probablement /dev/ttyUSB0, mais cela pourrait être /dev/ttyUSB1 sur mon ordinateur Linux. Sur une machine Windows, le convertisseur USB-série apparaîtra comme un port COM. Si nécessaire, faites la danse habituelle pour mettre l'ESP8286 en mode de téléversement (mode bootloader ou mode flash). Fondamentalement, GPIO0 doit être mis à la terre lorsque l'ESP8266 est réinitialisé ou mis sous tension. Avec le programmateur affiché à gauche, tout se fait automatiquement. Quant à l'adaptateur à sa droite, il y a probablement un ou des boutons à appuyer aux bons moments , mais je ne peux l'affirmer n'ayant jamais possédé ce type de dispositif. Une fois que l'ESP est dans le bon mode, il suffit de téléverser le micrologiciel.

michel@hp:~/.platformio/packages/tool-esptoolpy/AT$ ls upload.txt boot_v1.2.bin esp_init_data_default_v05.bin user1.1024.new.2.bin michel@hp:~/.platformio/packages/tool-esptoolpy/AT$ ls /dev/ttyUSB* /dev/ttyUSB0 michel@hp:~/.platformio/packages/tool-esptoolpy/AT$ ../esptool.py -p /dev/ttyUSB0 -b 115200 @upload.txt modifier selon le périphérique esptool.py /dev/ttyUSB0 -b 115200 write_flash -e -fm dout --flash_freq 80m -fs 1MB 0x00000 boot_v1.2.bin 0x01000 user1.1024.new.2.bin 0xfc000 esp_init_data_default_v05.bin esptool.py v3.1 Serial port /dev/ttyUSB0 Connecting.... Detecting chip type... ESP8266 Chip is ESP8266EX Features: WiFi Crystal is 26MHz MAC: a0:20:a6:30:de:5c Uploading stub... Running stub... Stub running... Configuring flash size... Erasing flash (this may take a while)... Chip erase completed successfully in 2.8s Flash params set to 0x032f Compressed 1936 bytes to 1462... Wrote 1936 bytes (1462 compressed) at 0x00000000 in 0.2 seconds (effective 84.2 kbit/s)... Hash of data verified. Compressed 413924 bytes to 297091... Wrote 413924 bytes (297091 compressed) at 0x00001000 in 26.3 seconds (effective 126.0 kbit/s)... Hash of data verified. Compressed 128 bytes to 75... Wrote 128 bytes (75 compressed) at 0x000fc000 in 0.1 seconds (effective 16.8 kbit/s)... Hash of data verified. Leaving... Hard resetting via RTS pin...

Ce serait bien si cela suffisait, mais il est impératif de tester que tout a fonctionné. Réinitialisez d'abord l'ESP-01 ou éteignez-le puis rallumez-le. Il devrait apparaître comme le même périphérique/port COM qu'avant. Le moniteur série de l'IDE Arduino peut être utilisé pour communiquer avec le micrologiciel AT; réglez le baud sur 115200 et sélectionner NL & CR pour la fin de ligne. J'a préféré utiliser un programme terminal, soit cu pour vérifier que la nouvelle version du micrologiciel AT a bien été téléversée. Avec cu, je devais entrer manuellement une combinaison de touches CtrlJ après avoir appuyé sur la touche Enter (ou appuyer sur la séquenceCtrlM CtrlJ) à la fin de chaque commande AT car celles-ci commandes doivent se terminer par les codes de contrôle CR et LF.

michel@hp:~$ cu -l /dev/ttyUSB0 -s 115200 Connected. AT OK AT+GMR AT version:1.7.5.0(Oct 20 2021 19:14:04) SDK version:3.0.5(b29dcd3) compile time:Oct 20 2021 20:13:45 Bin version(Wroom 02):1.7.5 OK

C'est une confirmation que la version 1.7.5 (20 octobre 2021) du micrologiciel AT (Nano) fonctionne maintenant sur l'ESP-01S.

Mise à jour vers la version 1.7.5 toc

Selon les instructions dans Update steps, il aurait été possible de mettre à jour la version 1.7.4 depuis le micrologiciel AT lui-même. Bien sûr, l'ESP doit être connecté au réseau Wi-Fi local avant de tenter cela.

AT+CWMODE_CUR=1 OK AT+CWLAP +CWLAP:(3,"Welcome!!",-84,"18:90:88:56:3d:c6",1,33,0,4,4,7,0) +CWLAP:(3,"",-87,"d6:e2:cb:4d:71:fa",6,32767,0,4,4,7,0) +CWLAP:(5,"",-89,"d6:e2:cb:4d:71:fe",6,32767,0,4,4,7,0) +CWLAP:(3,"Playtek",-47,"f7:ae:42:42:43:44",11,32767,0,4,4,7,1) +CWLAP:(3,"",-84,"fa:5e:42:43:6b:13",11,32767,0,4,4,7,0) +CWLAP:(5,"",-86,"fa:5e:42:43:6b:17",11,32767,0,4,4,7,0) OK AT+CWJAP="Playtek","12345678" adjust name and password as needed WIFI CONNECTED WIFI GOT IP OK AT+CIFSR +CIFSR:STAIP,"192.168.1.143" +CIFSR:STAMAC,"a0:20:93:30:31:32" OK AT+GMR AT version:1.7.4.0(May 11 2020 19:13:04) SDK version:3.0.4(9532ceb) compile time:May 27 2020 10:12:17 Bin version(Wroom 02):1.7.4 OK AT+CIUPDATE +CIPUPDATE:1 +CIPUPDATE:2 +CIPUPDATE:3 +CIPUPDATE:4 patience, l'opération peut prendre 2 minutes OK WIFI DISCONNECT ets Jan 8 2013,rst cause:1, boot mode:(3,6) load 0x40100000, len 816, room 16 tail 0 chksum 0x8d load 0x3ffe8000, len 788, room 8 tail 12 chksum 0xcf ho 0 tail 12 room 4 load 0x3ffe8314, len 288, room 12 tail 4 chksum 0xcf csum 0xcf 2nd boot version : 1.2 SPI Speed : 80MHz SPI Mode : SPI Flash Size : 8Mbit jump to run user2 correct flash map �cl`{�o$ ... �crd;l ready WIFI CONNECTED WIFI GOT IP AT+GMR AT version:1.7.5.0(Oct 20 2021 19:14:04) SDK version:3.0.5(b29dcd3) compile time:Oct 20 2021 20:13:50 Bin version(Wroom 02):1.7.5 OK

J'ai redémarré l'ESP-01 juste pour m'assurer que tout fonctionnait.

Malheureusement, il n'est pas possible de mettre à jour la version 1.2.0 du micrologiciel AT installé en usine. Il ne semble pas qu'il existe de mises à niveau au-delà de 1.7.5. La commande AT+CIUPDATE n'a rien fait d'utile lorsque le micrologiciel est déjà sur la version 1.7.5. Ceci étant dit, elle permettra peut-être une mise à niveau plus tard si jamais une nouvelle version est élaborée dans l'environnent ESP8266 NonOS.

Version 2.2.0 toc

La page Released Firmware page of the guide de l'utilsateur de ESP-AT contient une note importante.

Note : Espressif n'a pas publié de version distincte pour la série de puces ESP8285/8266 avec 1 Mo de mémoire flash, mais vous pouvez vous référer à How to Download the Latest Temporary Version of AT Firmware from GitHub (Comment télécharger la dernière version temporaire du micrologiciel AT à partir de GitHub) et choisir de télécharger le micrologiciel de 1 Mo sur le CI de GitHub (le site d'intégration continue). Veuillez passer à la branche release/v2.2.0.0_esp8266 et télécharger esp8285-1MB-at sous la page Artifacts.

En suivant ces instructions, j'ai trouvé esp8285-1MB-at.zip (attention : ce lien ne fonctionnera plus dès la prochaine intégration du micrologiciel), mais je n'ai pas pu installer cette version.

michel@hp:~/.platformio/packages/tool-esptoolpy/AT$ ../esptool.py -p /dev/ttyUSB0 -b 115200 write_flash -e @download.config esptool.py /dev/ttyUSB0 -b 115200 write_flash -e --flash_mode dout --flash_freq 80m --flash_size 1MB 0x8000 partition_table/partition-table.bin 0x9000 ota_data_initial.bin 0x0 bootloader/bootloader.bin 0x20000 esp-at.bin 0x18000 at_customize.bin 0x1A000 customized_partitions/client_cert.bin 0x1B000 customized_partitions/client_key.bin 0x1C000 customized_partitions/client_ca.bin 0x1D000 customized_partitions/mqtt_cert.bin 0x1E000 customized_partitions/mqtt_key.bin 0x1F000 customized_partitions/mqtt_ca.bin 0x19000 customized_partitions/factory_param.bin esptool.py v3.1 Serial port /dev/ttyUSB0 Connecting.... Detecting chip type... ESP8266 Chip is ESP8266EX Features: WiFi Crystal is 26MHz MAC: a0:20:93:30:31:32 Uploading stub... Running stub... Stub running... Configuring flash size... Erasing flash (this may take a while)... Chip erase completed successfully in 2.2s Compressed 3072 bytes to 103... Wrote 3072 bytes (103 compressed) at 0x00008000 in 0.1 seconds (effective 429.0 kbit/s)... Hash of data verified. Compressed 8192 bytes to 31... Wrote 8192 bytes (31 compressed) at 0x00009000 in 0.1 seconds (effective 659.1 kbit/s)... Hash of data verified. Flash params set to 0x022f Compressed 10224 bytes to 6861... Wrote 10224 bytes (6861 compressed) at 0x00000000 in 0.8 seconds (effective 107.9 kbit/s)... Hash of data verified. Compressed 843600 bytes to 529958... Wrote 843600 bytes (529958 compressed) at 0x00020000 in 46.9 seconds (effective 143.9 kbit/s)... Hash of data verified. Compressed 3072 bytes to 151... Wrote 3072 bytes (151 compressed) at 0x00018000 in 0.1 seconds (effective 357.4 kbit/s)... Hash of data verified. Compressed 2344 bytes to 1487... Wrote 2344 bytes (1487 compressed) at 0x0001a000 in 0.2 seconds (effective 103.5 kbit/s)... Hash of data verified. Compressed 3368 bytes to 2526... Wrote 3368 bytes (2526 compressed) at 0x0001b000 in 0.3 seconds (effective 87.8 kbit/s)... Hash of data verified. Compressed 2344 bytes to 1499... Wrote 2344 bytes (1499 compressed) at 0x0001c000 in 0.2 seconds (effective 87.6 kbit/s)... Hash of data verified. Compressed 1168 bytes to 895... Wrote 1168 bytes (895 compressed) at 0x0001d000 in 0.1 seconds (effective 71.9 kbit/s)... Hash of data verified. Compressed 1692 bytes to 1322... Wrote 1692 bytes (1322 compressed) at 0x0001e000 in 0.2 seconds (effective 80.4 kbit/s)... Hash of data verified. Compressed 1172 bytes to 914... Wrote 1172 bytes (914 compressed) at 0x0001f000 in 0.2 seconds (effective 59.0 kbit/s)... Hash of data verified. Compressed 4096 bytes to 81... Wrote 4096 bytes (81 compressed) at 0x00019000 in 0.1 seconds (effective 365.4 kbit/s)... Hash of data verified. Leaving... Hard resetting via RTS pin...

Alors que le téléchargement semble se dérouler correctement, quelque chose ne va pas et la DEL de communication bleue reste allumé en tout temps et même après un redémarrage. Il était possible de se connecter au port série du ESP, mais qu'importe le baud choisi, les commandes AT ont été ignorées et le microcontrôleur ne semblait émettre que des séquences aléatoires de caractères. Tout récemment, Arnaud Baixas a décrit la même situation dans le Forum ESP-AT d'Espressif lors de l'utilisation d'une version de esp8285-1MB-at.zip provenant d'une intégration un peu plus ancienne. Malheureusement, personne n'a proposé de solution à notre problème commun.

Cependant, le problème a été soulevé dans le référentiel Espressif ESP-AT GitHub et Juraj Andrássy (JAndrassy) a fournit un binaire complet ESP8266-1MB-tx1rx3-AT_V2.2.zip comme solution. Comme précédemment, j'ai créé un sous-répertoire dans le répertoire contenant esptool.py et décompressé le contenu de la compilation du micrologiciel AT de Juraj. Comme l'archive contenait un fichier de paramètres, il était encore plus simple de téléverser cette version.

michel@hp:~/.platformio/packages/tool-esptoolpy/ESP-AT$ ../esptool.py -p /dev/ttyUSB0 -b 115200 write_flash -e @download.config esptool.py /dev/ttyUSB0 -b 115200 write_flash -e --flash_mode dio --flash_freq 80m --flash_size 1MB 0x8000 partition_table/partition-table.bin 0x9000 ota_data_initial.bin 0x0 bootloader/bootloader.bin 0x20000 esp-at.bin 0x18000 at_customize.bin 0x1A000 customized_partitions/client_cert.bin 0x1B000 customized_partitions/client_key.bin 0x1C000 customized_partitions/client_ca.bin 0x1D000 customized_partitions/mqtt_cert.bin 0x1E000 customized_partitions/mqtt_key.bin 0x1F000 customized_partitions/mqtt_ca.bin 0x19000 customized_partitions/factory_param.bin esptool.py v3.1 Serial port /dev/ttyUSB0 Connecting.... Detecting chip type... ESP8266 Chip is ESP8266EX Features: WiFi Crystal is 26MHz MAC: a0:20:93:30:31:32 Uploading stub... Running stub... Stub running... Configuring flash size... Erasing flash (this may take a while)... Chip erase completed successfully in 2.1s Compressed 3072 bytes to 103... Wrote 3072 bytes (103 compressed) at 0x00008000 in 0.1 seconds (effective 432.0 kbit/s)... Hash of data verified. Compressed 8192 bytes to 31... Wrote 8192 bytes (31 compressed) at 0x00009000 in 0.1 seconds (effective 651.9 kbit/s)... Hash of data verified. Compressed 10224 bytes to 6862... Wrote 10224 bytes (6862 compressed) at 0x00000000 in 0.8 seconds (effective 108.0 kbit/s)... Hash of data verified. Compressed 807184 bytes to 510586... Wrote 807184 bytes (510586 compressed) at 0x00020000 in 45.1 seconds (effective 143.1 kbit/s)... Hash of data verified. Compressed 3072 bytes to 151... Wrote 3072 bytes (151 compressed) at 0x00018000 in 0.1 seconds (effective 359.4 kbit/s)... Hash of data verified. Compressed 2344 bytes to 1487... Wrote 2344 bytes (1487 compressed) at 0x0001a000 in 0.2 seconds (effective 103.9 kbit/s)... Hash of data verified. Compressed 3368 bytes to 2526... Wrote 3368 bytes (2526 compressed) at 0x0001b000 in 0.3 seconds (effective 88.1 kbit/s)... Hash of data verified. Compressed 2344 bytes to 1499... Wrote 2344 bytes (1499 compressed) at 0x0001c000 in 0.2 seconds (effective 87.8 kbit/s)... Hash of data verified. Compressed 1168 bytes to 895... Wrote 1168 bytes (895 compressed) at 0x0001d000 in 0.1 seconds (effective 71.3 kbit/s)... Hash of data verified. Compressed 1692 bytes to 1322... Wrote 1692 bytes (1322 compressed) at 0x0001e000 in 0.2 seconds (effective 80.7 kbit/s)... Hash of data verified. Compressed 1172 bytes to 914... Wrote 1172 bytes (914 compressed) at 0x0001f000 in 0.2 seconds (effective 59.1 kbit/s)... Hash of data verified. Compressed 4096 bytes to 78... Wrote 4096 bytes (78 compressed) at 0x00019000 in 0.1 seconds (effective 366.6 kbit/s)... Hash of data verified. Leaving... Hard resetting via RTS pin..

Une vérification rapide montre que le micrologiciel a été téléversé et semble fonctionner.

michel@hp:~/Téléchargements/Devices/ESP/ESP-01/AT$ cu -l /dev/ttyUSB0 -s 115200 Connected. {ll��|�d�| � d� b|���s�bd #��no�$gn���cp��ds$sdp�g�AT AT OK AT+GMR AT version:2.2.0.0(s-b097cdf - ESP8266 - Jun 17 2021 12:58:29) SDK version:v3.4-22-g967752e2 compile time(6800286):Jul 11 2021 11:09:32 Bin version:2.2.0(ESP8266_1MB) OK

Les dates prêtent à confusion. La version 2.2.0 est datée de juillet 2021 alors que la version 1.7.5 a été compilée 3 mois plus tard. Toutefois, il faut se

Avertissement nécessaire ? toc

Sans examen approfondi il est difficile de déterminer quelle version doit être utilisée. La version 1.7.5 est compilée avec le SDK ESP8266_NOOS obsolète, tandis que la version plus récente est compilée avec le SDK ESP8266_RTOS (voir Qu'est-ce que l'ESP-AT). Du point de vue de l'utilisateur occasionnel, ce n'est pas nécessairement très important. Le micrologiciel AT transforme la carte ESP en un convertisseur série vers Wi-Fi autonome. Si le jeu de commandes AT est presque le même, cela n'a peut-être pas d'importance. Sans examiner de plus près les deux versions, je n'ai aucune base pour un jugement définitif.

Sans vouloir porter atteinte à la réputation de qui que ce soit, il faut souligner que je n'ai pas pu trouver la source du binaire 2.2.0 fourni par Juraj Andrássy. L'auteur dit qu'il l'a compilé à partir de la source d'Espressif, mais je serais plus à l'aise si c'était un peu plus transparent. Quand il écrit qu'il a lu le manuel, je suppose qu'il fait référence à How to compile and develop your own AT project dans le guide de l'utilisateur ESP-AT pour release-v2.2.0.0_esp8266. Rien n'empêche quiconque d'essayer d'en faire autant, mais je suis trop paresseux pour me lancer dans cette aventure.

Pour ceux qui s'inquiètent de telles choses, voici la source de la version 1.7.4 : at_nano alors que la source de la version 1.7.5 se trouve ici. Je crois que la source de la version 2.2.0 serait ici.

Peut-être que le micrologiciel ESP_ATMod (ESP8266 AT - processeur de commandes) avec capacité TLS 1.2 par Jiri Bilek (JiriBilek) mérite d'être examiné. La licence du projet est LGPL-3.0 et, par conséquent, la source est disponible. Cette bibliothèque améliore l'implémentation de TLS en ajoutant des chiffrements basés sur GCM au détriment de certaines fonctionnalités. Il n'y a aucun problème a compilé ce projet avec PlatformIO et de l'installer sur un ESP-01S et, sans doute, on pourrait utiliser l'EDI Arduino pour en faire autant.

Enfin, pour tirer pleinement avantage de la version 1.7.x du micrologiciel AT, on peut parcourir le manuel: ESP8266 Non-OS AT Instruction Set Version 3.0.5 Espressif Systems 2021. La documentation ESP-AT User Guide devrait s'appliquer à la version 2.2.0 sur ESP8266.