Firebase-ESP32: "Connection lost" and "connection refused" errors when Firebase related code runs on 2 cores

Hello,

When I run my code related to Firebase by default on Core 1, everything works normal, but when I put some code related to Firebase on Core 0, I receive errors in Serial related to Firebase. See my code below.

18:42:33.316 -> connection lost
18:44:46.416 -> connection refused

IDE and its version:

  • Arduino
  • 1.8.10
  • FirebaseESP32 3.5.9/3.6.2

This code runs on Core 1 by default and works OK:


void setup() {
...
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH); 
Firebase.setReadTimeout(firebaseData, 1000 * 60);
Firebase.setwriteSizeLimit(firebaseData, "tiny");
...
}

void Callback1() {
...
if (inValue.find("SomeString") != -1) {
          Do some stuff;
          Firebase.setString(firebaseData, "/Path", "SomeValue");
        }
        else if (inValue.find("("SomeOtherString") ") != -1) {
          Do some other stuff;
          Firebase.setString(firebaseData, "/Path", "SomeValue2");
        }
}

void loop() {
if (!Firebase.readStream(firebaseData))
{
  Serial.println(firebaseData.errorReason());
}

if (firebaseData.streamTimeout())
{
  Serial.println("Stream timeout, resume streaming...");
  Serial.println();
}

if (firebaseData.streamAvailable())
{
    RemoteData = firebaseData.stringData();  
    if RemoteData == "Value1") {
      Do some stuff;
    }
    else if RemoteData == "Value2") {
      Do some other stuff;
    }
    else {
      Serial.println("Wrong Data!");
    }
}

Callback1, setup() run on default Core 1, Task1code runs on Core 0. The difference with the code I’ve posted earlier - code is moved from loop() to Task1:


void setup()
{
...
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH); 
Firebase.setReadTimeout(firebaseData, 1000 * 60);
Firebase.setwriteSizeLimit(firebaseData, "tiny");

xTaskCreatePinnedToCore(
                    Task1code,   /* Task function. */
                    "Task1",     /* name of task. */
                    10000,       /* Stack size of task */
                    NULL,        /* parameter of the task */
                    1,           /* priority of the task */
                    &Task1,      /* Task handle to keep track of created task */
                    0);          /* pin task to core 0 */                  
  delay(500); 
...
}

void Callback1() {
...
if (inValue.find("SomeString") != -1) {
          Do some stuff;
          Firebase.setString(firebaseData, "/Path", "SomeValue");
        }
        else if (inValue.find("("SomeOtherString") ") != -1) {
          Do some other stuff;
          Firebase.setString(firebaseData, "/Path", "SomeValue2");
        }

}

void Task1code( void * pvParameters ){
if (!Firebase.readStream(firebaseData))
{
  Serial.println(firebaseData.errorReason());
}

if (firebaseData.streamTimeout())
{
  Serial.println("Stream timeout, resume streaming...");
  Serial.println();
}

if (firebaseData.streamAvailable())
{
RemoteData = firebaseData.stringData();  
    if RemoteData == "Value1") {
      Do some stuff;
    }
    else if RemoteData == "Value2") {
      Do some other stuff;
    }
    else {
      Serial.println("Wrong Data!");
    }
}

void loop() {
}

About this issue

  • Original URL
  • State: closed
  • Created 4 years ago
  • Comments: 19 (10 by maintainers)

Most upvoted comments

@mobizt thanks, I uploaded the SSL domain certificate of my database url and it worked.