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