Bonjour Jay M
Depuis votre dernier Post et après des dizaines d'essais, je suis toujours en détresse.
J'essaie de faire au plus simple et voilà où j'en suis:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 //********Réception d'un POST********* serveur.on("/GestionPost", HTTP_POST, reponseReception, nullptr, gestionReception);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 //****Gestion réception des POST****************** void gestionReception(AsyncWebServerRequest *req, uint8_t *data, size_t len, size_t index, size_t total) { if(index==0){ bodyPret = false; } if(total >=tailleMaxBody) afficErreurs(MSG14); //body too big else{ memcpy(bufBody + index,data,len); if(index + len >= total){ bufBody[total] = '\0'; bodyPret=true; nbCarRecu=len; } } }J'ai bien le message "Body reçu" -> donc "bodyPret=true;"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 void reponseReception(AsyncWebServerRequest *req) { if(bodyPret){ afficInfo(MSG15); //body received. //******************Analyse du post reçu pour la programmation******************** char dest = bufBody[0]; //destination RAM ou ROM char nProg = bufBody[1]; //N° du programme horaire char nManip; uint8_t k=0; do{ //scan les 10 manoeuvres nManip=bufBody[2+k]; //N° de la manoeuvre sélectionnée cmdCl[0] = bufBody[6+k]; //type action O/F cmdCl[1] = bufBody[3+k]; //adresse de l'équipement cmdCl[2] = bufBody[7+k]; //dizaine du taux cmdCl[3] = bufBody[8+k]; //unité du taux cmdCl[4] = bufBody[9+k]; //dizaine de l'heure cmdCl[5] = bufBody[10+k]; //unité de l'heure cmdCl[6] = bufBody[12+k]; //dizaine des minutes cmdCl[7] = bufBody[13+k]; //unité des minutes sprintf(buf0,"%i %c%c%c%c%c%c%c%c%c%c%c%c",nbCarRecu,dest,nProg,nManip,cmdCl[0],cmdCl[1],cmdCl[2],cmdCl[3],cmdCl[4],cmdCl[5],cmdCl[6],cmdCl[7],'\0'); afficInfo(buf0); //affichage 3 secondes k += 12; }while(k<122); if(dest=='O'){ cmdCl[0] = '6'; //Code de commande ecriture en SPIFFS //cmdCl[1] numéro du programme cmdCl[2] = '\0'; commandeRecu = true; } req->send(200,"Content-type: text/plain", "Ok"); } else req->send(413,"Content-type: text/plain", "NOk"); }
Dans la boucle do while j'affiche bien les 8 premiers octets puis quelques fois les 8 suivants mais après le programme se plante et l'ESP32 se réinitialise!
Je contrôle aussi que le nombre d'octets reçu est bien 122.
J'ai l'impression que c'est un problème de timing?
Dommage que je ne puisse pas utiliser Serial.print; je dois démonter l'ESP32 pour pouvoir le télécharger.
Certainement dû à la fatigue ou à la luminosité de la nuit, en le remontant j'ai décalé le chip d'un cran et il n'a pas aimé du tout. Heureusement j'en avais un deuxième pour continuer mes tribulations!
Partager