2017-10-13 6 views
0

私はC++/Arduinoのエキスパートではないと言って始めますが、私はこの問題で十分にプレイしました。それを理解する。Arduino - チップベースのDHTセンサーヘッダーを選択してください(ESP32 vs ESP8266)

私はセンサーライブラリーファイルを呼び出しているArduinoコードをいくつか持っていて、DHTライブラリー(https://github.com/RobTillaart/Arduino/tree/master/libraries/)を呼び出しています。このライブラリには、AVRおよびARMベースのチップとの互換性を維持するDHTStableとAVRに最適化されたDHTLibの2つの主要なバージョンがあります。私は、ESP8266(DHTtableが必要)とESP32(DHTlibでうまくいく)の両方について同じスケッチを編集しています。

今私はコンパイルしてESP32にダウンロードします。すると、DHTLibライブラリを移動し、DHTStableをコピーしてからコンパイルし、ESP8266用にダウンロードします。数日または1週間後、私はこれをコピーして貼り直します。

私のセンサーライブラリでは、すでに特定のコマンドでESP32をチェックしていますが、ESP32でない場合は#if defined(ARDUINO_ARCH_ESP32)を使用してESP8266のコマンドを実行しています。しかし、私は定義のためにそれを使用しようとしており、それは "ちょっと"働いています。私は2つのライブラリのうちの1つを取って、ヘッダーとcppファイルの名前を、内部的にすべての参照と別のものに変更しなければなりません。それから私の場合、ESP32がdht-avr.h(名前が変更されたもの)、dht.h(オリジナルのもの)を使用している場合はifを実行できます。

これはすべて動作しますが、gitを使用してクローンを更新し、ライブラリが更新されるたびに更新が行われるため、すべてをリネームする必要があります。だから、#<DHTlib\dht.h><DHTStable\dht.h>をインクルードしてみましたが、これらは動作しません(ライブラリが見つかりません)。

実際のインクルードパスを呼び出すか、2つの異なるヘッダーを同じ名前で呼び出すことができますか? 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

関連する問題