2017-10-13 5 views
0

Je vais commencer par dire que je ne suis pas un expert C++/Arduino mais j'ai assez joué avec ce problème et assez googlé où je ne peux pas comprendre.Arduino - Sélectionnez l'en-tête pour capteur DHT basé sur puce (ESP32 vs ESP8266)

J'ai du code Arduino qui appelle un fichier de bibliothèque de capteurs qui appelle alors la bibliothèque DHT (https://github.com/RobTillaart/Arduino/tree/master/libraries/). Il y a deux versions principales de cette bibliothèque, une dans DHTStable qui maintient la compatibilité avec les puces AVR et ARM et une dans DHTLib qui est optimisée pour AVR. Je compile la même esquisse pour un ESP8266 (qui nécessite le DHTStable) et un ESP32 (qui fonctionne mieux avec le DHTlib).

En ce moment je compile et télécharge vers un ESP32 puis quand j'ai fini je déplace la bibliothèque DHTLib, copie le DHTStable dedans, puis compile et télécharge pour l'ESP8266. Quelques jours ou une semaine plus tard, je recommence à copier et coller.

Dans ma bibliothèque de capteurs, je vérifie déjà l'ESP32 pour certaines commandes et si ce n'est pas un ESP32, je fais les commandes pour un ESP8266 en utilisant #if defined(ARDUINO_ARCH_ESP32) et cela fonctionne très bien pour les commandes. Cependant j'essaie de l'utiliser pour les définitions et les travaux "un peu". Je dois prendre l'une des deux bibliothèques et renommer l'en-tête et le fichier cpp avec toutes les références en interne pour être différent de l'autre. Puis dans mon Si je peux faire un si ESP32 utiliser dht-avr.h (renommé) sinon dht.h (original).

Tout cela fonctionne mais j'utilise git pour cloner et garder à jour les bibliothèques de sorte que chaque fois qu'il y a une mise à jour, je dois passer par et renommer tout. J'ai donc essayé #include <DHTlib\dht.h> et <DHTStable\dht.h> mais cela ne fonctionne pas (impossible de trouver la bibliothèque).

Est ce que je veux faire, appelant le chemin d'inclusion réel ou deux en-têtes différents quand ils sont nommés identiques, possible? Depuis que l'instruction If fonctionne, je suis là à 90% (100% si je continue de tout renommer) mais j'aimerais vraiment que ce soit automatique.

@BMelis m'a mis sur la bonne voie avec le .. dans le chemin. Le code final a fini par être:

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

Répondre

0

Une option serait de coder en dur le chemin d'accès aux bibliothèques dans votre code. Vous devrez utiliser des guillemets pour l'inclure au lieu de <...>:

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

J'étais tellement proche, juste raté le .. pour le sous-répertoire ci-dessus. Marquer comme réponse et éditer le premier message car les commentaires ne me permettent pas d'ajouter du texte formaté. – Allan