ESP32 OTA обновление продолжает падать при запуске - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь OTA обновить ESP32, разрешив ему сделать запрос на получение файла в хранилище BLOB-объектов Azure.

По неизвестной причине он не позволяет мне использовать функцию WifiClient.connect (), поскольку она всегда возвращает 0. Итак, теперь я использую библиотеку HTTPClient, чтобы сделать запрос get в хранилище больших двоичных объектов. на Лазурном. Я получил его, чтобы сделать запрос, и теперь я пытаюсь передать его в:

Update.writeStream();

Но всякий раз, когда я добираюсь до этой части, он вылетает и выдает следующее сообщение:

Guru Meditation Error: Core  1 panic'ed (InstrFetchProhibited). Exception was unhandled.
Core 1 register dump:
PC      : 0x00000000  PS      : 0x00060630  A0      : 0x800d1a18  A1      : 0x3ffb1f30  
A2      : 0x00000000  A3      : 0x3ffb1f64  A4      : 0x3ffc11b8  A5      : 0x00000000  
A6      : 0x3ffbd484  A7      : 0x00000000  A8      : 0x800d3304  A9      : 0x3ffb1f10  
A10     : 0x3ffb1f64  A11     : 0x3f40124c  A12     : 0x00000001  A13     : 0x3ffbd44c  
A14     : 0x00000000  A15     : 0x3ffc1678  SAR     : 0x0000000a  EXCCAUSE: 0x00000014  
EXCVADDR: 0x00000000  LBEG    : 0x400014fd  LEND    : 0x4000150d  LCOUNT  : 0xffffffff  

Backtrace: 0x00000000:0x3ffb1f30 0x400d1a15:0x3ffb1f50 0x400d63bb:0x3ffb1fb0 0x40088b9d:0x3ffb1fd0

Вот код:

http.begin("https://AZUREACCOUNT.blob.core.windows.net/CONTAINER/firmware.bin");
  int httpCode = http.GET();
  if (httpCode > 0) {
    if (httpCode == HTTP_CODE_OK) {
      WiFiClient * stream = http.getStreamPtr();

  unsigned long timeout = millis();
while (stream->available() == 0) {
  if (millis() - timeout > 5000) {
    Serial.println("Client Timeout !");
    stream->stop();
    return;
  }
}

int contentLength = http.getSize();

  if (Update.begin(contentLength)) {
    Serial.println("Begin OTA. This may take 2 - 5 mins to complete. Things might be quite for a while.. Patience!");
    // No activity would appear on the Serial monitor
    // So be patient. This may take 2 - 5mins to complete
    size_t written = Update.writeStream((WiFiClient &)stream);

    if (written == contentLength) {
      Serial.println("Written : " + String(written) + " successfully");
    } else {
      Serial.println("Written only : " + String(written) + "/" + String(contentLength) + ". Retry?" );
      // retry??
      // execOTA();
    }

    if (Update.end()) {
      Serial.println("OTA done!");
      if (Update.isFinished()) {
        Serial.println("Update successfully completed. Rebooting.");
        ESP.restart();
      } else {
        Serial.println("Update not finished? Something went wrong!");
      }
    } else {
      Serial.println("Error Occurred. Error #: " + String(Update.getError()));

    }
  }
  else {
    Serial.println("Not enough space");
  }

Как заставить этот код работать, чтобы устройство получало файл из хранилища BLOB-объектов Azure и само обновлялось?

1 Ответ

0 голосов
/ 05 ноября 2019

Вы должны выяснить, почему он падает. Backtrace не поможет вам без инструмента.

Stack
Пожалуйста, установите этот инструмент в вашей Arduino IDE:
https://github.com/me-no-dev/EspExceptionDecoder

И поместите свойошибка внутри него, чтобы получить вызывающий стек и посмотреть, где он падает. Вероятно, это не имеет ничего общего с обновлением, а только с httpclient.

SSL :
Вы вызываете страницу https, используете ли вы secureClient и используете ли выSSL-сертификат? Без него вы не сможете общаться по безопасному соединению.

И, наконец: VERBOSE
Компиляция с активным многословным режимом. Очень важно получать каждое сообщение, когда что-то не работает. А для https каждая информация очень важна, чтобы выяснить, почему она не работает так, как ожидалось.

...