1

我首先要说我不是 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,我会使用 ESP8266 执行命令,#if defined(ARDUINO_ARCH_ESP32)这对命令很有用。但是我正在尝试将它用于定义,并且它“有点”有效。我必须采用这两个库之一并将头文件和 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>但这些不起作用(找不到库)。

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

@BMelis 让我在正确的轨道上使用 .. 在路径中。最终的代码是:

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

2 回答 2

1

一个选项是硬编码代码中库的路径。您必须对包含使用引号,而不是<...>

#ifdef ESP8266
#include "../path/to/esp8266-header.h"
#endif
#ifdef ARDUINO_ARCH_ESP32
#include "../path/to/esp32-header.h"
#endif
于 2017-10-14T19:54:01.513 回答
0

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

于 2019-03-02T14:39:17.393 回答