如何使用 SPIFFS 上的 .bin 文件对我的 ESP32 进行编程

问题描述 投票:0回答:1

我有一个想法,从服务器下载

.bin
文件并保存在 SPIFFS 中,然后将文件上传到我的 ESP32 上。
我的问题有两个部分,因为我在使用 ESP32 方面没有太多经验。首先,如何将我下载的
.bin
文件存储在 SPIFFS 中,其次,如何使用
.bin
下载的文件对 ESP32 进行编程,无需用户干预,并且全部通过代码自动进行。
第二部分更具挑战性,我找不到任何解决方案。

我专门为我所说的第二部分寻找解决方案,但没有找到解决方案。

esp32 arduino-c++ arduino-esp32 ota spiffs
1个回答
0
投票

请遵循此代码片段,我希望这将帮助您解决问题:

#include <Arduino.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <SPIFFS.h>
#include <Update.h>

const char* ssid = "YourWiFiSSID";
const char* password = "YourWiFiPassword";
const char* binUrl = "http://example.com/path/to/your/file.bin"; // URL of the .bin file

void setup() {
  Serial.begin(115200);
  
  // Connect to Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");
  
  // Initialize SPIFFS
  if (!SPIFFS.begin(true)) {
    Serial.println("SPIFFS Mount Failed");
    return;
  }
  
  // Check for and perform firmware update
  checkAndPerformFirmwareUpdate();
  
  // Your setup code here
}

void loop() {
  // Your main loop code here
}

void checkAndPerformFirmwareUpdate() {
  HTTPClient http;
  http.begin(binUrl);

  int httpCode = http.GET();
  if (httpCode == HTTP_CODE_OK) {
    Serial.println("Downloading .bin file...");
    File firmwareFile = SPIFFS.open("/firmware.bin", FILE_WRITE);
    if (firmwareFile) {
      size_t contentLength = http.getSize();
      http.writeToStream(&firmwareFile);
      firmwareFile.close();
      Serial.println("Download complete.");

      // Perform firmware update
      if (Update.begin(contentLength)) {
        if (Update.writeStream(http.getStream())) {
          if (Update.end(true)) {
            Serial.println("Firmware update successful. Rebooting...");
            ESP.restart();
          } else {
            Serial.println("Firmware update failed!");
          }
        } else {
          Serial.println("Write to firmware update stream failed!");
        }
      } else {
        Serial.println("Begin firmware update failed!");
      }
    } else {
      Serial.println("Unable to create firmware file!");
    }
  } else {
    Serial.println("HTTP GET failed!");
  }
  http.end();
}
© www.soinside.com 2019 - 2024. All rights reserved.