ESP8266 NodeMCU erreur compilation librairie PrintEx? [Résolu]

Bonjour à tous,

Je débute sur Arduino et plus généralement en microcontrolleurs. J'ai voulu tester de suivre un tutoriel pour récupérer les données d'une sonde de température en Wifi avec une carte ESP8266 Node MCU 1.0.

J'ai dans un premier temps tout bêtement copié le code du tutoriel :

#include <OneWire.h>
#include <DallasTemperature.h>
#include <PrintEx.h>

// On utilise la pin D4 de la carte pour la réception des données du capteur
#define ONE_WIRE_BUS D4

// Création des objets pour accéder au bus '1-Wire' et plus spécifiquement au capteur sur ce bus ('Dallas' est le nom du constructeur du ds12b80)
// On peut avoir plusieurs capteurs sur le même bus et l'objet 'sensors' permet de tous les lire.
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

/**
 * Initialisation du programme
 */
void setup(void) {
  // Configuration du port série pour les logs
  Serial.begin(9600);
  
  // Initialisation du capteur
  sensors.begin();
}

/**
 * Méthode principale, appelée en boucle
 */
void loop(void) {
  Serial << "Reading temperature...";
  sensors.requestTemperatures(); // Envoi de la demande de lecture

  Serial << "Value is: ";
  Serial << sensors.getTempCByIndex(0) << ios::endl; // Récupération de l'objet 0 (vu qu'on n'en a qu'un)

  delay(1000); // Temporisation avant le prochain tour de boucle
}

Les dernières lignes de mon message d'erreur sont :

c:\users\admin\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.3-gcc10.3-9bcba0b\xtensa-lx106-elf\include\sys\select.h:76:5: note: previous declaration 'int select(int, fd_set*, fd_set*, fd_set*, timeval*)'
   76 | int select __P ((int __n, fd_set *__readfds, fd_set *__writefds,
      |     ^~~~~~
exit status 1
Erreur de compilation pour la carte NodeMCU 1.0 (ESP-12E Module)

J'ai du mal à décrypter.

Mes librairies sont à jour et mon câblage m'a l'air correct. Mon problème est le même sur deux PC différents.
Je soupçonne la librairie PrintEx d'avoir un lien avec mon problème car quand j'utilise un programme pour faire clignoter la led de ma carte en conservant les librairies OneWire, DallasTemperature et PrintEx, les deux premières seules me permettent de téléverser tandis qu'il y a une erreur de compilation quand j'ajoute PrintEx.

Est-ce que quelqu'un aurait une piste ?

Merci par avance ! :slight_smile:

Bonjour

La librairie PrintEX pose manifestement un problème pour ESP8266 (et également ESP32)

Sujet évoqué sur le dépot Github de cette librairie (non maintenue depuis 2016)
https://github.com/Chris--A/PrintEx/issues/32

Bonjour,

Chez moi ça compile sans problème.
J'utilise la version 2.7.4 de l’extension pour cartes 8266 car j'avais lu qu'il y avait des problèmes avec la version 3.

Néanmoins tu peux facilement te passer de Printex et utiliser des Serial.print() ou encore mieux Serial.printf().

J'ai oublié d'indiquer la version de l'extension ESP8266 utilisée pour le test : Il s'agissait de la version 3.01
Si la compilation se passe sans problème avec la 2.7.4 et si @la-cisse tient absolument à la librairie PrintEX il lui est facile de 'rétrograder' temporairement avec le Gestionnaire de cartes

Si PrintExt n'est plus maintenu, le mieux est peut être de s'en passer et d'utiliser Serial.print() ou Serial.printf().
Personnellement je n'ai jamais pu me faire aux opérateurs d'insertion du C++ que je trouve très lourds à utiliser.

@kamill et @al1fch Merci à vous deux pour votre aide, en effet, en rétrogradant en 2.7.4 ça marche ! :wink:
Je vais retravailler sur le code pour me passer du PrintEx si possible !