2017-10-13 75 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