嵌入式HTTP获取升级bin包代码
这是一个获取嵌入式HTTP升级bin包的示例代码:
#include <ESPAsyncWebServer.h>
#include <Update.h>
AsyncWebServer server(80);
void handleUpdate(AsyncWebServerRequest *request) {
if (Update.hasError()) {
request->send(500, "text/plain", "Update failed: " + String(Update.getError()));
} else {
request->send(200, "text/plain", "Update successful");
}
}
void startUpdate(AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final) {
if (!index) {
Update.begin(UPDATE_SIZE_UNKNOWN);
}
if (Update.write(data, len) != len) {
Update.abort();
request->send(500, "text/plain", "Update failed");
}
if (final) {
Update.end();
}
}
void setup() {
server.on("/update", HTTP_POST, [](AsyncWebServerRequest *request) {
request->send(200, "text/html", "<form method='POST' action='/update' enctype='multipart/form-data'><input type='file' name='update'><button>Update</button></form>");
});
server.on("/update", HTTP_POST, [](AsyncWebServerRequest *request) {
AsyncWebHeader *header = request->getHeader("Content-Length");
if (!header) {
request->send(400, "text/plain", "Missing Content-Length header");
return;
}
int contentLength = header->value().toInt();
if (!Update.begin(contentLength)) {
request->send(500, "text/plain", "Update failed");
return;
}
if (request->hasParam("MD5", true)) {
Update.setMD5(request->getParam("MD5", true)->value().c_str());
}
request->send(200, "text/plain", "Update started");
}, startUpdate);
server.on("/update", HTTP_POST, [](AsyncWebServerRequest *request) {
AsyncWebHeader *header = request->getHeader("Content-Length");
if (!header) {
request->send(400, "text/plain", "Missing Content-Length header");
return;
}
int contentLength = header->value().toInt();
if (!Update.begin(contentLength, U_FLASH)) {
request->send(500, "text/plain", "Update failed");
return;
}
if (request->hasParam("MD5", true)) {
Update.setMD5(request->getParam("MD5", true)->value().c_str());
}
request->send(200, "text/plain", "Update started");
}, startUpdate);
server.on("/update", HTTP_COMPLETE, handleUpdate);
server.begin();
}
void loop() {}
这段代码使用了ESPAsyncWebServer库来实现HTTP服务器功能,并使用ESP8266的Update库来进行固件升级。服务器监听端口80,并提供了一个简单的页面,让用户选择需要升级的bin文件并上传。上传完成后,服务器会通过handleUpdate()函数来处理升级结果。如果升级成功,服务器会返回200 OK;如果升级失败,则会返回500 Internal Server Error
原文地址: https://www.cveoy.top/t/topic/eCCT 著作权归作者所有。请勿转载和采集!