esp32 cam使用Aduino IDE编译并接入blinker时出现的问题以及解决办法

在使用ArduinoIDE和ESP32开发板编程时遇到了两个问题:一是找不到esp_camera.h头文件,二是F宏定义报错。针对第一个问题,解决方案是确认已选择正确的ESP32开发板。对于第二个问题,需要在Adafruit_MQTT.cpp文件中修改return语句,将所有返回的F字符串转换为constchar*类型。完成这些修改后,项目应该能成功编译。
摘要由CSDN通过智能技术生成

我是用的esp32开环环境配置是arduino中文社区提供的2.0.9版本,blinker库使用的是0.3.10版本,以下是在编译时出现的问题

1.找不到esp_camera.h头文件

报错信息如下:

In file included from C:\Users\X_MRX\AppData\Local\Temp\.arduinoIDE-unsaved2023611-25912-1onb5ct.8x6f\Blinker_ESP32_CAM\Blinker_ESP32_CAM.ino:50:0:
C:\Users\X_MRX\AppData\Local\Temp\.arduinoIDE-unsaved2023611-25912-1onb5ct.8x6f\Blinker_ESP32_CAM\ESP32_CAM_SERVER.h:4:10: fatal error: esp_camera.h: No such file or directory
 #include "esp_camera.h"
          ^~~~~~~~~~~~~~
compilation terminated.

exit status 1

Compilation error: esp_camera.h: No such file or directory

解决办法:

选择正确的开发板

 2.F宏定义报错

报错信息如下:

C:\Users\X_MRX\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.9\cores\esp32/Arduino.h:176, from d:\arduino\libraries\Blinker\src\modules\mqtt\Adafruit_MQTT.h:25, from d:\arduino\libraries\Blinker\src\modules\mqtt\Adafruit_MQTT.cpp:22: d:\arduino\libraries\Blinker\src\modules\mqtt\Adafruit_MQTT.cpp: In member function 'const char* Adafruit_MQTT::connectErrorString(int8_t)': C:\Users\X_MRX\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.9\cores\esp32/WString.h:38:55: error: cannot convert 'const __FlashStringHelper*' to 'const char*' in return #define F(string_literal) (FPSTR(PSTR(string_literal))) ^ d:\arduino\libraries\Blinker\src\modules\mqtt\Adafruit_MQTT.cpp:279:22: note: in expansion of macro 'F' case 1: return F("The Server does not support the level of the MQTT protocol requested"); ^ C:\Users\X_MRX\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.9\cores\esp32/WString.h:38:55: error: cannot convert 'const __FlashStringHelper*' to 'const char*' in return #define F(string_literal) (FPSTR(PSTR(string_literal))) ^ d:\arduino\libraries\Blinker\src\modules\mqtt\Adafruit_MQTT.cpp:280:22: note: in expansion of macro 'F' case 2: return F("The Client identifier is correct UTF-8 but not allowed by the Server"); ^ C:\Users\X_MRX\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.9\cores\esp32/WString.h:38:55: error: cannot convert 'const __FlashStringHelper*' to 'const char*' in return #define F(string_literal) (FPSTR(PSTR(string_literal))) ^ d:\arduino\libraries\Blinker\src\modules\mqtt\Adafruit_MQTT.cpp:281:22: note: in expansion of macro 'F' case 3: return F("The MQTT service is unavailable"); ^ C:\Users\X_MRX\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.9\cores\esp32/WString.h:38:55: error: cannot convert 'const __FlashStringHelper*' to 'const char*' in return #define F(string_literal) (FPSTR(PSTR(string_literal))) ^ d:\arduino\libraries\Blinker\src\modules\mqtt\Adafruit_MQTT.cpp:282:22: note: in expansion of macro 'F' case 4: return F("The data in the user name or password is malformed"); ^ C:\Users\X_MRX\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.9\cores\esp32/WString.h:38:55: error: cannot convert 'const __FlashStringHelper*' to 'const char*' in return #define F(string_literal) (FPSTR(PSTR(string_literal))) ^ d:\arduino\libraries\Blinker\src\modules\mqtt\Adafruit_MQTT.cpp:283:22: note: in expansion of macro 'F' case 5: return F("Not authorized to connect"); ^ C:\Users\X_MRX\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.9\cores\esp32/WString.h:38:55: error: cannot convert 'const __FlashStringHelper*' to 'const char*' in return #define F(string_literal) (FPSTR(PSTR(string_literal))) ^ d:\arduino\libraries\Blinker\src\modules\mqtt\Adafruit_MQTT.cpp:284:22: note: in expansion of macro 'F' case 6: return F("Exceeded reconnect rate limit. Please try again later."); ^ C:\Users\X_MRX\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.9\cores\esp32/WString.h:38:55: error: cannot convert 'const __FlashStringHelper*' to 'const char*' in return #define F(string_literal) (FPSTR(PSTR(string_literal))) ^ d:\arduino\libraries\Blinker\src\modules\mqtt\Adafruit_MQTT.cpp:285:22: note: in expansion of macro 'F' case 7: return F("You have been banned from connecting. Please contact the MQTT server administrator for more details."); ^ C:\Users\X_MRX\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.9\cores\esp32/WString.h:38:55: error: cannot convert 'const __FlashStringHelper*' to 'const char*' in return #define F(string_literal) (FPSTR(PSTR(string_literal))) ^ d:\arduino\libraries\Blinker\src\modules\mqtt\Adafruit_MQTT.cpp:286:23: note: in expansion of macro 'F' case -1: return F("Connection failed"); ^ C:\Users\X_MRX\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.9\cores\esp32/WString.h:38:55: error: cannot convert 'const __FlashStringHelper*' to 'const char*' in return #define F(string_literal) (FPSTR(PSTR(string_literal))) ^ d:\arduino\libraries\Blinker\src\modules\mqtt\Adafruit_MQTT.cpp:287:23: note: in expansion of macro 'F' case -2: return F("Failed to subscribe"); ^ C:\Users\X_MRX\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.9\cores\esp32/WString.h:38:55: error: cannot convert 'const __FlashStringHelper*' to 'const char*' in return #define F(string_literal) (FPSTR(PSTR(string_literal))) ^ d:\arduino\libraries\Blinker\src\modules\mqtt\Adafruit_MQTT.cpp:288:23: note: in expansion of macro 'F' default: return F("Unknown error"); ^ exit status 1 Compilation error: exit status 1

解决办法:

按照报错信息提示的Adafruit_MQTT.cpp地址并将其使用文本文档形式打开,找到如下两个函数

 在你的代码中大概的return 大概是这个样子的return reinterpret_cast<const char*>(F("your_error_string"));

将全部的return修改为return static_cast<const char*>(reinterpret_cast<const __FlashStringHelper*>(F("your_error_string"));

然后再次进行编译就可以了。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值