我想通过ESP32-CAM将图像捕获发布到MQTT。有以下代码
#include "esp_camera.h"
#include "Arduino.h"
#include "soc/soc.h" // Disable brownour problems
#include "soc/rtc_cntl_reg.h" // Disable brownour problems
#include "driver/rtc_io.h"
#include <Base64.h>
#include <WiFi.h>
#include <PubSubClient.h>
.
.
void loop() {
// Init Camera
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
Serial.printf("Camera init failed with error 0x%x", err);
return;
}
camera_fb_t * fb = NULL;
// Take Picture with Camera
fb = esp_camera_fb_get();
if(!fb) {
Serial.println("Camera capture failed");
return;
}
// Path where new picture will be saved in SD Card
String path = "/picture.jpg";
fs::FS &fs = SD_MMC;
Serial.printf("Picture file name: %s\n", path.c_str());
//File file = fs.open(path.c_str(), FILE_WRITE);
if(!file){
Serial.println("Failed to open file in writing mode");
}
else {
file.write(fb->buf, fb->len); // payload (image), payload length
}
//file.close();
esp_camera_fb_return(fb);
// Turns off the ESP32-CAM white on-board LED (flash) connected to GPIO 4
pinMode(4, OUTPUT);
digitalWrite(4, LOW);
rtc_gpio_hold_en(GPIO_NUM_4);
delay(2000);
Serial.println("Going to sleep now");
delay(2000);
esp_deep_sleep_start();
Serial.println("This will never be printed");
}
但是这个失败了
Alternatives for avr/pgmspace.h: []/home/root/Arduino/libraries/Base64/src/Base64.cpp:11:26: fatal error: avr/pgmspace.h: No such file or directory
compilation terminated.
ResolveLibrary(avr/pgmspace.h)
-> candidates: []
Multiple libraries were found for "Base64.h"
Used: /home/root/Arduino/libraries/Base64
Multiple libraries were found for "WiFi.h"
Used: /home/root/.arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/WiFi
Not used: /opt/arduino-1.8.10/libraries/WiFi
Multiple libraries were found for "PubSubClient.h"
Used: /home/root/Arduino/libraries/PubSubClient
Using library Base64 at version 0.0.1 in folder: /home/root/Arduino/libraries/Base64
Using library WiFi at version 1.0 in folder: /home/root/.arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/WiFi
Using library PubSubClient at version 2.7 in folder: /home/root/Arduino/libraries/PubSubClient
exit status 1
Error compiling for board ESP32 Wrover Module.
我认为这是由于Base64.h
库。我还有其他方法可以将图像编码为base64以发布到MQTT吗?
编译器找不到Base64库中使用的avr / pgmspace.h。您没有指定使用哪个base64库。编译错误提示您使用的是AVR架构编写的。它可能适用于其他Arduino架构,因为大多数不是AVR的Arduino板包内核具有用于Arduino草图中使用的一些常见AVR包括的兼容性虚拟实现。 esp8266 Arduino核心也有它。 ESP32核心没有此功能。您可以找到a good dummy avr/pgmspace.h in Arduino SAMD core。
为什么要包含Base64.h?