Arduino - Select header 基于芯片的 DHT 传感器(ESP32 与 ESP8266)

Arduino - Select header for DHT Sensor Based on Chip (ESP32 vs ESP8266)

首先我会说我不是 C++/Arduino 专家,但我已经对这个问题玩够了,并且在谷歌上搜索了足够多我无法弄清楚的地方。

我有一些 Arduino 代码调用传感器库文件,然后调用 DHT 库 (https://github.com/RobTillaart/Arduino/tree/master/libraries/)。这个库有两个主要版本,一个在 DHTStable 中,它保持与基于 AVR 和 ARM 的芯片的兼容性,另一个在 DHTLib 中,它针对 AVR 进行了优化。我正在为 ESP8266(需要 DHTStable)和 ESP32(与 DHTlib 配合得更好)编译相同的草图。

现在我编译并下载到 ESP32,完成后我将 DHTLib 库移出,复制 DHTStable,然后为 ESP8266 编译和下载。几天或一周后,我再次复制和粘贴。

在我的传感器库中,我已经在检查 ESP32 的某些命令,如果不是 ESP32,我会使用 #if defined(ARDUINO_ARCH_ESP32) 为 ESP8266 执行命令,这对命令非常有用。但是我正在尝试将它用于定义并且它 "kinda" 有效。我必须使用这两个库之一并将 header 和 cpp 文件以及内部的所有引用重命名为与另一个不同。然后在我的 If I can do a if ESP32 use dht-avr.h (renamed) else dht.h (original).

一切正常,但我正在使用 git 克隆和更新库,因此每次有更新时我都必须重新命名所有内容。所以我尝试了#include <DHTlib\dht.h><DHTStable\dht.h> 但它们不起作用(找不到库)。

我想做的是调用实际的包含路径或两个不同的 headers 当它们被命名为相同时,可能吗?由于 If 语句有效,我已经完成了 90%(如果我继续重命名所有内容,则为 100%),但我真的希望它是自动的。

@BMelis 让我走上了正确的轨道,路径中有 ..。最终代码为:

#ifdef ARDUINO_ARCH_ESP32
#include "..\DHTlib\DHT.h"
#else
#include "..\DHTStable\DHT.h"
#endif

一个选项是在您的代码中硬编码库的路径。您必须使用引号代替 <...>:

#ifdef ESP8266
#include "../path/to/esp8266-header.h"
#endif
#ifdef ARDUINO_ARCH_ESP32
#include "../path/to/esp32-header.h"
#endif

你可以试试这个库:https://github.com/adafruit/DHT-sensor-library 我在一些项目中使用并且效果很好