Problème de lecture de girouette ESP32

Bonjour à tous,

J'ai connecté une girouette sur mon ESP32 réglé dans l'IDE sur NodeMCU-32S, lorsque je test ce code suivant, tout fonctionne bien sur mon moniteur série.

void setup() {

  Serial.begin(115200);
  analogRead(27);
}

void loop() {

  static String old_wd;

  delay(500);

  int sensorValue = analogRead(27);


  float dirvent = sensorValue / 3.3;
  String wd = "other";

  if (dirvent > 1030 && dirvent < 1120) {
    wd = "Ouest";
  }
  if (dirvent > 910 && dirvent < 960) {
    wd = "Nord Ouest";
  }
  if (dirvent > 730 && dirvent < 810) {
    wd = "Nord";
  }
  if (dirvent > 550 && dirvent < 590) {
    wd = "Sud Ouest";
  }
  if (dirvent > 360 && dirvent < 385) {
    wd = "Nord Est";
  }
  if (dirvent > 185 && dirvent < 220) {
    wd = "Sud";
  }
  if (dirvent > 85 && dirvent < 125) {
    wd = "Sud Est";
  }
  if (dirvent > 0 && dirvent < 65) {
    wd = "Est";
  }

  if (wd == "other") {
    wd = old_wd;
  } else {
    old_wd = wd;
  }

  Serial.print("Wind Direction: ");
  Serial.println(wd);
}

Par contre, lorsque je l'intègre sur un programme intégrant le wifi et la connexion à mon Brocker, je n'ai plus de lecture de la valeur de la girouette. J'ai bien le défilement dans le moniteur série de Wind direction : mais aucune valeur ne remonte. Lorsque je téléverse le code seul de la girouette, ça re-fonctionne. Voici le code :

// --------------------------------------  Connection wifi et borker MOSQUITTO  ----------------------//

#include <WiFi.h>
#include <PubSubClient.h>

#define ssid "##########" 
#define password "###########" 
#define mqtt_server "192.168.1.32"



char message_buff[100];
long lastMsg = 0;   
// long lastRecu = 0;
bool debug = false;  
char msg[50];
int value = 0;
String consigne;

WiFiClient espClient;
PubSubClient client(espClient);


//---------------------------------  WIFI  -----------------------------------------//

void setupWifi() 
{ 
  Serial.println("\n");
  WiFi.begin(ssid, password);
  Serial.print("Tentative de connexion...");

    
  while(WiFi.status() != WL_CONNECTED)
  {
        Serial.print(".");
        delay(100);
  }
}

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
    
  }
  payload[length]='\0';
  String cons = String((char*)payload);
  consigne = cons;
  Serial.println();
  }

void reconnect() 
{
    //Boucle jusqu'à obtenur une reconnexion
     while (!client.connected()) {
     //Serial.print("Connexion au serveur MQTT...");
    // si MQTT sécurisé alors
    if (client.connect("ESP32Bassin")) {
   // if (client.connect("WeemosD1")) {
      //Serial.println("connected");
      //Une fois connecté, on peut s'inscrire à un Topic
      client.subscribe("Relais/eclairage/jardin");
      debug = true;
    }
    else {
      Serial.print("failed, erreur : ");
      Serial.print(client.state());
      debug = false;
      Serial.println("5 secondes avant de recommencer");
      delay(5000);
    }
  } 
}

void setup() {

  Serial.begin(115200);
  analogRead(27);

  setupWifi();
  delay(1000); 
  Serial.println("\n");
  Serial.println("Connexion etablie!");
  Serial.print("Adresse IP: ");
  Serial.println(WiFi.localIP());
  delay(5000);
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
  Serial.print("Serveur MQTT...connected");
  delay(500);

}

void loop() {  

if (!client.connected()) {reconnect();}
  client.loop();

  Lecture_girouette();

}

void Lecture_girouette() {
 
 static String old_wd;

  delay(500);
  
  int sensorValue = analogRead(27);
  

  float dirvent = sensorValue / 3.3 ;
  String wd = "other";
  
  if(dirvent > 1030 &&  dirvent < 1120 ){
    wd = "Ouest";
  }
  if(dirvent > 910 &&  dirvent < 960 ){
    wd = "Nord Ouest";
  }
  if(dirvent > 730 &&  dirvent < 810 ){
    wd = "Nord";
  }
  if(dirvent > 550 &&  dirvent < 590 ){
    wd = "Sud Ouest";
  }
  if(dirvent > 360 &&  dirvent < 385 ){
    wd = "Nord Est";
  }
  if(dirvent > 185 &&  dirvent < 220 ){
    wd = "Sud";
  }
  if(dirvent > 85 &&  dirvent < 125 ){
    wd = "Sud Est";
  }
  if(dirvent > 0 &&  dirvent < 65 ){
    wd = "Est";
  }    

  if(wd == "other") {
    wd = old_wd;
  } else {
    old_wd = wd;
  }
  
  Serial.print("Wind Direction: ");
  Serial.println(wd);

 }

Avez vous une idée sur ce problème ?

Ludo

Bonsoir @udina

le GPIO27 (alias ADC2 CH7) n'est pas utilisable en entrée analogique lorsque le WIFI est activé
Le WIfi mobilise l'ADC2 pour ses propres besoins

-> Câbler le capteur sur l'une des 6 entrées analogiques desservies par l'ADC1

voir ici ESP32 Analog Input with Arduino IDE | Random Nerd Tutorials

Merci pour le lien, je comprends mieux !

Bonne soirée et passer un bon réveillon :wink:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.