ESP Easy : flasher le firmware avec esptool.py sur ESP8266 (GitHub)

ESP Easy est très facile à flasher sur Windows à l’aide de l’utilitaire d’installation contenu dans le dépôt du projet. Si vous êtes un utilisateur Linux (PC, Raspberry Pi, Orange PI…) ou macOS, il va falloir utiliser esptool.py déjà présenté dans ce tutoriel. Dans ce tutoriel, nous allons installer sur firmware sur une Wemos D1 Mini, mais la méthode s’applique également à tous les ESP8266 NodeMCU (attention, certaines cartes nécessitent d’être en mode bootload avant de pouvoir flasher le firmware).

Installer Python et esptool.py

Avant de commencer, vérifions que la version 2.7.x de python est bien installée. Ouvrez le Terminal et exécutez Python. Si Python est installé, le shell doit démarrer. Saisissez exit() pour quitter le shell.

Python 2.7.10 (default, Oct 23 2015, 19:19:21) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()

Si Python n’est pas installé sur votre machine, installez le en vous rendant ici.

Pour installer esptool.py, le mieux est de laisser Python s’en charger de manière à ce que toutes les dépendances soient installées en même temps.

pip install esptool

en cas de difficulté, vous pouvez aussi exécuter python -m pip install esptool  ou pip2 install esptool.

Sur Windows

Lancez PowerShell (qui permet d’exécuter les commandes Unix). Placez vous dans le répertoire d’installation d’esptool, par exemple Documents et lancez l’installation d’esptool (et des dépendances) comme sur macOS ou Linux.

PS C:\Users\Christophe\Documents> pip install esptool
Collecting esptool
  Downloading esptool-1.3.tar.gz
Collecting pyserial>=2.5 (from esptool)
  Using cached pyserial-3.2.1-py2.py3-none-any.whl
Installing collected packages: pyserial, esptool
  Running setup.py install for esptool ... done
Successfully installed esptool-1.3 pyserial-3.2.1
PS C:\Users\Christophe\Documents>

Vous pouvez maintenant appeler esptool.py depuis n’importe ou. En effet, il a été installé dans le répertoire des exécutables par défaut de Python (C:\Python27\Scripts).

Sur macOS

Suivez ce tutoriel pour macOS.

Flasher le firmware ESP Easy sur une Wemos D1 Mini

Maintenant que tout est prêt, nous allons pouvoir lancer l’installation. Dans un Terminal, placez vous dans le répertoire d’ESP Easy. Vous pouvez le récupérer directement depuis GitHub ici ou le cloner à l’aide de la commande

git clone https://github.com/espressif/esptool.git

La commande esptool.py pour flasher la mémoire flash d’un ESP8266 est de la forme suivante

esptool.py --port [serial-port-of-ESP8266] write_flash -fm [mode] -fs [size] 0x00000 [nodemcu-firmware].bin

On doit donc lui passer les paramètres suivants :

  • Le port série sur lequel est branché l’ESP8266. Sur moaOS ou linux, exécutez la commande ls /dev/tty.*. Sur Windows, exécutez mode dans l’invite de commande
  • mode (-fm ou –flash_mode) :  dio par défaut
  • size (-fs ou –flash_size) : 32m pour 4MB
  • nodemcu-firmware : le chemin vers le binaire à flasher. Ici ESPEasy_Rxxx_xxxx.bin

Ce qui donne par exemple pour une Wemos D1 Mini (4MB)

esptool.py --port COM3 --baud 115200 write_flash -fm dio -fs 32m 0x00000 ESPEasy_R120_4096.bin

Il possible d’indiquer d’autres paramètres

  • baud (–baud) : la vitesse de transfert. En cas de problème, il ne faut pas hésiter à la diminuer à 115200 bauds par exemple.
  • after (–after) : permet de faire un reset (no_reset, hard_reset ou soft_reset) après l’opération de flashage.

Comment flasher ESP Easy sur une autre carte ESP8266 NodeMCU

esptool.py est un utilitaire à tout faire pour toutes les carte ESP8266 du marché. Il faudra adapter la commande en passant les paramètres qui correspondent à votre carte. Ca fonctionne également pour la nouvelle génération ESP32. Pour cela, il faudra aller piocher dans la documentation d’esptool.py qui se trouve ici. esptool.py envoi un autre

Les cartes NodeMCU, WeMOS, HUZZAH Feather, Core Board, ESP32-WROVER-KIT sont en mesure de passer en mode bootload, pour les autres il faudra appliquer la méthode classique déjà expliquée dans ce tutoriel.

Pour récupérer les caractéristiques de la carte, exécutez la commande esptool.py –port COMx flash_id

C:\Users>esptool.py --port COM3 flash_id
esptool.py v1.3
Connecting....
Manufacturer: ef
Device: 4016

Bonus : comment déterminer la taille de la mémoire d’un ESP8266

C’est un problème récurrent car la taille de la mémoire n’est jamais notée sur les cartes. Si vous avez plusieurs modèles, vous risquez rapidement d’avoir des problèmes. Voici comment faire pour déterminer la taille de la mémoire à partir de d’identifiant et du fabricant.

Tout d’abord, allez sur cette page qui liste les fabricants de puces ESP8266 https://code.coreboot.org/p/flashrom/source/tree/HEAD/trunk/flashchips.h

Ne vous occupez pas du fabricant, ici “ef”. Faites une recherche sur l’id du device, ici 0x4016. Vous allez trouver les lignes suivantes :

  • #define AMIC_A25LQ032                          0x4016 /* Same as A25LQ32A, but the latter supports SFDP */
  • #define ESMT_F25L32QA                         0x4016
  • #define GIGADEVICE_GD25Q32            0x4016 /* Same as GD25Q32B */
  • #define SPANSION_S25FL132K              0x4016
  • #define WINBOND_NEX_W25Q32_V  0x4016 /* W25Q32BV; W25Q32FV in SPI mode (default) */

Par convention, il faut prendre les 2 derniers chiffres du code sans s’occuper des lettres éventuelles qui se trouvent derrière (aucune idée de la signification pour le moment). Ici, on prendra donc 32. Toujours par convention, ce chiffre indique la quantité de mémoire en megabits, ce qui fait donc 32Mb, soit 4Mo (un convertisseur en ligne).

Pour le moment, c’est la seule méthode que j’ai pu trouvé. Si vous avez plus facile, n’hésitez pas à partager dans les commentaires.

Cas particulier de la Wemos d1 mini Pro 16MB

En théorie, l’ESP8266 est capable de supporter jusqu’à 128Mb (16Mo) de mémoire flash QSPI. C’est le cas de la nouvelle Wemos d1 mini Pro. Si on cherche 0x4018, le numéro de device, on va par exemple trouver GIGADEVICE_GD25Q128. Dans ce cas, on prendra 128. Après conversion, on obtient bien 16Mo (128Mb). On dira plutôt qu’il faut prendre les 2 ou 3 derniers chiffres du code dans s’occuper des dernières lettres

Et sur Windows ?

Sur Windows, tout fonctionne à l’identique. esptool étant un script Python, le programme est cross-plateforme. Il faudra simplement modifier le port de destination. Sous Windows il sera de la forme COM1, COM2… Pour connaître le port COM sur lequel est branché l’ESP8266, exécutez la commande mode. La commande permet de récupérer beaucoup plus de paramètres que la commande sous Linux.

PS C:\Users\Christophe\Documents\esptool-master> mode

Statut du périphérique COM3:
----------------------------
    Baud :            1200
    Parité :          None
    Bits de données : 7
    Bits d’arrêt :    1
    Temporisation :   OFF
    XON/XOFF :        OFF
    Protocole CTS :   OFF
    Protocole DSR :   OFF
    Sensibilité DSR : OFF
    Circuit DTR :     ON
    Circuit RTS :     ON


Statut du périphérique CON:
---------------------------
    Lignes :          3000
    Colonnes :        120
    Vitesse clavier : 31
    Délai clavier :   1
    Page de codes :   850

Rien ne fonctionne ! Effacez la mémoire

Si vous rencontrez des problèmes  d’installation, vous pouvez tenter d ‘effacer la mémoire avec la commande erase_flash.

esptool.py --port COM3 erase_flash
Print Friendly, PDF & Email

Inscrivez-vous à la newsletter hebdomadaire

Aucun spam et aucun autre usage ne sera fait de votre email. Vous pouvez vous désinscrire à tout moment.

Comparateur de prix

Bons plans

Les offres suivantes se terminent bientôt. Utilisez le coupon indiqué pour profiter du prix promo

Domotique et objets connectés à faire soi-même