Problems with Rainmaker

Dear All,

I'm trying to create an example of seeing the temperature and humidity in the rainmaker, but after programming the ESP it always stays in this state:

rst:0x3 (SW_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: 0x3fff0030, len:1448
load: 0x40078000, 1en:14844
ho 0 tail 12 room 4
load: 0x40080400, len:4
load: 0x40080404, len: 3356
entry 0x4008059c
ets Jul 29 2019 12:21:46

This state is always in a loop.
Can you help me, because in examples it seems easy and there is no clue to solve it.

I'm using the 2.3.3 IDE version.

Thanks in advance,
José

Line 42. That's where the error is.

Did you long-press the boot button?

No! But the chip program correctly.
I will try to do it and check

Thanks,

In line 42 I have the following:

//OneWire oneWire(27);

The instruction are commented.

BR,

1 Like

He was being sarcastic about line 42. The problem is that you did not post your code so nobody can see it and help you.

I make my code, but I also try with the Rainmaker costum example:

//This example demonstrates the ESP RainMaker with a custom device
#include "RMaker.h"
#include "WiFi.h"
#include "WiFiProv.h"

#define DEFAULT_POWER_MODE   true
#define DEFAULT_DIMMER_LEVEL 50
const char *service_name = "PROV_1234";
const char *pop = "abcd1234";

//GPIO for push button
#if CONFIG_IDF_TARGET_ESP32C3
static int gpio_0 = 9;
static int gpio_dimmer = 7;
#else
//GPIO for virtual device
static int gpio_0 = 0;
static int gpio_dimmer = 16;
#endif

bool dimmer_state = true;

// The framework provides some standard device types like switch, lightbulb, fan, temperature sensor.
// But, you can also define custom devices using the 'Device' base class object, as shown here
static Device *my_device = NULL;

// WARNING: sysProvEvent is called from a separate FreeRTOS task (thread)!
void sysProvEvent(arduino_event_t *sys_event) {
  switch (sys_event->event_id) {
    case ARDUINO_EVENT_PROV_START:
#if CONFIG_IDF_TARGET_ESP32S2
      Serial.printf("\nProvisioning Started with name \"%s\" and PoP \"%s\" on SoftAP\n", service_name, pop);
      printQR(service_name, pop, "softap");
#else
      Serial.printf("\nProvisioning Started with name \"%s\" and PoP \"%s\" on BLE\n", service_name, pop);
      printQR(service_name, pop, "ble");
#endif
      break;
    case ARDUINO_EVENT_PROV_INIT:         wifi_prov_mgr_disable_auto_stop(10000); break;
    case ARDUINO_EVENT_PROV_CRED_SUCCESS: wifi_prov_mgr_stop_provisioning(); break;
    default:                              ;
  }
}

void write_callback(Device *device, Param *param, const param_val_t val, void *priv_data, write_ctx_t *ctx) {
  const char *device_name = device->getDeviceName();
  const char *param_name = param->getParamName();

  if (strcmp(param_name, "Power") == 0) {
    Serial.printf("Received value = %s for %s - %s\n", val.val.b ? "true" : "false", device_name, param_name);
    dimmer_state = val.val.b;
    (dimmer_state == false) ? digitalWrite(gpio_dimmer, LOW) : digitalWrite(gpio_dimmer, HIGH);
    param->updateAndReport(val);
  } else if (strcmp(param_name, "Level") == 0) {
    Serial.printf("\nReceived value = %d for %s - %s\n", val.val.i, device_name, param_name);
    param->updateAndReport(val);
  }
}

void setup() {
  Serial.begin(115200);
  pinMode(gpio_0, INPUT);
  pinMode(gpio_dimmer, OUTPUT);
  digitalWrite(gpio_dimmer, DEFAULT_POWER_MODE);

  Node my_node;
  my_node = RMaker.initNode("ESP RainMaker Node");
  my_device = new Device("Dimmer", "custom.device.dimmer", &gpio_dimmer);
  if (!my_device) {
    return;
  }
  //Create custom dimmer device
  my_device->addNameParam();
  my_device->addPowerParam(DEFAULT_POWER_MODE);
  my_device->assignPrimaryParam(my_device->getParamByName(ESP_RMAKER_DEF_POWER_NAME));

  //Create and add a custom level parameter
  Param level_param("Level", "custom.param.level", value(DEFAULT_DIMMER_LEVEL), PROP_FLAG_READ | PROP_FLAG_WRITE);
  level_param.addBounds(value(0), value(100), value(1));
  level_param.addUIType(ESP_RMAKER_UI_SLIDER);
  my_device->addParam(level_param);

  my_device->addCb(write_callback);

  //Add custom dimmer device to the node
  my_node.addDevice(*my_device);

  //This is optional
  RMaker.enableOTA(OTA_USING_TOPICS);
  //If you want to enable scheduling, set time zone for your region using setTimeZone().
  //The list of available values are provided here https://rainmaker.espressif.com/docs/time-service.html
  // RMaker.setTimeZone("Asia/Shanghai");
  // Alternatively, enable the Timezone service and let the phone apps set the appropriate timezone
  RMaker.enableTZService();

  RMaker.enableSchedule();

  RMaker.enableScenes();

  RMaker.start();

  WiFi.onEvent(sysProvEvent);  // Will call sysProvEvent() from another thread.
#if CONFIG_IDF_TARGET_ESP32S2
  WiFiProv.beginProvision(WIFI_PROV_SCHEME_SOFTAP, WIFI_PROV_SCHEME_HANDLER_NONE, WIFI_PROV_SECURITY_1, pop, service_name);
#else
  WiFiProv.beginProvision(WIFI_PROV_SCHEME_BLE, WIFI_PROV_SCHEME_HANDLER_FREE_BTDM, WIFI_PROV_SECURITY_1, pop, service_name);
#endif
}

void loop() {
  if (digitalRead(gpio_0) == LOW) {  //Push button pressed

    // Key debounce handling
    delay(100);
    int startTime = millis();
    while (digitalRead(gpio_0) == LOW) {
      delay(50);
    }
    int endTime = millis();

    if ((endTime - startTime) > 10000) {
      // If key pressed for more than 10secs, reset all
      Serial.printf("Reset to factory.\n");
      RMakerFactoryReset(2);
    } else if ((endTime - startTime) > 3000) {
      Serial.printf("Reset Wi-Fi.\n");
      // If key pressed for more than 3secs, but less than 10, reset Wi-Fi
      RMakerWiFiReset(2);
    } else {
      // Toggle device state
      dimmer_state = !dimmer_state;
      Serial.printf("Toggle State to %s.\n", dimmer_state ? "true" : "false");
      if (my_device) {
        my_device->updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, dimmer_state);
      }
      (dimmer_state == false) ? digitalWrite(gpio_dimmer, LOW) : digitalWrite(gpio_dimmer, HIGH);
    }
  }
  delay(100);
}

The result is similar.

BR,

Please put a Serial.println(...) in each line of your setup() so that you can identify if the problem is there or in the first invocation of loop().

I was thinking if you happend to have a used a poisonous pin, but I can't see that - but it could still b possible, so check your wiring.

Did you choose partiton scheme Rainmaker?

Yes!

Hi,

I put a Serial.print in the beginning and the result is the same:

oid setup() {
  Serial.begin(115200);
  Serial.print("step_0");
  pinMode(gpio_0, INPUT);
  pinMode(gpio_dimmer, OUTPUT);
  digitalWrite(gpio_dimmer, DEFAULT_POWER_MODE);
  

Result:
rst:0x3 (SW_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:0x3fff0030,len:1448
load:0x40078000,len:14844
ho 0 tail 12 room 4
load:0x40080400,len:4
load:0x40080404,len:3356
entry 0x4008059c
ets Jul 29 2019 12:21:46

But independent of compilation the date is always the same Jul 29 2019 12:21:46

i got that result, when try using this code ESP-RainMaker-Demo-Code/DHT11_Relay_ESP32/DHT11_Relay_ESP32.ino at main · techiesms/ESP-RainMaker-Demo-Code · GitHub

i dont have problem using example from Rainmaker, like this one:

//This example demonstrates the ESP RainMaker with a custom device
#include "RMaker.h"
#include "WiFi.h"
#include "WiFiProv.h"

#define DEFAULT_POWER_MODE   true
#define DEFAULT_DIMMER_LEVEL 50
const char *service_name = "PROV_TeguhTeknisi";
const char *pop = "mydevice";

//GPIO for push button
#if CONFIG_IDF_TARGET_ESP32C3
static int gpio_0 = 9;
static int gpio_dimmer = 15;
#else
//GPIO for virtual device
static int gpio_0 = 0;
static int gpio_dimmer = 15;
#endif

bool dimmer_state = true;

// The framework provides some standard device types like switch, lightbulb, fan, temperature sensor.
// But, you can also define custom devices using the 'Device' base class object, as shown here
static Device *my_device = NULL;

// WARNING: sysProvEvent is called from a separate FreeRTOS task (thread)!
void sysProvEvent(arduino_event_t *sys_event) {
  switch (sys_event->event_id) {
    case ARDUINO_EVENT_PROV_START:
#if CONFIG_IDF_TARGET_ESP32S2
      Serial.printf("\nProvisioning Started with name \"%s\" and PoP \"%s\" on SoftAP\n", service_name, pop);
      printQR(service_name, pop, "softap");
#else
      Serial.printf("\nProvisioning Started with name \"%s\" and PoP \"%s\" on BLE\n", service_name, pop);
      printQR(service_name, pop, "ble");
#endif
      break;
    case ARDUINO_EVENT_PROV_INIT:         wifi_prov_mgr_disable_auto_stop(10000); break;
    case ARDUINO_EVENT_PROV_CRED_SUCCESS: wifi_prov_mgr_stop_provisioning(); break;
    default:                              ;
  }
}

void write_callback(Device *device, Param *param, const param_val_t val, void *priv_data, write_ctx_t *ctx) {
  const char *device_name = device->getDeviceName();
  const char *param_name = param->getParamName();

  if (strcmp(param_name, "Power") == 0) {
    Serial.printf("Received value = %s for %s - %s\n", val.val.b ? "true" : "false", device_name, param_name);
    dimmer_state = val.val.b;
    (dimmer_state == false) ? digitalWrite(gpio_dimmer, LOW) : digitalWrite(gpio_dimmer, HIGH);
    param->updateAndReport(val);
  } else if (strcmp(param_name, "Level") == 0) {
    Serial.printf("\nReceived value = %d for %s - %s\n", val.val.i, device_name, param_name);
    param->updateAndReport(val);
  }
}

void setup() {
  Serial.begin(115200);
  Serial.println(F("Booting..."));

  pinMode(gpio_0, INPUT);
  pinMode(gpio_dimmer, OUTPUT);
  digitalWrite(gpio_dimmer, DEFAULT_POWER_MODE);

  Node my_node;
  my_node = RMaker.initNode("Teguh Teknisi");
  my_device = new Device("MyDevice", "custom.device.mydevice", &gpio_dimmer);
  if (!my_device) {
    return;
  }
  //Create custom dimmer device
  my_device->addNameParam();
  my_device->addPowerParam(DEFAULT_POWER_MODE);
  my_device->assignPrimaryParam(my_device->getParamByName(ESP_RMAKER_DEF_POWER_NAME));

  //Create and add a custom level parameter
  Param level_param("Level", "custom.param.level", value(DEFAULT_DIMMER_LEVEL), PROP_FLAG_READ | PROP_FLAG_WRITE);
  level_param.addBounds(value(0), value(100), value(1));
  level_param.addUIType(ESP_RMAKER_UI_SLIDER);
  my_device->addParam(level_param);

  my_device->addCb(write_callback);

  //Add custom dimmer device to the node
  my_node.addDevice(*my_device);

  //This is optional
  RMaker.enableOTA(OTA_USING_TOPICS);
  //If you want to enable scheduling, set time zone for your region using setTimeZone().
  //The list of available values are provided here https://rainmaker.espressif.com/docs/time-service.html
  // RMaker.setTimeZone("Asia/Shanghai");
  // Alternatively, enable the Timezone service and let the phone apps set the appropriate timezone
  RMaker.enableTZService();

  RMaker.enableSchedule();

  RMaker.enableScenes();

  RMaker.start();

  WiFi.onEvent(sysProvEvent);  // Will call sysProvEvent() from another thread.
#if CONFIG_IDF_TARGET_ESP32S2
  WiFiProv.beginProvision(WIFI_PROV_SCHEME_SOFTAP, WIFI_PROV_SCHEME_HANDLER_NONE, WIFI_PROV_SECURITY_1, pop, service_name);
#else
  WiFiProv.beginProvision(WIFI_PROV_SCHEME_BLE, WIFI_PROV_SCHEME_HANDLER_FREE_BTDM, WIFI_PROV_SECURITY_1, pop, service_name);
#endif


  Serial.println(F("Done..."));

}

void loop() {
  if (digitalRead(gpio_0) == LOW) {  //Push button pressed

    // Key debounce handling
    delay(100);
    int startTime = millis();
    while (digitalRead(gpio_0) == LOW) {
      delay(50);
    }
    int endTime = millis();

    if ((endTime - startTime) > 10000) {
      // If key pressed for more than 10secs, reset all
      Serial.printf("Reset to factory.\n");
      RMakerFactoryReset(2);
    } else if ((endTime - startTime) > 3000) {
      Serial.printf("Reset Wi-Fi.\n");
      // If key pressed for more than 3secs, but less than 10, reset Wi-Fi
      RMakerWiFiReset(2);
    } else {
      // Toggle device state
      dimmer_state = !dimmer_state;
      Serial.printf("Toggle State to %s.\n", dimmer_state ? "true" : "false");
      if (my_device) {
        my_device->updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, dimmer_state);
      }
      (dimmer_state == false) ? digitalWrite(gpio_dimmer, LOW) : digitalWrite(gpio_dimmer, HIGH);
    }
  }
  delay(100);
}

Edit:
I use Wemos S2 Mini, no problem with the example code.
Arduino IDE 1.8.19
Board Manager using Espressif Arduino-ESP32 Core 3.0.1

Serial.print() does not flush the buffer, you need Serial.println(), maybe followed my a delay(100)

If Serial.print() does not flush the buffer then why would Serial.println() ?

'cause in most cases the buffer is implemented as a linebuffer --> \n forces the data to be sent. There are exception, e.g. when the buffersize is a multiple of 64 and you are on a stm32 and wonder why nothing shows up ...

Thaks for your feedback.
I try your code directly and the result:
12:02:10.969 -> rst:0x3 (SW_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
12:02:10.969 -> configsip: 0, SPIWP:0xee
12:02:10.969 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
12:02:11.006 -> mode:DIO, clock div:1
12:02:11.006 -> load:0x3fff0030,len:1448
12:02:11.006 -> load:0x40078000,len:14844
12:02:11.006 -> ho 0 tail 12 room 4
12:02:11.006 -> load:0x40080400,len:4
12:02:11.006 -> load:0x40080404,len:3356
12:02:11.006 -> entry 0x4008059c
12:02:11.309 -> ets Jul 29 2019 12:21:46

I'm using the Arduino IDE 2.3.3, but i also try with Arduino IDE 1.8.16
The board is ESP-WROOM-32

btw, i have problem with this code ESP-RainMaker-Demo-Code/DHT11_Relay_ESP32/DHT11_Relay_ESP32.ino at main · techiesms/ESP-RainMaker-Demo-Code · GitHub

I try to add serial.println and delay, thats not work.

/*
  This example demonstrates the ESP RainMaker with a Relay and DHT sensor.
  It's detailed explanation video is uploaded on our YouTube channel
  https://www.youtube.com/techiesms
*/

#include "RMaker.h"
#include "WiFi.h"
#include "WiFiProv.h"
#include "DHT.h"
#include <SimpleTimer.h>
#include <wifi_provisioning/manager.h>

// Set Defalt Values
#define DEFAULT_RELAY_MODE true
#define DEFAULT_Temperature 0
#define DEFAULT_Humidity 0

// BLE Credentils
const char *service_name = "PROV_12345";
const char *pop = "1234567";

// GPIO
static uint8_t gpio_reset = 0;
static uint8_t DHTPIN = 23;
static uint8_t relay = 22;
bool relay_state = true;

bool wifi_connected = 0;

DHT dht(DHTPIN, DHT11);

SimpleTimer Timer;

//------------------------------------------- Declaring Devices -----------------------------------------------------//

//The framework provides some standard device types like switch, lightbulb, fan, temperature sensor.
static TemperatureSensor temperature("Temperature");
static TemperatureSensor humidity("Humidity");
static Switch my_switch("Relay", &relay);

void sysProvEvent(arduino_event_t *sys_event)
{
  switch (sys_event->event_id) {
    case ARDUINO_EVENT_PROV_START:
#if CONFIG_IDF_TARGET_ESP32
      Serial.printf("\nProvisioning Started with name \"%s\" and PoP \"%s\" on BLE\n", service_name, pop);
      printQR(service_name, pop, "ble");
#else
      Serial.printf("\nProvisioning Started with name \"%s\" and PoP \"%s\" on SoftAP\n", service_name, pop);
      printQR(service_name, pop, "softap");
#endif
      break;
    case ARDUINO_EVENT_WIFI_STA_CONNECTED:
      Serial.printf("\nConnected to Wi-Fi!\n");
      wifi_connected = 1;
      delay(500);
      break;
    case ARDUINO_EVENT_PROV_CRED_RECV: {
        Serial.println("\nReceived Wi-Fi credentials");
        Serial.print("\tSSID : ");
        Serial.println((const char *) sys_event->event_info.prov_cred_recv.ssid);
        Serial.print("\tPassword : ");
        Serial.println((char const *) sys_event->event_info.prov_cred_recv.password);
        break;
      }
    case ARDUINO_EVENT_PROV_INIT:
      wifi_prov_mgr_disable_auto_stop(10000);
      break;
    case ARDUINO_EVENT_PROV_CRED_SUCCESS:
      Serial.println("Stopping Provisioning!!!");
      wifi_prov_mgr_stop_provisioning();
      break;
  }
}

void write_callback(Device *device, Param *param, const param_val_t val, void *priv_data, write_ctx_t *ctx)
{
  const char *device_name = device->getDeviceName();
  Serial.println(device_name);
  const char *param_name = param->getParamName();

  if (strcmp(device_name, "Relay") == 0)
  {
    if (strcmp(param_name, "Power") == 0)
    {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b ? "true" : "false", device_name, param_name);
      relay_state = val.val.b;
      (relay_state == false) ? digitalWrite(relay, LOW) : digitalWrite(relay, HIGH);
      param->updateAndReport(val);
    }
  }
}


void setup(){

  Serial.begin(115200);
  Serial.println("Booting");
  delay(2000);

  // Configure the input GPIOs
  Serial.println("Configure Gpio");
  pinMode(gpio_reset, INPUT);
  pinMode(relay, OUTPUT);
  digitalWrite(relay, DEFAULT_RELAY_MODE);

  delay(2000);

  //Beginning Sensor
  Serial.println("DHT11");
  dht.begin();

  delay(2000);

  //------------------------------------------- Declaring Node -----------------------------------------------------//
  Serial.println("Declaring Node");
  Node my_node;
  my_node = RMaker.initNode("Teguh Teknisi");

  delay(2000);

  //Standard switch device
  Serial.println("Standard node");
  my_switch.addCb(write_callback);

  delay(2000);

  //------------------------------------------- Adding Devices in Node -----------------------------------------------------//
  Serial.println("Add device to Node");
  my_node.addDevice(temperature);
  my_node.addDevice(humidity);
  my_node.addDevice(my_switch);

  delay(2000);

  //This is optional
  Serial.printf("\n Enable OTA \n");
  RMaker.enableOTA(OTA_USING_PARAMS);
  //If you want to enable scheduling, set time zone for your region using setTimeZone().
  //The list of available values are provided here https://rainmaker.espressif.com/docs/time-service.html
  // RMaker.setTimeZone("Asia/Shanghai");
  // Alternatively, enable the Timezone service and let the phone apps set the appropriate timezone
  RMaker.enableTZService();
  RMaker.enableSchedule();

  delay(2000);

  Serial.println("Starting ESP-RainMaker");
  RMaker.start();

  delay(2000);

  // Timer for Sending Sensor's Data
  Serial.println("Set Timer");
  Timer.setInterval(3000);

  delay(2000);

  Serial.println("Start WiFI Event");
  WiFi.onEvent(sysProvEvent);

  delay(2000);

#if CONFIG_IDF_TARGET_ESP32
  WiFiProv.beginProvision(WIFI_PROV_SCHEME_BLE, WIFI_PROV_SCHEME_HANDLER_FREE_BTDM, WIFI_PROV_SECURITY_1, pop, service_name);
#else
  WiFiProv.beginProvision(WIFI_PROV_SCHEME_SOFTAP, WIFI_PROV_SCHEME_HANDLER_NONE, WIFI_PROV_SECURITY_1, pop, service_name);
#endif

}


void loop()
{

  if (Timer.isReady() && wifi_connected) {                    // Check is ready a second timer
    Serial.println("Sending Sensor's Data");
    Send_Sensor();
    Timer.reset();                        // Reset a second timer
  }



  //-----------------------------------------------------------  Logic to Reset RainMaker

  // Read GPIO0 (external button to reset device
  if (digitalRead(gpio_reset) == LOW) { //Push button pressed
    Serial.printf("Reset Button Pressed!\n");
    // Key debounce handling
    delay(100);
    int startTime = millis();
    while (digitalRead(gpio_reset) == LOW) delay(50);
    int endTime = millis();

    if ((endTime - startTime) > 10000) {
      // If key pressed for more than 10secs, reset all
      Serial.printf("Reset to factory.\n");
      wifi_connected = 0;
      RMakerFactoryReset(2);
    } else if ((endTime - startTime) > 3000) {
      Serial.printf("Reset Wi-Fi.\n");
      wifi_connected = 0;
      // If key pressed for more than 3secs, but less than 10, reset Wi-Fi
      RMakerWiFiReset(2);
    }
  }
  delay(100);
}

void Send_Sensor()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  Serial.print("Temperature - "); Serial.println(t);
  Serial.print("Humidity - "); Serial.println(h);

  temperature.updateAndReportParam("Temperature", t);
  humidity.updateAndReportParam("Temperature", h);
}

this what i got

If i comment this part it works:

/*
  Node my_node;
  my_node = RMaker.initNode("Teguh Teknisi");
  my_device = new Device("MyDevice", "custom.device.mydevice", &gpio_dimmer);
  if (!my_device) {
    return;
  }
  //Create custom dimmer device
  my_device->addNameParam();
  my_device->addPowerParam(DEFAULT_POWER_MODE);
  my_device->assignPrimaryParam(my_device->getParamByName(ESP_RMAKER_DEF_POWER_NAME));

  //Create and add a custom level parameter
  Param level_param("Level", "custom.param.level", value(DEFAULT_DIMMER_LEVEL), PROP_FLAG_READ | PROP_FLAG_WRITE);
  level_param.addBounds(value(0), value(100), value(1));
  level_param.addUIType(ESP_RMAKER_UI_SLIDER);
  my_device->addParam(level_param);

  my_device->addCb(write_callback);

  //Add custom dimmer device to the node
  my_node.addDevice(*my_device);


  //This is optional
  RMaker.enableOTA(OTA_USING_TOPICS);
  //If you want to enable scheduling, set time zone for your region using setTimeZone().
  //The list of available values are provided here https://rainmaker.espressif.com/docs/time-service.html
  // RMaker.setTimeZone("Asia/Shanghai");
  // Alternatively, enable the Timezone service and let the phone apps set the appropriate timezone
  RMaker.enableTZService();

  RMaker.enableSchedule();

  RMaker.enableScenes();

  RMaker.start();
*/

Result:
12:19:51.899 -> Done...

If I make a reset button:
12:25:19.900 -> rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
12:25:19.900 -> configsip: 0, SPIWP:0xee
12:25:19.900 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
12:25:19.945 -> mode:DIO, clock div:1
12:25:19.945 -> load:0x3fff0030,len:1448
12:25:19.945 -> load:0x40078000,len:14844
12:25:19.945 -> ho 0 tail 12 room 4
12:25:19.945 -> load:0x40080400,len:4
12:25:19.945 -> load:0x40080404,len:3356
12:25:19.945 -> entry 0x4008059c
12:25:20.492 -> E (579) esp_core�f�W }���͡� Core dump data check failed:
12:25:20.492 -> Calculated checksum='119c58e1'
12:25:20.492 -> Image checksum='ffffffff'
12:25:20.538 -> Booting...
12:25:20.605 -> E (127) wifi_prov_scheme_ble: bt_mem_release of BTDM failed 259
12:25:21.644 -> Done...

Is the same as I have.