ESP32 errore: "Guru Meditation Error: Core 1 panic'ed (LoadProhibited)"

Salve a tutti.. sto cercando di passare un codice (perfettamente funzionante su arduino) su ESP32..
Purtroppo il codice sembra funzionare ma a random mi restituisce questo errore.

Guru Meditation Error: Core  1 panic'ed (LoadProhibited). Exception was unhandled.
Core 1 register dump:
PC      : 0x4000142d  PS      : 0x00060330  A0      : 0x800d0f7e  A1      : 0x3ffb1f60  
A2      : 0x3ffc00ea  A3      : 0x00000000  A4      : 0x000000ff  A5      : 0x0000ff00  
A6      : 0x00ff0000  A7      : 0xff000000  A8      : 0x00000000  A9      : 0x3ffb1f40  
A10     : 0x3ffc00ea  A11     : 0x3f4011df  A12     : 0x000000ff  A13     : 0x0000ff00  
A14     : 0x00ff0000  A15     : 0xff000000  SAR     : 0x0000000a  EXCCAUSE: 0x0000001c  
EXCVADDR: 0x00000000  LBEG    : 0x4000142d  LEND    : 0x4000143a  LCOUNT  : 0xffffffff  

Backtrace: 0x4000142d:0x3ffb1f60 0x400d0f7b:0x3ffb1f70 0x400d102c:0x3ffb1f90 0x400d197d:0x3ffb1fb0 0x40088215:0x3ffb1fd0

Rebooting...
ets Jun  8 2016 00:22:57

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1044
load:0x40078000,len:8896
load:0x40080400,len:5816
entry 0x400806ac

Dico a random perchè esegue la funzione nel loop in maniera corretta per 4-5 volte poi
mi restituisce l'errore, poi riparte con il serial begin funziona 2-3 giri errore ecc ecc..

Cercando su internet sembrava fosse un errore legato a una versione del firmware..quindi ho provato ad aggiornarlo (con notevole fatica) dovrei esser riuscito a installare la ESP32-WROOM-32_AT_Bin_V2.0
Ma non sono nemmeno sicuro che sia l'aggiornamento che suggerivano di fare perchè QUI nell'ultimo post di un anno fa
parlano di una versione 1.3.3..

io ho aggiornato solo la wroom devo aggiornare altro??
Sempre all'interno del topic parlano di "mesh.setDebugMsgTypes" ma non so cosa si tratti e se è una library nonè una library che io utilizzo nel mio sketch

Grazie mille!

Aggiungo queste informazioni che ho trovato relative al mio caso di "Guru Meditation Error"

LoadProhibited, StoreProhibited

This CPU exception happens when application attempts to read from or write to an invalid memory
 location. The address which was written/read is found in EXCVADDR register in the register dump. 
If this address is zero, it usually means that application attempted to dereference a NULL pointer. 
If this address is close to zero, it usually means that application attempted to access member of a
structure, but the pointer to the structure was NULL. If this address is something else (garbage value,
not in 0x3fxxxxxx - 0x6xxxxxxx range), it likely means that the pointer used to access the data was
either not initialized or was corrupted.

il mio EXCVADDR register è 0x00000000 quindi "application attempted to dereference a NULL pointer"

può essere un problema di codice invece che di firmware? anche se con arduino funzionava senza problemi?

ciao

dando un'occhiata in rete ho trovato diverse possibili cause...prova a postare il codice...possibili cause come variabili non dichiarate in alcune librerie; oppure errore nel riportare la funzione chiamata dalla callback etc...

Grazie mille @ORSO forse ci siamo.. sembra che sia un problema legato al puntatore della stringa
come spiegato qui.. strlen function to empty char* causes reboot - ESP32 Forum stringa viene presa dalla sim808 e è il segnale del GPS..il motivo per cui a volte da errore e a volte no può essere legato al fatto che la stringa cambia? Come mai su arduino funzionava? Come posso risolverlo?

Questo il codice..grazie mille :slight_smile:

int8_t get_GPS() {

  int8_t counter, answer;
  long previous;

  // First get the NMEA string
  // Clean the input buffer
  while ( Serial2.available() > 0) Serial2.read();
  // request Basic string
  Serial2.println("AT+CGNSINF"); //sendATcommand("AT+CGNSINF", "AT+CGNSINF\r\n\r\n", 2000);

  counter = 0;
  answer = 0;
  memset(frame, '\0', sizeof(frame));    // Initialize the string
  previous = millis();
  // this loop waits for the NMEA string
  do {

    if (Serial2.available() != 0) {
      frame[counter] = Serial2.read();
      counter++;
      // check if the desired answer is in the response of the module
      if (strstr(frame, "OK") != NULL)
      {
        answer = 1;
      }
    }
    // Waits for the asnwer with time out
  }
  while ((answer == 0) && ((millis() - previous) < 2000));
  frame[counter - 3] = '\0';

  // Parses the string
  strtok_single(frame, ": ");
  GNSSrunstatus = atoi(strtok_single(NULL, ","));;// Gets GNSSrunstatus
  Fixstatus = atoi(strtok_single(NULL, ",")); // Gets Fix status
  strcpy(UTCdatetime, strtok_single(NULL, ",")); // Gets UTC date and time
  strcpy(latitude, strtok_single(NULL, ",")); // Gets latitude
  strcpy(logitude, strtok_single(NULL, ",")); // Gets longitude
  strcpy(altitude, strtok_single(NULL, ",")); // Gets MSL altitude
  strcpy(speedOTG, strtok_single(NULL, ",")); // Gets speed over ground
  strcpy(course, strtok_single(NULL, ",")); // Gets course over ground
  fixmode = atoi(strtok_single(NULL, ",")); // Gets Fix Mode
  strtok_single(NULL, ",");
  strcpy(HDOP, strtok_single(NULL, ",")); // Gets HDOP
  strcpy(PDOP, strtok_single(NULL, ",")); // Gets PDOP
  strcpy(VDOP, strtok_single(NULL, ",")); // Gets VDOP
  strtok_single(NULL, ",");
  strcpy(satellitesinview, strtok_single(NULL, ",")); // Gets GNSS Satellites in View
  strcpy(GNSSsatellitesused, strtok_single(NULL, ",")); // Gets GNSS Satellites used
  strcpy(GLONASSsatellitesused, strtok_single(NULL, ",")); // Gets GLONASS Satellites used
  strtok_single(NULL, ",");
  strcpy(cn0max, strtok_single(NULL, ",")); // Gets C/N0 max
  strcpy(HPA, strtok_single(NULL, ",")); // Gets HPA
  strcpy(VPA, strtok_single(NULL, "\r")); // Gets VPA

  //converto stringa in numero per poterla confrontare
  longGPS = atof (logitude); 
  latGPS = atof (latitude);
       
  Serial.println("mia float latitudine");
  Serial.println(latGPS,6);
  Serial.println("mia float longitudine");
  Serial.println(longGPS,6);
  Serial.println("UTCdatetime");
  Serial.println(UTCdatetime);
  Serial.println("latitude"); 
  Serial.println(latitude);
  Serial.println("logitude");
  Serial.println(logitude);
   return answer;  
}


/* strtok_fixed - fixed variation of strtok_single */
static char *strtok_single(char *str, char const *delims)
{
    static char  *src = NULL;
    char  *p,  *ret = 0;
    if (str != NULL)
        src = str;
    if (src == NULL || *src == '\0')    // Fix 1
        return NULL;
    ret = src;                          // Fix 2
    if ((p = strpbrk(src, delims)) != NULL)
    {
        *p  = 0;
        src = ++p;
    }
    else
        src += strlen(src);
    return ret;
}

ciao,

si una delle cause che avevo trovato è anche quella del NullPointer...e se non capisco male...nel tuo caso sei messo male :smiley:
nel senso che hai sta funzione:

static char *strtok_single(char *str, char const *delims)
{
    static char  *src = NULL;
    char  *p,  *ret = 0;
    if (str != NULL)
        src = str;
    if (src == NULL || *src == '\0')    // Fix 1
        return NULL;
    ret = src;                          // Fix 2
    if ((p = strpbrk(src, delims)) != NULL)
    {
        *p  = 0;
        src = ++p;
    }
    else
        src += strlen(src);
    return ret;
}

e la invochi in questi due modi (tra i tanti):

strcpy(GLONASSsatellitesused, strtok_single(NULL, ","));
strtok_single(NULL, ",");

sinceramente mi sfugge il senso.

La uso per scomporre la stringa NMEA in varie parti per salvare i singoli parametri corrispettive stringhe..
è una funzione che ho preso da un progetto trovato su internet :(..ora vedo se trovo un altra soluzione..tipo usare la library TinyGSM.. grazie mille intanto

Ciao,

magari hai già trovato la causa del problema, ma in ogni caso ti segnalo questo plugin per Arduino dove inserisci la backtrace quando ESP32 crasha e ti restituisce il significato della stessa. Mi è stato utile in più di qualche occasione.

La uso per scomporre la stringa

questo lo avevo capito...ma se come stringa da "scomporre" gli passi NULL cosa vuoi scomporre?
Poi se la stringa da scomporre è NULL oppure è finita ritorni NULL...vedi tu.

e poi in certi punti manco lo assegni il puntatore di ritorno...

sicuramente il link suggerito da Moce993 è utilissimo per "tradurre" il listato del problema.

ORSO2001:
sicuramente il link suggerito da Moce993 è utilissimo per "tradurre" il listato del problema.

Il bello è che non si limita al file .ino ma esamina anche tutte le librerie e quindi ti indica se ci sono conflitti tra esse.

Moce993:
ti segnalo questo plugin per Arduino dove inserisci la backtrace quando ESP32 crasha e ti restituisce il significato della stessa. Mi è stato utile in più di qualche occasione.

Grazie mill ho installato il tool..domani provo a usarlo (stasera mi hanno rubato il trasformatore per alimentare il modulo sim808 mannagggggg!) ..anche se mi sa che il problema è il parsing della stringa NMEA..però utile a sapersi

Grazie ancora vi tengo aggiornati

Finalmente son riuscito a testare Exception decoder!
Riporto qui sotto il risultato..ora sto provando (senza grande successo) a usare una lirary al posto del codice che utilizzavo per fare il parsing della string NMEA.. vorrei provare a mettere mano al codice che avevo che mi da problemi ma dopo due giorni non sono ancora riuscito a capire come funziona l estrazione della stringa e il salvataggio nelle substringhe dei valori :frowning:

ciao...allora lo strumento ti dice dove c'è l'inghippo...e sono in 4 punti...molto probabilmete si genera in uno e gli altri vanno di conseguenza.
l'unico punto che posso verificare è qullo del main.cpp linea 19....in quanto è comune a tutti...gli altri sono del tuo progetto...ed infatti ha a che fare con la funzione get_GPS() dove, secondo me, c'è un bel po' di casino con stringhe, sotto stringhe e stringTokens...richiami alla funzione strtok_single() non ortodossi.

Ok grazie mille :).. avrei bisogno di un enorme aiuto.. ho provato a utilizzare delle library per ottenere il codice ma non riesco a farle girare.. inoltre mi piacerebbe molto riuscire a capire che cosa fa quel pezzo di codice tutto sbagliato che uso per ottenere il GPS e provare a aggiustarlo..

Se non ho capito male funziona così: tramite il comando "AT+CGNSINF" chiedo la stringa al mio modulo SIM808.. ma non ho capito in che variabile viene salvata questa stringa ne come viene salvata.

Poi viene fatto il parsing cioè si legge carattere per carattere la stringa, si usa la "," come elemento per
capire quando all interno della stringa si passa da un dato (es latitudine, ora ecc) al successivo.
Corretto?

L'errore è nel parsing? O in tutto? Dove viene salvata la stringa NMEA che non la trovo??????

Grazie infinite..sto impazzendo con library che nn riesco a far girare e test per trovare sta cacchio di stringa :frowning:

Nelle varie ricerche ho trovato anche questo codice molto semplice che mi stampa la stringa NMEA sul seriale..è quello che mi sembra girare meglio di tutti anche rispetto al mio vecchio.. come posso fare però partendo da qui a ottenere il char array (o la stringa non so cosa serva) per fare poi il mio parsing?

Il Parse non mi spaventa..tutto il resto mi sembra molto lontano dalle mie capacità :cold_sweat:

Grazie ancora e scusate l'imbranatezza

#define RXD2 16
#define TXD2 17
#define DEBUG true
        
void setup()
{
  Serial.begin(115200);
 Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2); 
}

void loop()
{
   getgps();
   while(1)
   {
        sendData( "AT+CGNSINF",1000,DEBUG);   
        delay(1000);
        
   }
 
}
void getgps(void)
{
   sendData( "AT+CGNSPWR=1",1000,DEBUG); 
   sendData( "AT+CGNSSEQ=RMC",1000,DEBUG); 
}


String sendData(String command, const int timeout, boolean debug)
{
    String response = "";    
    Serial2.println(command); 
    long int time = millis();   
    while( (time+timeout) > millis())
    {
      while(Serial2.available())
      {       
        char c = Serial2.read(); 
        response+=c;
      }  
    }    
    if(debug)
    {
      Serial.print(response);
    }    
    return response;
}

ciao...se posti il tuo intero programma, quello originale che include la funzione del tuo post #3, possiamo darci un occhio...

Il codice è un po'lungo percui lo allego invece di postarlo..ho cercato di commentare tutte le funzioni ma provo a spiegare qui per renderlo più chiaro.
Si tratta di un programma che utilizzo per le mie api che fa da:

  • antifurto (verifica che il sistema si trovi all'interno di un range di coordinate prestabilito e eventualmente mi avvisa con un sms
  • notifica trattamento per combattere un parassita delle api faccio un trattamento termico una volta al mese per un ora e mezza..misuro con un amperometro quando consuma energia con le dovute accortezze capisco se si tratta del trattamento e invio un SMS con l'ora di inizio e di fine
    -temperatura sistemacontollo che non si fonda tutto
    -lucecontrollo che l'arnia resti chiusa se viene aperta mando un SMS
    -ricezione SMS ho la possibilita di inviare all arduino degli SMS per sapere la "situazione" e per mettere in pausa il sistema

è un codice un po' complesso in realtà funziona tutto abbastanza bene tranne la parte del GPS
se può essere utile lo pulisco da tutta la parte che funziona e lascio solo il GPS o se serve spiego meglio anche tutto il resto..

Grazie mille per la disponibilità!

ESP32_MASTER_v2.1.ino (13.7 KB)

Posto qui la parte di codice che non funziona senza tutto il resto di codice che invece sembra funzionare senza problemi

#define RXD2 16
#define TXD2 17

char orainizio[18]; 
char orafine[18];
char frame[100];
byte GNSSrunstatus;;
byte Fixstatus;
char UTCdatetime[18];
char latitude[11];
char logitude[11];
char altitude[8];
char speedOTG[6];
char course[6];
byte fixmode;
char HDOP[4];
char PDOP[4];
char VDOP[4];
char satellitesinview[2];
char GNSSsatellitesused[2];
char GLONASSsatellitesused[2];
char cn0max[2];
char HPA[6];
char VPA[6];
float latGPS;
float longGPS;




void setup() {
  Serial.begin(115200);
  Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  Serial.println("Serial begin ok");
  //accendo il GPS
  Serial2.println("AT");
  Serial2.println("AT+CGNSPWR=1");
  delay(10000);
}

void loop() { 
  delay(10000);
  get_GPS();
}


int8_t get_GPS() {

  int8_t counter, answer;
  long previous;

  // First get the NMEA string
  // Clean the input buffer
  while ( Serial2.available() > 0) Serial2.read();
  // request Basic string
  Serial2.println("AT+CGNSINF"); //sendATcommand("AT+CGNSINF", "AT+CGNSINF\r\n\r\n", 2000);

  counter = 0;
  answer = 0;
  memset(frame, '\0', sizeof(frame));    // Initialize the string
  previous = millis();
  // this loop waits for the NMEA string
  do {

    if (Serial2.available() != 0) {
      frame[counter] = Serial2.read();
      counter++;
      // check if the desired answer is in the response of the module
      if (strstr(frame, "OK") != NULL)
      {
        answer = 1;
      }
    }
    // Waits for the asnwer with time out
  }
  while ((answer == 0) && ((millis() - previous) < 2000));
  frame[counter - 3] = '\0';

  

  // Parses the string
  strtok_single(frame, ": ");
  GNSSrunstatus = atoi(strtok_single(NULL, ","));;// Gets GNSSrunstatus
  Fixstatus = atoi(strtok_single(NULL, ",")); // Gets Fix status
  strcpy(UTCdatetime, strtok_single(NULL, ",")); // Gets UTC date and time
  strcpy(latitude, strtok_single(NULL, ",")); // Gets latitude
  strcpy(logitude, strtok_single(NULL, ",")); // Gets longitude
  strcpy(altitude, strtok_single(NULL, ",")); // Gets MSL altitude
  strcpy(speedOTG, strtok_single(NULL, ",")); // Gets speed over ground
  strcpy(course, strtok_single(NULL, ",")); // Gets course over ground
  fixmode = atoi(strtok_single(NULL, ",")); // Gets Fix Mode
  strtok_single(NULL, ",");
  strcpy(HDOP, strtok_single(NULL, ",")); // Gets HDOP
  strcpy(PDOP, strtok_single(NULL, ",")); // Gets PDOP
  strcpy(VDOP, strtok_single(NULL, ",")); // Gets VDOP
  strtok_single(NULL, ",");
  strcpy(satellitesinview, strtok_single(NULL, ",")); // Gets GNSS Satellites in View
  strcpy(GNSSsatellitesused, strtok_single(NULL, ",")); // Gets GNSS Satellites used
  strcpy(GLONASSsatellitesused, strtok_single(NULL, ",")); // Gets GLONASS Satellites used
  strtok_single(NULL, ",");
  strcpy(cn0max, strtok_single(NULL, ",")); // Gets C/N0 max
  strcpy(HPA, strtok_single(NULL, ",")); // Gets HPA
  strcpy(VPA, strtok_single(NULL, "\r")); // Gets VPA
  return answer; 


  //converto stringa in numero per poterla confrontare
  longGPS = atof (logitude); 
  latGPS = atof (latitude);
       
  Serial.println("mia float latitudine");
  Serial.println(latGPS,6);
  Serial.println("mia float longitudine");
  Serial.println(longGPS,6);
  Serial.println("UTCdatetime");
  Serial.println(UTCdatetime);
  Serial.println("latitude"); 
  Serial.println(latitude);
  Serial.println("logitude");
  Serial.println(logitude);    
}


/* strtok_fixed - fixed variation of strtok_single */
static char *strtok_single(char *str, char const *delims)
{
    static char  *src = NULL;
    char  *p,  *ret = 0;
    if (str != NULL)
        src = str;
    if (src == NULL || *src == '\0')    // Fix 1
        return NULL;
    ret = src;                          // Fix 2
    if ((p = strpbrk(src, delims)) != NULL)
    {
        *p  = 0;
        src = ++p;
    }
    //else
        //src += strlen(src);
    return ret;
}

ok ci sono (penso)...almeno a me funziona.

prova a cambiare la tua funzione get_GPS()...tutta)...con questa:

int8_t get_GPS() {

  int8_t counter, answer;
  unsigned long previous;

  // First get the NMEA string
  // Clean the input buffer
  while ( Serial2.available() > 0) Serial2.read();
  // request Basic string
  Serial2.println("AT+CGNSINF"); //sendATcommand("AT+CGNSINF", "AT+CGNSINF\r\n\r\n", 2000);

  counter = 0;
  answer = 0;
  memset(frame, '\0', sizeof(frame));    // Initialize the string
  previous = millis();
  // this loop waits for the NMEA string
  do {

    if (Serial2.available() != 0) {
      frame[counter] = Serial2.read();
      counter++;
      // check if the desired answer is in the response of the module
      if (strstr(frame, "OK") != NULL)
      {
        answer = 1;
      }
    }
    // Waits for the asnwer with time out
  }
  while ((answer == 0) && ((millis() - previous) < 2000));
  if (answer == 1) {
    frame[counter - 3] = '\0';



    // Parses the string
    strtok_single(frame, ": ");
    GNSSrunstatus = atoi(strtok_single(NULL, ","));;// Gets GNSSrunstatus
    Fixstatus = atoi(strtok_single(NULL, ",")); // Gets Fix status
    strcpy(UTCdatetime, strtok_single(NULL, ",")); // Gets UTC date and time
    strcpy(latitude, strtok_single(NULL, ",")); // Gets latitude
    strcpy(logitude, strtok_single(NULL, ",")); // Gets longitude
    strcpy(altitude, strtok_single(NULL, ",")); // Gets MSL altitude
    strcpy(speedOTG, strtok_single(NULL, ",")); // Gets speed over ground
    strcpy(course, strtok_single(NULL, ",")); // Gets course over ground
    fixmode = atoi(strtok_single(NULL, ",")); // Gets Fix Mode
    strtok_single(NULL, ",");
    strcpy(HDOP, strtok_single(NULL, ",")); // Gets HDOP
    strcpy(PDOP, strtok_single(NULL, ",")); // Gets PDOP
    strcpy(VDOP, strtok_single(NULL, ",")); // Gets VDOP
    strtok_single(NULL, ",");
    strcpy(satellitesinview, strtok_single(NULL, ",")); // Gets GNSS Satellites in View
    strcpy(GNSSsatellitesused, strtok_single(NULL, ",")); // Gets GNSS Satellites used
    strcpy(GLONASSsatellitesused, strtok_single(NULL, ",")); // Gets GLONASS Satellites used
    strtok_single(NULL, ",");
    strcpy(cn0max, strtok_single(NULL, ",")); // Gets C/N0 max
    strcpy(HPA, strtok_single(NULL, ",")); // Gets HPA
    strcpy(VPA, strtok_single(NULL, "\r")); // Gets VPA



    //converto stringa in numero per poterla confrontare
    longGPS = atof (logitude);
    latGPS = atof (latitude);

    Serial.println("mia float latitudine");
    Serial.println(latGPS, 6);
    Serial.println("mia float longitudine");
    Serial.println(longGPS, 6);
    Serial.println("UTCdatetime");
    Serial.println(UTCdatetime);
    Serial.println("latitude");
    Serial.println(latitude);
    Serial.println("logitude");
    Serial.println(logitude);
  }
  return answer;
}

poi trova le differenze. :wink:

PS:è stato molto utile sapere a cosa inviavi quel comando AT e cosa sarebbe dovuto ritornare...quindi per la prossima vilta è bene dare subito questo tipo di info. ...mi sono accorto che le info le avevi date...sono sfuggite a me.

Brutte notizie :frowning: sostituendo il codice nel progetto intero (quello con tutte le funzioni) non stampa nulla sul serial monitor.. ma nemmeno il "serial begin ok" iniziale..e nn capisco perchè visto che comunque lo compila e lo carica sulla scheda

Lo sketch usa 221329 byte (16%) dello spazio disponibile per i programmi. Il massimo è 1310720 byte.
Le variabili globali usano 15612 byte (4%) di memoria dinamica, lasciando altri 312068 byte liberi per le variabili locali. Il massimo è 327680 byte.
esptool.py v2.6
Serial port /dev/cu.SLAB_USBtoUART
Connecting........__
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
MAC: 24:6f:28:97:42:80
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 8192 bytes to 47...

Writing at 0x0000e000... (100 %)
Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.0 seconds (effective 7433.8 kbit/s)...
Hash of data verified.
Compressed 15856 bytes to 10276...

Writing at 0x00001000... (100 %)
Wrote 15856 bytes (10276 compressed) at 0x00001000 in 0.9 seconds (effective 138.9 kbit/s)...
Hash of data verified.
Compressed 221440 bytes to 114603...

Writing at 0x00010000... (14 %)
Writing at 0x00014000... (28 %)
Writing at 0x00018000... (42 %)
Writing at 0x0001c000... (57 %)
Writing at 0x00020000... (71 %)
Writing at 0x00024000... (85 %)
Writing at 0x00028000... (100 %)
Wrote 221440 bytes (114603 compressed) at 0x00010000 in 10.1 seconds (effective 174.8 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 128...

Writing at 0x00008000... (100 %)
Wrote 3072 bytes (128 compressed) at 0x00008000 in 0.0 seconds (effective 1536.0 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

mentre caricandolo nella versione leggera (chiamata qui sotto "prova")quella che ha solo la funzione per il GPS il progetto parte ma mi va subito in errore senza mai stampare i dati cosa che invece con il codice vecchio ogni tanto fa..
che scatole nn so davvero che pesci pigliare.. allego sotto progetti e report..sembra che l errore sia nella
riga 69

frame[counter] = Serial2.read();

Grazie mille per la pazienza..io ci sto impazzendo :fearful:

ESP32_MASTER_v2.1.ino (13.5 KB)

prova.ino (3.95 KB)

serial monitor di "prova".txt (1.49 KB)

Abbiamo finalmente un indizio!!!!!!! :slight_smile: :slight_smile: :slight_smile:

(Premessa il motivo per cui son passato da arduino a esp32 è perchè vorrei fare un hotspot e raccogliere dalle altre schedine esp32 dei dati che poi caricherò su un server.)

In questa versione del codice c'è anche la funzione carico con la quale apro una connessione GPRS
della SIM808 e invio una stringa con dei dati (in questa fase dati preimpostati da me) a un server dove vengono raccolti.

Bene..con questa funzione carico il progetto sembra girare perfettamente (parlo dopo 20 min di test ma di solito l'errore non tardava più di 5 min ad arrivare). Il codice per la stringa NMEA è quello vecchio che avevo nel progetto originale.

La cosa assurda è che ho caricato adesso anche il codice del post #15 quindi il mio iniziale e adesso sembra girare anche quello!! (da circa 18 minuti)

Riflessioni.. la differenza tra prima che non girava e adesso che gira è che è rimasta aperta la connessione dati GPRS. (nello sketch UPLOAD SERVER per caricare i dati accendo il GPRS sulla SIM808 e non l'ho spento quindi ora è ancora attivo anche mentre va il mio vecchio sketch)..

Cosa può voler dire???? che il problema sta nella SIM808? (però con arduino non avevo nessun problema anche senza connessione GPRS).. da cosa può essere dovuto?

Intanto grazie mille per la disponibilità! proseguo con gli esperimenti per essere sicuro che sia la connessione GPRS l'unica differenza..se avete consigli su debug che posso fare vi sono molto grato :slight_smile:

In allegato lo sketch con la parte di invio dati al server

UPLOAD_SERVER2.1.ino (14.4 KB)