esp32-cam将图像发布到mqtt

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

我想通过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吗?

image mqtt arduino-esp8266 esp32 tobase64string
1个回答
0
投票

编译器找不到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?

© www.soinside.com 2019 - 2024. All rights reserved.