ESP8266 impossible a reflasher

Bonsoir à tous,
je réalise un thermostat connecté avec un ESP8266-12E et un DHT22, je suis sous WIN10 IDE 1.8.7 et ESP8266 v2.4.2
Le projet avançait bien en téléchargeant depuis l’IDE via un adaptateur USB-série puis en Wifi par OTA, ensuite j’ai utilisé NTP pour récupérer l’heure puis j’ai mis SPIFFS pour sauvegarder la config et pour loger la température toutes les 1/2 heure sur 24h … j’étais en train de paufiner l’interface WEB et … plus moyen de téléverser ni par OTA ni par USB (en mettant GPIO0 a GND à la mise sous tension) et pourtant le sketch tourne toujours dans la dernière version téléchargée
j’ai recherché des solutions et même essayé d’effacer complétement la mémoire avec un binaire vide et l’ESP flash tool (suivant ce site), mais rien ne marche car l’ESP émet en permanence surTX0 n’importe quoi (avec l’IDE impossible de trouver une vitesse pour un affichage cohérent (dans la programme il est initialisé a 115200)
les messages d’erreur

IDE -> warning: espcomm_sync failed   
ESPTOOLS -> esptool v0.4.12 - (c) 2014 Ch. Klippel <ck@atelier-klippel.de>
        setting board to nodemcu
        setting baudrate from 115200 to 115200
        setting port from  to COM9
        setting address from 0x00000000 to 0x00000000
        espcomm_upload_file
        espcomm_upload_mem
        setting serial port timeouts to 1000 ms
opening bootloader
resetting board
trying to connect
        flush start
        setting serial port timeouts to 1 ms
        setting serial port timeouts to 1000 ms
        flush complete
        espcomm_send_command: sending command header
        espcomm_send_command: sending command payload
        serialport_receive_C0: 48 instead of C0
trying to connect
        flush start
        setting serial port timeouts to 1 ms
        setting serial port timeouts to 1000 ms
        flush complete
        espcomm_send_command: sending command header
        espcomm_send_command: sending command payload
        serialport_receive_C0: 04 instead of C0
trying to connect
        flush start
        setting serial port timeouts to 1 ms
        setting serial port timeouts to 1000 ms
        flush complete
        espcomm_send_command: sending command header
        espcomm_send_command: sending command payload
        serialport_receive_C0: 37 instead of C0
resetting board

ma question :

  • connaissez vous un moyen de se sortir de cette impasse ?

Bonsoir

A la mise sous tension tout ESP8266 emet son message de démarrage à 74880 bauds, c’est fixe
(L’ESP8266 emettrait à 115200bauds… s’il avait un quartz de 40MHz mais tout le mode mets 26MHz, d’où les 74880 bauds)

Ensuite seulement si tout va bien :
-soit le flashage peut se faire à un débit plus courant
-soit l’application démarre avecle débit choisi dans le code

le “n’importe quoi apparent” est peut être du à un redémarrage en boucle (manque de tension?, GPIO ?)
Certains terminaux (Bray, Cutecom)…permettent de choisir un débit atypique ce qui permet de voir ce que dit l’ESP.

GPIO0 n’est pas le seul en jeu, GPIO2 et GPIO15 comptent aussi au démarrage
Pour flasher il faut être en mode UART
boot.png

Autre piste : fin de vie de la mémoire flash accompagnant l’ESP8266
Sous les capots des ESP-12 c’est en général des mémoires Flash de marque Winbond données pour 100.000 cycles d’effacement/écriture.

merci al1fch, je me doutais de ton intervention

  • je ne pense pas qu'il y a un pb d'alimentation car en démarrage normal le programme tourne et je peux le vérifier sur l'interface web : affichage de l'heure a chaque mesure de température, changement de consigne, archivage...
  • pour les pin de boot je ne me suis occupé que de GPIO0 car sur la plaquette ou j'ai soudé l'ESP, GPIO15 est tiré à la masse par une résistance de 10k et dans l'ESP GPIO2 est tiré par une led et une résistance à Vcc

je pense que le port série est HS car en mode flash il émet en permanence cela ne semble pas normal et en mode programme j'ai quelques Serialprint mais la il semble aussi cracher en permanence ...

est ce qu'une erreur dans le code pourrait déclencher un tel pb ?

essaies quand même de te connecter à 74880 bauds pour voir en clair le message d'erreur, s'il s'agit bien d'un message d'erreur
avec ça sous Windows

est ce qu'une erreur dans le code pourrait déclencher un tel pb ?

je ne vois pas laquelle

je ne vois rien de clair sortir des symptômes puisque même le flashage par OTA est impacté

OUPS !!! je viens de résoudre le pb de flashage par USB : lorsque j'ai perdu l'OTA j'ai recâblé mon interface et l'ESP sur bredboard et raccordé par fils dupont femelle/femelle puis male/male et j'ai confondu 2 couleur et le GND de l'interface n'était pas relié a celui de l'ESP d’où le n'importe quoi sur le port série ...
reste a trouver la cause de la perte OTA et la c'est peut être un pb de mémoire :

  • j'ai choisi flash size 4M (2M SPIFFS)
  • au téléversement j'ai : Le croquis utilise 328832 octets (31%) de l'espace de stockage de programmes. Le maximum est de 1044464 octets.
    Les variables globales utilisent 32160 octets (39%) de mémoire dynamique, ce qui laisse 49760 octets pour les variables locales. Le maximum est de 81920 octets.
    mais j'utilise énormément des String pour l'interface web ... reste t'il assez de place pour l'OTA ? ? ?

4M moins 2M de SPIFFS; il reste en gros 2M pour les codes successifs (l'OTA a besoin de loger un code et son successeur pour pouvoir basculer au suivant) C'est cohérent avec "Le maximum est de 1044464 octets"
-> La place en mémoire Flash ne parait pas manquer

Le pb des Strings est le fractionnement, le côté gruyère qui fait que la place disponible peut être trop fractionnée pour être utilisée.

La 'perte d'OTA' peut aussi provenir de l'interface chaise clavier qui a un moment donné a envoyé par OTA un code 'non OTA', rompant ainsi la chaîne de la mise à jour sans fil