Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

boot crash: /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/freertos/queue.c:1442 (xQueueGenericReceive)- assert failed! #3467

Closed
jdpnlapperry1 opened this issue Nov 9, 2019 · 9 comments
Labels
Status: Stale Issue is stale stage (outdated/stuck)

Comments

@jdpnlapperry1
Copy link

I am setting up a new Arduino ESP32 Feather board with BME680 sensor. The sample sketches I tried are working, and I have started to adapt the sample code.

My code compiles fine, but crashes with the following output:

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
/home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/freertos/queue.c:1442 (xQueueGenericReceive)- assert failed!
abort() was called at PC 0x40089019 on core 1

Backtrace: 0x4008cc18:0x3ffb1db0 0x4008ce49:0x3ffb1dd0 0x40089019:0x3ffb1df0 0x4014780a:0x3ffb1e30 0x40147ae6:0x3ffb1e50 0x40136708:0x3ffb1e70 0x40136771:0x3ffb1e90 0x4013dcc9:0x3ffb1eb0 0x4013dcee:0x3ffb1ed0 0x40136567:0x3ffb1ef0 0x400d6bb7:0x3ffb1f10 0x400d14ac:0x3ffb1f80 0x400d7483:0x3ffb1fb0 0x4008932d:0x3ffb1fd0

Rebooting...

I installed the Exception Decoder in the Arduino IDE and get the following:

Decoding stack results
0x4008cc18: invoke_abort at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/esp32/panic.c line 155
0x4008ce49: abort at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/esp32/panic.c line 170
0x40089019: xQueueGenericReceive at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/freertos/queue.c line 1442
0x4014780a: sys_mutex_lock at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/lwip/port/esp32/freertos/sys_arch.c line 78
0x40147ae6: sys_arch_protect at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/lwip/port/esp32/freertos/sys_arch.c line 469
0x40136708: do_memp_malloc_pool at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/lwip/lwip/src/core/memp.c line 302
0x40136771: memp_malloc at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/lwip/lwip/src/core/memp.c line 398
0x4013dcc9: udp_new at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/lwip/lwip/src/core/udp.c line 1145
0x4013dcee: udp_new_ip_type at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/lwip/lwip/src/core/udp.c line 1177
0x40136567: sntp_init at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/lwip/lwip/src/apps/sntp/sntp.c line 547
0x400d6bb7: configTime at /Users/awsjames/Library/Arduino15/packages/esp32/hardware/esp32/1.0.4/cores/esp32/esp32-hal-time.c line 55
0x400d14ac: setup() at /Users/awsjames/Desktop/IoT Downloads/bme680test/bme680test.ino line 93
0x400d7483: loopTask(void*) at /Users/awsjames/Library/Arduino15/packages/esp32/hardware/esp32/1.0.4/cores/esp32/main.cpp line 14
0x4008932d: vPortTaskWrapper at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/freertos/port.c line 143

Here is the current code:
//INCLUDES FOR ESP32 FEATHER + BME680 TEST TO FUNCTION PROPERLY
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"

//ADDITIONAL INCLUDES FOR AWS IOT INTEGRATION
//#include <WiFiAP.h> //Code won't compile with this include file...
#include <WiFiMulti.h>
#include <WiFiUdp.h>
#include <WiFiScan.h>
#include <ETH.h>
#include <WiFiClient.h>
#include <WiFiSTA.h>
#include <WiFiServer.h>
#include <WiFiType.h>
#include <WiFiGeneric.h>
#include <ArduinoJson.h>
#include <AWS_IOT.h>
#include <WiFi.h>
#include "time.h"
#include <string.h>

//CONFIGURATION FOR BME680 SENSOR USING SPI
#define BME_SCK 5
#define BME_MISO 19
#define BME_MOSI 18
#define BME_CS 21
struct tm timeinfo;

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME680 bme(BME_CS); // hardware SPI

AWS_IOT sensor;

//Defining parameters for connecting to Wifi and AWS
char WIFI_SSID[]="";
char WIFI_PASSWORD[]="
";
char HOST_ADDRESS[]="*****";
char CLIENT_ID[]= "testclient";
char TOPIC_NAME[]= "iot/test";
char curtime [50];

//timer
int status = WL_IDLE_STATUS;
int tick=0,msgCount=0,msgReceived = 0;
char payload[512];
char rcvdPayload[512];

//Defining Time variables
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = -28800;
const int daylightOffset_sec = 3600;

//Air quality variable
float hum_weighting = 0.25; // so hum effect is 25% of the total air quality score
float gas_weighting = 0.75; // so gas effect is 75% of the total air quality score

float hum_score, gas_score;
float gas_reference = 250000;
float hum_reference = 40;
int getgasreference_count = 0;

void mySubCallBackHandler (char *topicName, int payloadLen, char *payLoad)
{
strncpy(rcvdPayload,payLoad,payloadLen);
rcvdPayload[payloadLen] = 0;
msgReceived = 1;
}

void GetGasReference(){
// Now run the sensor for a burn-in period, then use combination of relative humidity and gas resistance to estimate indoor air quality as a percentage.
Serial.println("Getting a new gas reference value");
int readings = 10;
for (int i = 0; i <= readings; i++){ // read gas for 10 x 0.150mS = 1.5secs
gas_reference += bme.readGas();
}
gas_reference = gas_reference / readings;
}

void setup() {
Serial.begin(115200);
while (!Serial);
delay(2000);

if (!bme.begin()) {
Serial.println("Could not find a valid BME680 sensor, check wiring!");
while (1);
}

//init and get the time
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);

// Set up oversampling and filter initialization
bme.setTemperatureOversampling(BME680_OS_2X);
bme.setHumidityOversampling(BME680_OS_2X);
bme.setPressureOversampling(BME680_OS_2X);
bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
bme.setGasHeater(320, 150); // 320*C for 150 ms

while (status != WL_CONNECTED)
{
Serial.print("Attempting to connect to SSID: ");
Serial.println(WIFI_SSID);
// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
status = WiFi.begin(WIFI_SSID, WIFI_PASSWORD);

  // wait 5 seconds for connection:
  delay(5000);

}

Serial.println("Connected to wifi");

if(sensor.connect(HOST_ADDRESS,CLIENT_ID)== 0)
{
Serial.println("Connected to AWS");
delay(1000);

  if(0==sensor.subscribe(TOPIC_NAME,mySubCallBackHandler))
  {
      Serial.println("Subscribe Successfull");
  }
  else
  {
      Serial.println("Subscribe Failed, Check the Thing Name and Certificates");
      while(1);
  }

}
else
{
Serial.println("AWS connection failed, Check the HOST Address");
while(1);
}

delay(2000);

}

void loop() {
if (! bme.performReading()) {
Serial.println("Failed to perform reading :(");
return;
}

//Calculate humidity contribution to IAQ index
float current_humidity = bme.readHumidity();
if (current_humidity >= 38 && current_humidity <= 42)
  hum_score = 0.25*100; // Humidity +/-5% around optimum 
else
{ //sub-optimal
  if (current_humidity < 38) 
    hum_score = 0.25/hum_reference*current_humidity*100;
  else
  {
    hum_score = ((-0.25/(100-hum_reference)*current_humidity)+0.416666)*100;
  }
}

//Calculate gas contribution to IAQ index
float gas_lower_limit = 5000;   // Bad air quality limit
float gas_upper_limit = 50000;  // Good air quality limit 
if (gas_reference > gas_upper_limit) gas_reference = gas_upper_limit; 
if (gas_reference < gas_lower_limit) gas_reference = gas_lower_limit;
gas_score = (0.75/(gas_upper_limit-gas_lower_limit)*gas_reference -(gas_lower_limit*(0.75/(gas_upper_limit-gas_lower_limit))))*100;

//Combine results for the final IAQ index value (0-100% where 100% is good quality air)
float air_quality_score = hum_score + gas_score;

StaticJsonBuffer<1000> JSONbuffer;
JsonObject& JSONencoder = JSONbuffer.createObject();

if(tick >= 15)   // publish to topic every 15seconds
{
    tick=0;
    if(!getLocalTime(&timeinfo)){
    Serial.println("Failed to obtain time");
    }
    strftime(curtime, sizeof(curtime), "%B %d %Y %H:%M:%S", &timeinfo);

    JSONencoder["DeviceID"] = "NYC001";
    JSONencoder["Date"] = curtime;
    JSONencoder["AQI"] = int((100 - air_quality_score) * 5);
    JSONencoder["Temperature"] = bme.temperature;
    JSONencoder["Pressure"] = bme.pressure / 100.0;
    JSONencoder["Humidity"] = bme.humidity;
    JSONencoder["Gas"] = bme.gas_resistance / 1000.0;

    char JSONmessageBuffer[1000];
    JSONencoder.printTo(JSONmessageBuffer, sizeof(JSONmessageBuffer));
    Serial.println("Sending message to MQTT topic..");
    Serial.println(JSONmessageBuffer);
    
    if(sensor.publish(TOPIC_NAME,JSONmessageBuffer) == 0)
    {        
        Serial.print("Publish Message:");
        Serial.println(JSONmessageBuffer);
    }
    else
    {
        Serial.println("Publish failed");
        tick = 15;
    }
  
}  
vTaskDelay(1000 / portTICK_RATE_MS); 
tick++;

}

I am not a developer and am trying to hack my way through fixing this. Any help would greatly be appreciated!

@lbernstone
Copy link
Contributor

You cannot call configTime until WiFi has been initialized.

@jdpnlapperry1
Copy link
Author

lbernstone: Thank You! Thank You! Thank You! That was the issue...

@lbernstone
Copy link
Contributor

It is there in the traceback if you know how to read it. Please close the issue.

@stale
Copy link

stale bot commented Jan 8, 2020

[STALE_SET] This issue has been automatically marked as stale because it has not had recent activity. It will be closed in 14 days if no further activity occurs. Thank you for your contributions.

@stale stale bot added the Status: Stale Issue is stale stage (outdated/stuck) label Jan 8, 2020
@stale
Copy link

stale bot commented Jan 22, 2020

[STALE_DEL] This stale issue has been automatically closed. Thank you for your contributions.

@ro85ac
Copy link

ro85ac commented Oct 4, 2020

You cannot call configTime until WiFi has been initialized.

@lbernstone

This issue happens also when i am using sim7000g. What should I modify to make it working?

SIM7000G_Azure_MQTT.txt

@lbernstone
Copy link
Contributor

f41beb9

@ro85ac
Copy link

ro85ac commented Oct 4, 2020

@lbernstone

I've made the modification you've suggested, but I still receive the same error.

I also added "WiFi.mode(WIFI_MODE_AP);" just before "if (!Esp32MQTTClient_Init((const uint8_t*)connectionString))" and the last thing I see in the monitor is "Info: Initializing SNTP".

PS. I also modified sntp_lwip.c

I added "#include "tcpip_adapter.h" and
int SNTP_Init()
{
LogInfo("Initializing SNTP");
tcpip_adapter_init(); // Should not hurt anything if already inited
sntp_setoperatingmode(SNTP_OPMODE_POLL);

and remains here, just like adding "WiFi.mode(WIFI_MODE_AP);"

Probably SNTP is waiting for the WiFi connection to be ready and I am using the GSM.

@ro85ac
Copy link

ro85ac commented Oct 6, 2020

@lbernstone

I've made the modification you've suggested, but I still receive the same error.

I also added "WiFi.mode(WIFI_MODE_AP);" just before "if (!Esp32MQTTClient_Init((const uint8_t*)connectionString))" and the last thing I see in the monitor is "Info: Initializing SNTP".

PS. I also modified sntp_lwip.c

I added "#include "tcpip_adapter.h" and
int SNTP_Init()
{
LogInfo("Initializing SNTP");
tcpip_adapter_init(); // Should not hurt anything if already inited
sntp_setoperatingmode(SNTP_OPMODE_POLL);

and remains here, just like adding "WiFi.mode(WIFI_MODE_AP);"

Probably SNTP is waiting for the WiFi connection to be ready and I am using the GSM.

Indeed the problem is not the Azure MQTT client. Although the modem is connected to internet and I obtain an IP, the whole connection process is not completed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Status: Stale Issue is stale stage (outdated/stuck)
Projects
None yet
Development

No branches or pull requests

3 participants