Quantcast
Channel: Arduino Forum - Latest topics
Viewing all articles
Browse latest Browse all 15514

ESP32 rebooting periodically

$
0
0

Hi All,
I'm working on a project with ESP32S3 PICO where I'm integrated 2-16bit ADC (ADS1115), Dwin Display, SD card, Pendrive.

Recent Code:


It is a split file voids were splitted. but the main program is here.

//------------------------------------------------------PenDrive-I2C-Communication----------------------------------------------------------------------

#include <Ch376msc.h>
#include <SoftwareSerial.h>
SoftwareSerial Pendrive(17,18); // RX, TX
Ch376msc flashDrive(Pendrive); 
char adatBuffer[255];
char adat[]="Vivamus nec nisl molestie, blandit diam vel, varius mi. Fusce luctus cursus sapien in vulputate.\n";
char adat2[] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis efficitur ac est eu pharetra. \n";

unsigned long totSect = 0;
unsigned long freeSect = 0;
byte percentg = 0;
byte tmpCommand; //used to store data coming from serial port
boolean readMore;
static char helpString[]= {"h:Print this help\n\n1:Create\n2:Append\n3:Read\n4:Read date/time\n"
            "5:Modify date/time\n6:Delete\n7:List dir\n8:Print free space"
            "\n9:Open/Create folder(s)/subfolder(s)"};
void printInfo();

//------------------------------------------------------SD-SPI-Communication----------------------------------------------------------------------

#include "FS.h"
#include "SD.h"
#include "SPI.h"

/* Hardware SP
MOSI: 11
MISO: 13
SCK: 12
SS: 10
*/

float count = 0.067;
#define B1 14
#define B2 15
#define LEDx 16

//------------------------------------------------------SD-SPI-Communication-Voids---------------------------------------------------------------

void listDir();
void createDir();
void removeDir();
void readFile();
void writeFile();
void appendFile();
void renameFile();
void deleteFile();
void testFileIO();
void SD_Button();

//----------------------------------------------------I2C-ADC-ADS1115-Communication-------------------------------------------------------------------------

#include <Wire.h>
#define SDA0_Pin 5
#define SCL0_Pin 6

#include <Adafruit_ADS1X15.h>
Adafruit_ADS1115 ADS1;  
Adafruit_ADS1115 ADS2;

//----------------------------------------------------I2C-RTC-DS1307------------------------------------------------------------------------

#include "RTCDS1307.h"
#include <Wire.h>
#define SDA0_Pin 5
#define SCL0_Pin 6
RTCDS1307 rtc(0x68);

uint8_t year, month, weekday, day, hour, minute, second;
bool period = 0;

String m[12] = {"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"};
String w[7] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri","Sat"};
void Clock();

//------------------------------------------------UART-Dwin-Display-Serial-communication----------------------------------------------------------------

#define txPin 8
#define rxPin 7
HardwareSerial &dwinSerial = Serial2;

void FloatToHex();
void sendFloatNumber1();
void sendFloatNumber2();

//--------------------------------------------------------Dual_Core_Initialisation-------------------------------------------------------

int 
Core0_ADC_1, Core1_ADC_1, Mid_ADC_1,
Core0_ADC_2, Core1_ADC_2, Mid_ADC_2,
Core0_ADC_3, Core1_ADC_3, Mid_ADC_3,
Core0_ADC_4, Core1_ADC_4, Mid_ADC_4,
Core0_ADC_5, Core1_ADC_5, Mid_ADC_5,
Core0_ADC_6, Core1_ADC_6, Mid_ADC_6;																																					

//-------------------------------------------------Dual_Core_Locking----------------------------------------------------------------------
			   							 

//-------------------------------------------------------Overall_Initialisation------------------------------------------------------------------------------

//unsigned char Buffer[9];

byte ADC1_Off[] = { 0x5A, 0xA5, 0x05, 0x82, 0x53, 0x00, 0x01, 0x01 };
byte ADC1_Green[] = { 0x5A, 0xA5, 0x05, 0x82, 0x53, 0x00, 0x00, 0x01 };
byte ADC1_Red[] = { 0x5A, 0xA5, 0x05, 0x82, 0x53, 0x00, 0x00, 0x02 };

byte ADC2_Off[] = { 0x5A, 0xA5, 0x05, 0x82, 0x53, 0x10, 0x01, 0x01 };
byte ADC2_Green[] = { 0x5A, 0xA5, 0x05, 0x82, 0x53, 0x10, 0x00, 0x01 };
byte ADC2_Red[] = { 0x5A, 0xA5, 0x05, 0x82, 0x53, 0x10, 0x00, 0x02 };

byte ADC3_Off[] = { 0x5A, 0xA5, 0x05, 0x82, 0x53, 0x20, 0x01, 0x01 };
byte ADC3_Green[] = { 0x5A, 0xA5, 0x05, 0x82, 0x53, 0x20, 0x00, 0x01 };
byte ADC3_Red[] = { 0x5A, 0xA5, 0x05, 0x82, 0x53, 0x20, 0x00, 0x02 };

byte ADC4_Off[] = { 0x5A, 0xA5, 0x05, 0x82, 0x53, 0x30, 0x01, 0x01 };
byte ADC4_Green[] = { 0x5A, 0xA5, 0x05, 0x82, 0x53, 0x30, 0x00, 0x01 };
byte ADC4_Red[] = { 0x5A, 0xA5, 0x05, 0x82, 0x53, 0x30, 0x00, 0x02 };

byte ADC5_Off[] = { 0x5A, 0xA5, 0x05, 0x82, 0x53, 0x40, 0x01, 0x01 };
byte ADC5_Green[] = { 0x5A, 0xA5, 0x05, 0x82, 0x53, 0x40, 0x00, 0x01 };
byte ADC5_Red[] = { 0x5A, 0xA5, 0x05, 0x82, 0x53, 0x40, 0x00, 0x02 };

byte ADC6_Off[] = { 0x5A, 0xA5, 0x05, 0x82, 0x53, 0x50, 0x01, 0x01 };
byte ADC6_Green[] = { 0x5A, 0xA5, 0x05, 0x82, 0x53, 0x50, 0x00, 0x01 };
byte ADC6_Red[] = { 0x5A, 0xA5, 0x05, 0x82, 0x53, 0x50, 0x00, 0x02 };

byte Tolerance_Write[] = { 0x5A, 0xA5, 0x08, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

unsigned char incomingData[100];
unsigned char textString[100];
char receivedFloatArray[50];
float receivedFloat;
int check = 1;
float Setval_ADC1=0, Setval_ADC2=0, Setval_ADC3=0, Setval_ADC4=0, Setval_ADC5=0, Setval_ADC6=0;
int Convert1, Convert2, Convert3, Convert4, Convert5, Convert6;
float Final_ADC1, Final_ADC2, Final_ADC3, Final_ADC4, Final_ADC5, Final_ADC6;
long ADCTimer;
bool isit = true;
float tolerance = 0;
String Collect="";


//-------------------------------------------------------------Setup-----------------------------------------------------------------------------


void setup() {

  Serial.begin(115200);
  Wire.begin(SDA0_Pin, SCL0_Pin);

//------------------------Clock-RTC--------------------------

    rtc.begin();
 // rtc.setMode(0);
 // rtc.setDate(24, 3, 22);
 // rtc.setTime(11, 32, 20);

//------------------------Pendrive--------------------------

  Pendrive.begin(9600);flashDrive.init();
  printInfo(helpString);


//------------------------Display---------------------------

  dwinSerial.begin(115200, SERIAL_8N1,rxPin, txPin);
  dwinSerial.setTimeout(10);
  while (!Serial) { delay(1); }


//------------------------ADC---------------------------


  Core0_ADC_1=0; Core0_ADC_2=0; Core0_ADC_3=0; 
  Core0_ADC_4=0; Core0_ADC_5=0; Core0_ADC_6=0;


//------------------------Core_Build-------------------------

  disableCore0WDT();
  disableCore1WDT();

//-----------------------Setup_SD_Button-------------------------

{  
  pinMode(B1, INPUT_PULLUP);
  pinMode(B2, INPUT_PULLUP);
  pinMode(LEDx, OUTPUT);
  
  while(!Serial) { delay (10); }

#ifdef REASSIGN_PINS
    SPI.begin(sck, miso, mosi, cs);
#endif
    if(!SD.begin()){
        Serial.println("Card Mount Failed");
        return;
    }
    uint8_t cardType = SD.cardType();

    if(cardType == CARD_NONE){
        Serial.println("No SD card attached");
        return;
    }

    Serial.print("SD Card Type: ");
    if(cardType == CARD_MMC){
        Serial.println("MMC");
    } else if(cardType == CARD_SD){
        Serial.println("SDSC");
    } else if(cardType == CARD_SDHC){
        Serial.println("SDHC");
    } else {
        Serial.println("UNKNOWN");
    }

    uint64_t cardSize = SD.cardSize() / (1024 * 1024);
    Serial.printf("SD Card Size: %lluMB\n", cardSize);
/*
    listDir(SD, "/", 0);
    createDir(SD, "/mydir");
    listDir(SD, "/", 0);
    removeDir(SD, "/mydir");
    listDir(SD, "/", 2);
    writeFile(SD, "/hello.txt", "Hello ");
    appendFile(SD, "/hello.txt", "World!\n");
    readFile(SD, "/hello.txt");
    deleteFile(SD, "/foo.txt");
    renameFile(SD, "/hello.txt", "/foo.txt");
    readFile(SD, "/foo.txt");
    testFileIO(SD, "/test.txt");
    Serial.printf("Total space: %lluMB\n", SD.totalBytes() / (1024 * 1024));
    Serial.printf("Used space: %lluMB\n", SD.usedBytes() / (1024 * 1024));
    */  

char cstr[16];
itoa(count, cstr, 10);

float FltValue = 1.34567890;
char ChValue[10];
  dtostrf(FltValue, 10, 0, ChValue);
//dtostrf(float, minimum width, precision, character array);


    writeFile(SD, "/hello.txt", cstr);
    appendFile(SD, "/hello.txt", "\n");
    writeFile(SD, "/hello.txt", ChValue);
    readFile(SD, "/hello.txt");
}


{   
  disableCore0WDT();
  disableCore1WDT();

//------------------------ADC_16Bit-------------------------

 // ADS.setGain(GAIN_ONE);  // ADS.setGain(); ADS.setGain(GAIN_SIXTEEN);

  if (!ADS1.begin(0x48)) {
    Serial.println("1Failed to initialize ADS.");
    while (1);
  }  
  if (!ADS2.begin(0x49)) {
    Serial.println("2Failed to initialize ADS.");
    while (1);
  }
  
  delay(500);

  Core1_ADC_1=0; Core1_ADC_2=0; Core1_ADC_3=0; Core1_ADC_4=0; Core1_ADC_5=0; Core1_ADC_6=0;// Core1_ADC_7=0; Core1_ADC_8=0;
}

}


void loop() {
  fetchText();
  readADC();
  delay(20);
 // SD_Button();

}

//-------------------------------------------------------------readADC-----------------------------------------------------------------------------

void readADC() {

 ADS1.begin(0x48);
  Core0_ADC_1 = ADS1.readADC_SingleEnded(0);
  Core0_ADC_2 = ADS1.readADC_SingleEnded(1);
  Core0_ADC_3 = ADS1.readADC_SingleEnded(2);
  Core0_ADC_4 = ADS1.readADC_SingleEnded(3);

 ADS2.begin(0x49);
 Core0_ADC_5 = ADS2.readADC_SingleEnded(0);
 Core0_ADC_6 = ADS2.readADC_SingleEnded(1);
 
  if (check == 0 && isit == true) {
    if (millis() - ADCTimer > 50) {
      Convert1 = Core0_ADC_1; Convert2 = Core0_ADC_2; Convert3 = Core0_ADC_3;
      Convert4 = Core0_ADC_4; Convert5 = Core0_ADC_5; Convert6 = Core0_ADC_6;

      Serial.print(" Convert1 Reading->  ");Serial.print(Convert1);
      Serial.print(" set valout before ->  ");Serial.println(Setval_ADC1);
      Serial.println("-------------------------------------------------------"); 
      Serial.print(" convert1 before ->  ");Serial.println(Convert1);

      Final_ADC1 = map(Convert1, 20, 17654, 1105, 0);
      Final_ADC1 = (Final_ADC1 / 100);
      Setval_ADC1 = Final_ADC1;

      Final_ADC2 = map(Convert2, 20, 17654, 1105, 0);
      Final_ADC2 = (Final_ADC2 / 100);
      Setval_ADC2 = Final_ADC2;

      Final_ADC3 = map(Convert3, 20, 17654, 1105, 0);
      Final_ADC3 = (Final_ADC3 / 100);
      Setval_ADC3 = Final_ADC3;

      Final_ADC4 = map(Convert4, 20, 17654, 1105, 0);
      Final_ADC4 = (Final_ADC4 / 100);
      Setval_ADC4 = Final_ADC4;

      Final_ADC5 = map(Convert5, 20, 17654, 1105, 0);
      Final_ADC5 = (Final_ADC5 / 100);
      Setval_ADC5 = Final_ADC5;

      Final_ADC6 = map(Convert6, 20, 17654, 1105, 0);
      Final_ADC6 = (Final_ADC6 / 100);
      Setval_ADC6 = Final_ADC6;
   
      ADCTimer = millis();
      check = 1;
    }
  }

  if (millis() - ADCTimer > 50) {

      Convert1 = Core0_ADC_1; Convert2 = Core0_ADC_2; Convert3 = Core0_ADC_3;
      Convert4 = Core0_ADC_4; Convert5 = Core0_ADC_5; Convert6 = Core0_ADC_6;

      Final_ADC1 = map(Convert1, 20, 17654, 1105, 0);
      Final_ADC1 = (Final_ADC1 / 100) - Setval_ADC1;
      Final_ADC2 = map(Convert2, 20, 17654, 1105, 0);
      Final_ADC2 = (Final_ADC2 / 100) - Setval_ADC2;
      Final_ADC3 = map(Convert3, 20, 17654, 1105, 0);
      Final_ADC3 = (Final_ADC3 / 100) - Setval_ADC3;
      Final_ADC4 = map(Convert4, 20, 17654, 1105, 0);
      Final_ADC4 = (Final_ADC4 / 100) - Setval_ADC4;
      Final_ADC5 = map(Convert5, 20, 17654, 1105, 0);
      Final_ADC5 = (Final_ADC5 / 100) - Setval_ADC5;
      Final_ADC6 = map(Convert6, 20, 17654, 1105, 0);
      Final_ADC6 = (Final_ADC6 / 100) - Setval_ADC6;

  //  Serial.println(tolerance);

    if (tolerance > 0 && tolerance < 10 ) {

//-----------------------------Display_Signal_ADC1-----------------------------

      if (tolerance / 2 > abs(Final_ADC1) && tolerance / 2 != abs(Final_ADC1)) {
        Serial.println("ookkk");
        dwinSerial.write(ADC1_Green, sizeof(ADC1_Green));
      }
      if (tolerance / 2 <= abs(Final_ADC1)) {
        Serial.println("Nooooooooooooooooooo");
        dwinSerial.write(ADC1_Red, sizeof(ADC1_Red));
      }

//-----------------------------Display_Signal_ADC2-----------------------------

      
      if (tolerance / 2 > abs(Final_ADC2) && tolerance / 2 != abs(Final_ADC2)) {
        Serial.println("ookkk");
        dwinSerial.write(ADC2_Green, sizeof(ADC2_Green));
      }
      if (tolerance / 2 <= abs(Final_ADC2)) {
        Serial.println("Nooooooooooooooooooo");
        dwinSerial.write(ADC2_Red, sizeof(ADC2_Red));
      }

//-----------------------------Display_Signal_ADC3-----------------------------

      if (tolerance / 2 > abs(Final_ADC3) && tolerance / 2 != abs(Final_ADC3)) {
        Serial.println("ookkk");
        dwinSerial.write(ADC3_Green, sizeof(ADC3_Green));
      }
      if (tolerance / 2 <= abs(Final_ADC1)) {
        Serial.println("Nooooooooooooooooooo");
        dwinSerial.write(ADC3_Red, sizeof(ADC3_Red));
      }

//-----------------------------Display_Signal_ADC4-----------------------------

      if (tolerance / 2 > abs(Final_ADC4) && tolerance / 2 != abs(Final_ADC4)) {
        Serial.println("ookkk");
        dwinSerial.write(ADC4_Green, sizeof(ADC4_Green));
      }
      if (tolerance / 2 <= abs(Final_ADC4)) {
        Serial.println("Nooooooooooooooooooo");
        dwinSerial.write(ADC4_Red, sizeof(ADC4_Red));
      }

//-----------------------------Display_Signal_ADC5-----------------------------

      if (tolerance / 2 > abs(Final_ADC5) && tolerance / 2 != abs(Final_ADC5)) {
        Serial.println("ookkk");
        dwinSerial.write(ADC5_Green, sizeof(ADC5_Green));
      }
      if (tolerance / 2 <= abs(Final_ADC5)) {
        Serial.println("Nooooooooooooooooooo");
        dwinSerial.write(ADC5_Red, sizeof(ADC5_Red));
      }

//-----------------------------Display_Signal_ADC6-----------------------------

      if (tolerance / 2 > abs(Final_ADC6) && tolerance / 2 != abs(Final_ADC6)) {
        Serial.println("ookkk");
        dwinSerial.write(ADC6_Green, sizeof(ADC6_Green));
      }
      if (tolerance / 2 <= abs(Final_ADC6)) {
        Serial.println("Nooooooooooooooooooo");
        dwinSerial.write(ADC6_Red, sizeof(ADC6_Red));
      }

    }
    sendFloatTolerance(tolerance);
    sendFloatADC1(Final_ADC1); 
    sendFloatADC2(Final_ADC2); 
    sendFloatADC3(Final_ADC3); 
    sendFloatADC4(Final_ADC4); 
    sendFloatADC5(Final_ADC5); 
    sendFloatADC6(Final_ADC6); 
    ADCTimer = millis();
  }
 //delay(500);
}
//-------------------------------------------------------------fetchText-----------------------------------------------------------------------------


void fetchText() {
  if (dwinSerial.available() > 0) {
  Collect = dwinSerial.readString();
  receivedFloat = atof(Collect.c_str());
         dwinSerial.write(Tolerance_Write, sizeof(Tolerance_Write));
      if (receivedFloat == 0) { check = receivedFloat;  }
      if (receivedFloat > 0) { tolerance = receivedFloat; }
      Serial.print("Received float");
      Serial.println(receivedFloat, 2);
  }
  else{}
}

This program is working perfectly as I planned for 5 minutes and reboots automatically when i use the below board setting.

Then, i changed the board setting as below, Now the program runs perfectly for ardoung 50 mins and reboots automatically.

The reboot message is,


abort() was called at PC 0x4201f91b on core 0


Backtrace: 0x40377fb2:0x3fcebd00 0x4037b435:0x3fcebd20 0x40380c91:0x3fcebd40 0x4201f91b:0x3fcebdc0 0x4201f962:0x3fcebde0 0x4201f56d:0x3fcebe00 0x4201f3a4:0x3fcebe20 0x42006225:0x3fcebe40 0x420029a3:0x3fcebe60 0x42002f42:0x3fcebe90 0x420096c5:0x3fcebeb0


ELF file SHA256: d8317379328ebdb8

Rebooting...
ESP-ROM:esp32s3-20210327
Build:Mar 27 2021
rst:0xc (RTC_SW_CPU_RST),boot:0x2b (SPI_FAST_FLASH_BOOT)
Saved PC:0x40377bc0
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fce3808,len:0x44c
load:0x403c9700,len:0xbd8
load:0x403cc700,len:0x2a80
entry 0x403c98d0




When I tried to extract the message using Exception Decoder, I got the message below.


PC: 0x40377bc0: esp_restart_noos at /Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/esp_system/port/soc/esp32s3\system_internal.c:151

Decoding stack results
0x40377fb2: panic_abort at /Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/esp_system\panic.c:408
0x4037b435: esp_system_abort at /Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/esp_system\esp_system.c:137
0x40380c91: abort at /Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/newlib\abort.c:46
0x4201f91b: __cxxabiv1::__terminate(void at *)()) (/builds/idf/crosstool-NG/.build/HOST-x86_64-w64-mingw32/xtensa-esp32s3-elf/src/gcc/libstdc++-v3/libsupc++\eh_terminate.cc:47
0x4201f962: std::terminate() at /builds/idf/crosstool-NG/.build/HOST-x86_64-w64-mingw32/xtensa-esp32s3-elf/src/gcc/libstdc++-v3/libsupc++\eh_terminate.cc:57
0x4201f56d: __cxxabiv1::__cxa_allocate_exception(std::size_t) at /builds/idf/crosstool-NG/.build/HOST-x86_64-w64-mingw32/xtensa-esp32s3-elf/src/gcc/libstdc++-v3/libsupc++\eh_alloc.cc:300
0x4201f3a4:  is in operator new(unsigned int) (/builds/idf/crosstool-NG/.build/HOST-x86_64-w64-mingw32/xtensa-esp32s3-elf/src/gcc/libstdc++-v3/libsupc++/new_op.cc:54).
0x42006225:  is in Adafruit_ADS1X15::begin(unsigned char, TwoWire*) (c:\Users\murug\OneDrive\Documents\Arduino\libraries\Adafruit_ADS1X15\Adafruit_ADS1X15.cpp:66).
0x420029a3: readADC() at H:\Personal\Industry_Automation\dualx\upgradingxxx_Single_Core\upgradingxxx_Single_Core.ino:296
0x42002f42: loop() at H:\Personal\Industry_Automation\dualx\upgradingxxx_Single_Core\upgradingxxx_Single_Core.ino:280
0x420096c5: loopTask(void*) at C:\Users\murug\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.14\cores\esp32\main.cpp:50

I dont get it.
Can someone please explain what error it is?
How is it related to board configuration?
How to resolve it?

7 posts - 3 participants

Read full topic


Viewing all articles
Browse latest Browse all 15514