fatal error sur wemos D1 R1 wifi

bonsoir

je viens pour la première fois sur ce forum, je rencontre un problème qui même après des heures de recherche internet je ne comprends pas les état à suivre.

donc je suis débutant dans la programmation arduino et j'ai en ma possession une carte wemos d1 r1.
après avoir fait plusieurs expérience, scanner wifi, connexion et commande de LED en wifi local puis via
l'internet.
puis séparément, je me suis entrainer à faire un réseau i2C pour écran oled puis un réseau one-wire pour lire des température sur d18b20.je sur arrivé a faire les 2 en même temps. jusque la , tout va bien.

par la suite, je voulais créer un prog où je pourrai voir les températures des d18b20 sur internet en
,désoler du terme , "bricolant" tout les programmes que j'avais fait avant pour les imbriquer ensemble.
commence a être du lourd pour mon niveau!!!
mais voila, j'ai dû créer une erreur dans mon prog cependant la vérification de l'IDE est bonne.

je lance le téléversement,pas de résultat. je recharge l'exemple blynk de esp8266 pour essayer
impossible voici le erreur de l'IDE que j'ai:

Executable segment sizes:

IROM : 227612 - code in flash (default or ICACHE_FLASH_ATTR)

IRAM : 26776 / 32768 - code in IRAM (ICACHE_RAM_ATTR, ISRs...)

DATA : 1252 ) - initialized variables (global, static) in RAM/HEAP

RODATA : 672 ) / 81920 - constants (global, static) in RAM/HEAP

BSS : 24880 ) - zeroed variables (global, static) in RAM/HEAP

Le croquis utilise 256312 octets (24%) de l'espace de stockage de programmes. Le maximum est de 1044464 octets.
Les variables globales utilisent 26804 octets (32%) de mémoire dynamique, ce qui laisse 55116 octets pour les variables locales. Le maximum est de 81920 octets.
esptool.py v2.8
Serial port COM10
Connecting....
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 2c:f4:32:64:7b:3e
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Traceback (most recent call last):
File "C:\Users\poirier\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3/tools/upload.py", line 65, in
esptool.main(cmdline)
File "C:/Users/poirier/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/2.6.3/tools/esptool\esptool.py", line 2916, in main
esp.change_baud(args.baud)
File "C:/Users/poirier/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/2.6.3/tools/esptool\esptool.py", line 104, in inner
return func(*args, **kwargs)
File "C:/Users/poirier/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/2.6.3/tools/esptool\esptool.py", line 705, in change_baud
self.command(self.ESP_CHANGE_BAUDRATE, struct.pack('<II', baud, second_arg))
File "C:/Users/poirier/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/2.6.3/tools/esptool\esptool.py", line 347, in command
p = self.read()
File "C:/Users/poirier/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/2.6.3/tools/esptool\esptool.py", line 292, in read
return next(self._slip_reader)
File "C:/Users/poirier/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/2.6.3/tools/esptool\esptool.py", line 2045, in slip_reader
raise FatalError("Timed out waiting for packet %s" % waiting_for)
esptool.FatalError: Timed out waiting for packet header
esptool.FatalError: Timed out waiting for packet header


si je comprends bien:
la compilation se realise ,
puis via le port com 10 ( pilote CH340) il reconnait un ESP8266EX
features: wifi je ne sais pas a quoi sa correspond "type de composant??"
une cadence 26Mhz
l'adresse mac du composant
charge "stub" ??????????
execute "stub"??????????
"stub" en execution ?????????????
changing baud rate to 460800 ?????????? pourquoi ??????
.............plusieurs adresse de dossier.............
...............................................................
enfin fatal erreur............

si je comprends la liaison avec la carte wemos serai bonne mais pas avec l'esp8266 intégré dessus
je soupçonne un bug j'ai 2 led bleu qui reste en permanence allumé et impossible du lui envoyer quelques chose.

dans mes recherche on parle du convertisseur UART pour le pilote je suis CH340 qui normalement correspond a ma carte

j ai essayer le reset bouton ou pin pour réinitialiser l esp8266

je rappel que j'ai déjà utiliser cette carte pour me connecter a mon réseau wifi et sa fonctionnai très bien cependant avec mes bidouilles de programme j'ai bien peur d'avoir créer un bug et de pas pouvoir
m'en sortir. dans mes codes je n'ai aucun registre utiliser que des librairies

les questions que je me pose pour simplement debogger la carte:

est-il possible de rendre la carte vierge et lui renvoyer le hardware ou firmware ?(je ne sais pas lequel) je ne trouve pas de firmware dans l'IDE

comment déterminer ma panne, c'est peut être l'IDE mal paramétré ? j avoue ne pas tout comprendre dans onglet outil .

en espérant que cette petit carte n'est pas foutu

merci d'avance

En cherchant "return next(self._slip_reader)" sur gogol on trouve des réponses à ce genre de problème, mais pas vraiment d'explication. Certains disent d'appuyer sur le bouton boot lors du flashage (y en a-t-il un sur ta carte ?), d'autres de relier D3 au GND... Je te laisse lire et tester ce qui te semble adapté à ton problème.

Bonjour

En complément de la réponse de lesept

Essayer de flasher à 115200 bauds . la vitesse par défaut de 921600 bauds ne convient pas à toutes les variantes de CH340x (CH340C vs CH340G))

Dans les messages envoyés par esptool on constate que celui ci a tenté d'abaisser la valeur à 460800 bauds mais que cela n'a pas suffit.... d'où la piste du débit excessif

Pss de firmware particulier a envoyer, disons que le 'firmware' est embarqué avec le code flashé par l'IDE

Pour effacer en grande partie, envoyer un code dans le genre :

void setup() {
}
void loop() {
}

On peut aller au delà en ligne de commande avec esptool

Bonjour,

Avec les gestionnaires de carte >= 2.5.0, j'ai eu un comportement qui ressemble à votre problème (Problème flash ESp8266 - post #19).

Pour lever le doute, regardez quelle version du gestionnaire de carte ESP8266 vous utilisez (menu "outils", type de carte, puis "gestionnaire de carte". Les ESP8266 sont tout en bas).
Si vous avez un numéro de version >= 2.5.0, repassez provisoirement en 2.4.2 pour voir si le problème persiste.

Si le problème disparaît, vous avez le même problème que celui que j'ai eu.

Pour le résoudre, soit vous restez en 2.4.2 mais vous allez vous priver des nouvelles fonctions et mises à jour, soit vous prenez la dernière (2.6.3 acutellement). Si votre problème persiste :

  • appuyer sur le bouton "flash" si votre carte en a un,
  • ou mettre GPIO0 (=D3 sur les Wemos) au GND,

pendant que l'esptool demande la connection

Connecting........_<=============== Appuyer sur le bouton flash si la connection ne se fait pas

.

Bonne bidouille,

MicroQuettas

Bonjour

Un TRES GRAND merci pour toutes vos solutions. J essaie des ce soir pour voir si sa marche.
Un petit eclaircissement sur le " flashing a 115600 bauds au lieu de 960200 bauds" comment le regle t on ?

De souvenir dans l onglet outil de l'IDE je crois l avoir regler a 115200.

Est ce au niveau des port COM se reglage?

réglage dans l'IDE : Menu Outils "Upload Speed"

rebonjour

un très grand merci a tous le monde.
ma carte est debugger!!! (pour l'instant j'ai réussi a téleverser blynk)

quelques précisions que j'ai constaté

mon réglage de uplaod Speed était bien a 115200 BAUD
j'ai réinstalé esp8266 a la version 2.4.2

je televerse un croquis vierge juste avec setup et loop
sa ne fonctionne pas cependant pas les mêmes code erreur

Le croquis utilise 246084 octets (23%) de l'espace de stockage de programmes. Le maximum est de 1044464 octets.
Les variables globales utilisent 27584 octets (33%) de mémoire dynamique, ce qui laisse 54336 octets pour les variables locales. Le maximum est de 81920 octets.
Une erreur est survenue lors du transfert du croquis
Uploading 250224 bytes from C:\Users\poirier\AppData\Local\Temp\arduino_build_658448/sketch_dec17a.ino.bin to flash at 0x00000000
warning: espcomm_send_command: didn't receive command response
warning: espcomm_send_command(FLASH_DOWNLOAD_BEGIN) failed
error: espcomm_upload_mem failed

je vois "FLASH download begin" je me dis qu'il faut faire un reset avec le bouton reset
ne fonctionne pas

ou avec la pin GPIOo qui attention est la D8 sur ma carte wemos D1 R1 et je précise car sur le dessous de ma carte c'est bien marquée GPIOo en D8 et afin de verifier j'ai fais une recherche internet

et je constate qu'il existe 2 carte similaire la D1 R1 et la D1 R2 appeler NodeMCU où la GPIOo est en D3

donc je mets la D8 au GND et magie je charge un croquis vierge
donc sa va de soit avec blynk et la led clignote

j'ai retrouvé ma petite carte encore un grand merci a tous le monde

pour finir ce topic

est ce que quelqu'un pourrai m'expliquer pourquoi mettre GPIOo à la masse ?
pour commencer a comprendre comment marche ce microcontrôleur et un jour me servir des registres peut être?

rebonjour

je me disais que peut pour la wemos D1 R1 qu'il ne faut pas dépasser une certaine version de la bibliothèque ESP8266 ?

juste une petite question de plus!!! :slight_smile: :slight_smile:

merci à tous!!!!!!!

Bonsoir

A la mise sous tension , une certaine combinaison des 3 GPIO particuliers active le 'bootloader' (chargeur de programme à partir du port série + écriture en mémoire Flash)

  • GPIO 0: LOW
  • GPIO 2: HIGH
  • GPIO 15: LOW

Pour la question de la version du 'core ESP8266' je ne peux en parler n'ayant jamais rencontré le souci signalé par MIcroquettas sur la dizaine de D1 Mini ou D1 MIni Pro utilisées . (aucune D1 R1)
Les versions successives du 'core ESP8266 ont toutes fonctionné pour le flashage de mes cartes

MERCI pour cette réponse rapide

maintenant j'essaye d’effectuer un affichage oled en i2c et une lecture en 1 wire de d18b20 avec mon wemos D1 R1

le code fonction nickel sur un arduino uno classic et pour controler j affiche en plus les valeur sur l'afficheur serie de IDE

la sur le wemos avec juste le croquis pour lire les capteur en one wire voila ce que j'ai :

00:26:49.257 -> 
00:26:49.257 ->  ets Jan  8 2013,rst cause:4, boot mode:(3,6)
00:26:49.257 -> 
00:26:49.257 -> wdt reset
00:26:49.290 -> load 0x4010f000, len 1384, room 16 
00:26:49.290 -> tail 8
00:26:49.290 -> chksum 0x2d
00:26:49.290 -> csum 0x2d
00:26:49.290 -> vbb28d4a3
00:26:49.290 -> ~ld

qui ce répète continuellement. alors que sur un arduino uno classic avec le même croquis j'ai:

00:40:08.060 -> Temperatures : 22.25°C, capteur 1 : 28 AA 90 44 54 14 1 B8  
00:40:08.060 -> Temperatures : 21.62°C, capteur 2 : 28 AA 5A EF 53 14 1 60  
00:40:08.060 ->  
00:40:08.764 -> Temperatures : 22.25°C, capteur 1 : 28 AA 90 44 54 14 1 B8  
00:40:08.764 -> Temperatures : 21.62°C, capteur 2 : 28 AA 5A EF 53 14 1 60  
00:40:08.764 ->  
00:40:09.472 -> Temperatures : 22.25°C, capteur 1 : 28 AA 90 44 54 14 1 B8  
00:40:09.472 -> Temperatures : 21.62°C, capteur 2 : 28 AA 5A EF 53 14 1 60

je pense a la version librairie one-wire mais voila je ne sais pas comment interpréter les code de l'afficheur serie
idem pour realiser une comunication en i2C avec mon afficheur oled 0,91"

pour ce soir j'en reste la ,ma carte est sauve!!! un probleme de resolu!

Bonjour

00:26:49.257 ->  ets Jan  8 2013,rst cause:4, boot mode:(3,6)
00:26:49.257 -> 
00:26:49.257 -> wdt reset

Reset par le "chien de garde"

Cause probable : une boucle dans ton code mobilise à 100% le processeur et ne rends pas la main à la 'pile WiFi"
L'ESP8266 partage sont temps de travail entre ton application et le code WiFi qui doit pouvoir travailler en arriière plan pour maintenir la connection avec le point d'accès ou la station.
Une instruction delay() même de courte durée sera mise à profit par le compilateur ESP8266 pour permettre au WiFi de 'respirer'. C'est expliqué içi :Reference — ESP8266 Arduino Core 2.6.3 documentation

Les librairies OneWire et DallasTemperature sont compatibles ESP8266
https://arduino-esp8266.readthedocs.io/en/2.6.3/libraries.html#other-libraries-not-included-with-the-ide

Plus généralement LA documentation à jour du 'Core ESP8266' est içi
https://arduino-esp8266.readthedocs.io/en/2.6.3/

Merci al1fch
je pense que tu as raison il faut que je donne du temps mon code est long. Il y a pas assez de temps de pause

Pour aurjourd hui je n ai pas pu faire des essais je verrai demain

Parcontre si quelqu un avait des explications pour comprendre mes messages d erreur afin de ne pas monopoliser le forum toutes les 2 min

Un tableau pour expliquer les significations des valeur du
" chien de garde" enfin je ne sais meme pas ce que sais

Je crois devoir me pencher sur le coté matériel de cette petite carte afin de pouvoir l exploiter au mieux

J ai des choses que je ne comprends pas dans la procedure de developpement du code arduino

Comment cette petite carte fait elle pour ,dans mon projet, garder une connexion wifi, creer un reseau i2c et un reseau 1wire en même temps?

C est Surtout "en même temps " qui me derange ,
j ai du mal a comprendre le fonctionnement general en programmation du timing

J ai bien compris que le delay permet de faire soufler certaine fonction pourtant on appelle sa une fonction bloquant

On lit que pour les esp on peut utiliser yeild() qui permettrai de faire la meme chose
Meme si il est inclut dans le delay() peut etre que yeild() serai plis judicieux.

Apres je pensais utilise millis() afin deviter les fonctions bloquants

Cependant c la que je comprends pas trop comment le microcontroleur travail apres

Il fait un peu de wifi puis de i2c puis 1wire ou y a t il des sous systeme en interne qui gere le reseau i2c , le reseau 1wire et la wifi independement?

Je demande juste votre vision, votre idee sur le fonctionnement du microcontroleur de base.
En langage debutant biensur :slight_smile: :slight_smile: plutard je chercherai a appronfondir le sujet mais la j ai du mal a visualiser comment sa fonctionne ? Comment circule l information ?

Bonjour

yield() = delay(0) , synomymes,
/!\ delay() n'est pas bloquant sur ESP8266, on peut en avoir la preuve dans le code de cette fonction.
Reprendre sur ESP8266 les automatismes ('delay bloquant') acquis sur AVR est contreproductif, il faut s'adapter !

ou insérer cet intervalle de temps propice à la pile WiFi ?

If you have a loop somewhere in your sketch that takes a lot of time (>50ms) without calling

delay

, you might consider adding a call to

delay

function to keep the WiFi stack running smoothly. There is also a

yield()

function which is equivalent to

delay(0)

Source : Reference — ESP8266 Arduino Core 3.1.2-21-ga348833 documentation
Faire un courte synthèse de l'imtimité d'un ESP8266 supposerait un accès à la doc détaillée... :confused:
faire cela en 'langage débutant' en plus...... ça demande réflexion :wink:

tentative : l'ESP8266 ne posède qu'un seul coeur, par conséquent mis à part les fonctionnalités matérielles offertes par les périphériques intégrés , il ne peut faire deux choses à la fois.

Pour les besoins de continuité du WiFi le compilateur qui traite ton code insère là ou il peut des blocs d'instructions permettant d'assurer le WiFi. Pour l'aider on lui ménage par endroit des 'ouvertures' sous forme de delay() ou yield()
Faute d'avoir son 'os' à temps le chien de garde (timer) du WiFi se manifeste et resette l'ESP8266

Accepter l'idée d'une approche plus pragmatique (moins encyclopédique !!) à travers les exemples !!

Encore merci

C est bien plus clair, je comprends mieux l utilisation du delay

Donc si je comprends bien pour mon croquis
je vais essayer soit sur une autre carte ou par bout de code pour afficher les temps d execution des fonction afin de pas depasser les 50ms
J utiliserai un appel au registre du timer pour avoir le timing precis, la duree des fonction utiliser.

Donc lorsque je creer un reseau i2c l esp8266 jongle entre la wifi et i2c ?

Est ce qu il faudrai que je fasse du "multitache cooperatif ou préemtif" j ai lu une doc la dessus pour creer un timer d execution de chaque reseau( ou fonction) que je veux creer soit 3 ;
Wifi, i2c,et 1wire.
Malgré que c est tres compliqué :confused: :confused: :confused:

Le module esp gere la wifi puis stop la wifi puis fais i2c puis arret puis wifi puis i2c ........,........etc???

Non pas de multitâche à mettre en branle pour WiFI+I2C+OneWire !!

Mettre en place le WIFi, et accéder tout à tour aux composants I2C et OneWire dans la boucle loop()

Pas de contrainte temporelle serrée côté I2C et OneWire entre les octets successifs échangés, la seule contrainte est au niveau des bits formant les octets, t les librairies se chargent de cela.

Le compilateur se chargera à votre place d'assurer la continuité du WiFi sans perturber les échanges I2C et OneWire (I2C et OneWire sont des bus, pas des réseaux)
A l'échelle humaine on a l'impression que tout se passe en même temps

Plutôt que de se 'prendre la tếte' mieux vaudrait poster le code mentionné dans le message initial pour repérer le les endroits où un petit delay() ou yield() pourrait satisfaire le chien de garde du WiFi

J essaye juste de comprendre . :slight_smile: :slight_smile: :slight_smile:

Dès que j ai fini le code avec des commentaires Je le post

bonjour tous le monde :slight_smile:
je suis en vacances jusqu'à la fin de l'année je vais donc pour voir me pencher plus sur mon problème

après plusieurs essai sur mon programme de wifi avec les bus i2C et ONEWIRE (Bus et non des réseaux , c'est compris :slight_smile: :slight_smile: )

je me suis replier sur des programmes de base par exemple :
afficher sur le moniteur serie " HELLO ARDUINO WORLD" avec ce programme :

int affichageFait;

void setup() {
  Serial.begin(9600);
    affichageFait==0;
}

void loop() {
  if(affichageFait==0)
  {
  Serial.println("Hello");
  Serial.println("Arduino");
  Serial.println("World !");
  Serial.print("Hello");
  Serial.print("Arduino");
  Serial.print("World !");
  affichageFait==1;
  }
}

et voici ce qu'il m'affiche :

13:28:48.571 -> World !
13:28:48.571 -> HelloArduinoWorld !Hello
13:28:48.571 -> Arduino
13:28:48.571 -> World !
13:28:48.571 -> HelloArduinoWorld !Hello
13:28:48.611 -> Arduino
13:28:48.652 -> World !
13:28:48.652 -> HelloArduinoWorld !Hello
13:28:48.693 -> Arduino
13:28:48.693 -> World !
13:28:48.693 -> HelloArduinoWorld !Hello
13:28:48.726 -> Arduino
13:28:48.726 -> World !
13:28:48.764 -> HelloArduinoWorld !Hello
13:28:48.764 -> Arduino
13:28:48.798 -> World !
13:28:48.798 -> HelloArduinoWorld !Hello

donc j'ai bien l'affichage mais le problème c'est qu'il devrai l'afficher qu'une seul fois
car dans le croquis il y a une condition "if" si affichage =0 on affiche HELLOARDUINOWORLD et on
passe la variable affichage a l'état 1

c'est comme si il redémarre tout le temps
premier problème

second problème, c'est que je n'arrive pas a utiliser de pin pour allumer une DEL ou commander un micro relai( module avec plusieurs relais)
j'ai essaye plusieurs pin en sachant que sur le WEMOS il y a plein de pin que l'on ne peut pas ce servir pour commander quelques-chose

un simple programme avec digitalwrite HIGH ou LOW sur une pin ne fonctionne pas

voici un croquis pour commander une pin a l’état haut puis a l’état bas toute les secondes avec affichage sur le moniteur serie
voici le croquis

int pinrelais = 8;

void setup()
{
  Serial.begin(115200);

  pinMode(pinrelais, OUTPUT);
  digitalWrite(pinrelais, LOW);


}

void loop()
{
  digitalWrite(pinrelais, 1);

  Serial.print("ON--> relais ");
  delay(1000);
  digitalWrite(pinrelais, 0);
  Serial.println("OFF--> relais ");
  delay(1000);
}

et la réponse sur le moniteur serie :

13:58:03.350 -> 
13:58:03.350 ->  ets Jan  8 2013,rst cause:4, boot mode:(3,6)
13:58:03.350 -> 
13:58:03.350 -> wdt reset
13:58:03.350 -> load 0x4010f000, len 1384, room 16 
13:58:03.350 -> tail 8
13:58:03.350 -> chksum 0x2d
13:58:03.350 -> csum 0x2d
13:58:03.383 -> vbb28d4a3
13:58:03.383 -> ~ld
13:58:11.814 -> 
13:58:11.814 ->  ets Jan  8 2013,rst cause:4, boot mode:(3,6)
13:58:11.814 -> 
13:58:11.814 -> wdt reset
13:58:11.852 -> load 0x4010f000, len 1384, room 16 
13:58:11.852 -> tail 8
13:58:11.852 -> chksum 0x2d
13:58:11.852 -> csum 0x2d
13:58:11.852 -> vbb28d4a3
13:58:11.852 -> ~ld

je n'ai pas peciser peut etre avant mais je n'ai jamais utiliser le wemos pour commander quelquechose
avec les pin juste des connections a la wifi et sur le net pour faire des essais

je transmettrai dans un prochain message le reglage de l'ide (pour verifier si je suis sur la bonne carte ect)

merci d'avance a tous

Bonjour

car dans le croquis il y a une condition "if" si affichage =0 on affiche HELLOARDUINOWORLD et on
passe la variable affichage a l'état 1

  1. Non dans ton code tu ne passe pas la variable à 1 !! tu testes son égalité avec 1 en écrivant :
affichageFait==1;

2)Pour le second problème : utiliser D8 et non 8 pour référencer la broche D8 choisie (GPIO15 alias D8)

int pinrelais = D8;
// int pinrelais =15

En écrivant

int pinrelais = 8;

tu agis sur GPIO8 qui est réservé , utilisé en interne, et ne doit pas être 'titillé'

Içi la liste des GPIO et leur fonction https://www.wemos.cc/en/latest/d1/d1_mini.html,
Avec leur double apellation (Dx ou GPIOy)

Remarque : les exemples fournis avec le 'noyau ESP8266' ne sont pas inutiles !!
Les étudier et s'en inspirer fait gagner du temps.....

encore merci al1fch l'erreur d'égalité est tellement évident >:( >:( >:( >:(

sa marche super bien lorsque qu'on nomme les pin avec Dx
je n'arrive pas nommer avec GPIO enfin pas trop necessaire

je prends note pour les exemples

encore merci beaucoup

je me rends compte aussi que certaine sortie sont commune lorsque que je les appelles( c'est écrit sur la carte ) et aussi que je suis obliger de débrancher mon circuit pour téléverser

je vais faire des recherches pour bien comprendre les sortie digital de la carte type arduino wemos D1 R1

lorsque j'aurai réussi le croquis pour faire du wifi avec les bus i2C et onewire je le partagerai sur ce post