Arduino - 为基于芯片的DHT传感器选择标题(ESP32 vs ESP8266)

时间:2017-10-13 03:38:54

标签: arduino libraries arduino-esp8266 esp32

我首先要说的是我不是C ++ / Arduino专家,但是我已经对这个问题发挥了足够的作用,并且在我无法弄清楚的地方用Google搜索。

我有一些调用传感器库文件的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的命令,这对于命令非常有用。但是我试图将它用于定义并且它有点"有点"作品。我必须从两个库中的一个中重新命名头文件和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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您可以尝试以下库:https://github.com/adafruit/DHT-sensor-library 我在某些项目中使用并且效果很好