修改ESP32代码以提供来自内存的图像,而不是SPIFFS文件



我是一个对HTML一无所知的C程序员。我正在尝试修改一些从MLX90640读取热图像的代码。该代码完成了我想要的一切,但使用BMP格式将图像写入ESP32 SPIFFS中的文件,然后使用ESPAsyncWebServer库和下面的命令将其发布到Web服务器:

server.on("/thermal", HTTP_GET, [](AsyncWebServerRequest *request){ request->send(PSRamFS, "/thermal.bmp", "image/bmp", false);});

以这种方式使用SPIFFS会在短时间内耗尽SPIFFS闪存,所以我试图存储和提供来自ram的图像。

图像是使用以下写入方式写入SPIFFS的:

file.printf("%c", blue);

我把它改成了这样的字符图像:

image[imageIndex] = blue;imageIndex++;

我验证了这些更改产生了相同的字节数组,但是读取回文件似乎会带回0xffffffffff的int。我想知道这是不是问题所在。

我更改了服务器。on代码为:

server.on("/thermal", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(200,"image/bmp",image);});

但我得到的页面除了图片所在的空框外,什么都有。

有一些HTML代码是为客户端编写的,但我不知道如何在这里发布,因为它会把帖子搞砸。我能做的最好的事情就是指向HTML,可以在代码中找到:

//GitHub:https://github.com/Samox1/ESP_Thermal_Camera_WebServer

非常感谢您的帮助。

Kurt

我知道这很晚了,但这是我的解决方案!

server.on("/capture", HTTP_GET, [](AsyncWebServerRequest * request) {
camera_fb_t * fb = NULL;
fb = esp_camera_fb_get();
if (!fb) {
Serial.println("Camera capture failed");
}
else{
request->send_P(200,"image/jpg",fb->buf,fb->len);
}
esp_camera_fb_return(fb);
});

基本上,不使用request->send((,可以使用request->send_P((并直接将帧缓冲区从内存发送到客户端,不涉及SPIFFS。

send_p使用PROGMEM,即程序的闪存。你的闪光灯会很快用完的。

最新更新