2017-10-13 131 views
0

我会开始说我不是C++/Arduino专家,但我已经在这个问题上玩得够多了,想办法。Arduino - 选择基于芯片的DHT传感器头(ESP32 vs ESP8266)

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

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

在我的传感器库中,我已经在检查ESP32的某些命令,如果不是ESP32,我使用#if defined(ARDUINO_ARCH_ESP32)来执行ESP8266的命令,这对于命令非常有用。但是我试图用它来定义,它“有点”起作用。我必须选取两个库中的一个,并将头文件和cpp文件以及所有内部引用重新命名为不同于另一个。然后在我如果我可以做一个如果ESP32使用dht-avr.h(改名)其他dht.h(原)。

这一切都有效,但我使用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 

回答

0

一个选项是硬编码到您的代码库中的路径。你必须用引号为包括代替<...>

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

我SOOOOO接近,只是错过了..上面的子目录。标记为答案并编辑第一篇文章,因为评论不会让我添加格式化文本。 – Allan