Esp32 mqtt info binaire

La compatibilité mac n’entre pas en compte puisque ces firmwares sont flashés directement sur l’arduino.

Je parlais des firmwares de TASMOTA ou de d’ ESPEasy

Jai réussi a téléverser sans erreur ton code mais rien a priori qui remonte vers mqtt…

Moi également! Tu peux les flasher et les utiliser avec ton mac puisque rien n’est installé sur l’ordi, uniquement sur le module.

C’est bizarre…tu n’as même pas le nom des topics sur mqtt-explorer?

ben
non bizarre

je vais regarder les solutions tasmota ou ESPEasy

client.publish(« topic », « button », String(buttonState) );

en mettant des «  » le topic remonte mais indique topic=button

2 âme essai! je suis pas chez moi et sur mon telephone donc je ne peux malheureusement pas tester…

je vais essayer «  » autour de string…

oui normal! tu ne peux faire remonter que des « char » pour les valeurs il faut passer par un string, c’est toi qui a fais le code?

tu verras « string » mais ça changera pas le probleme car ce qu’on veut c’est la valeur du bouton

oui en copiant … :rofl:

ok ben test avec ce que je t’ai envoyé, normalement tu devrais avoir un « topic_button » avec les valeurs 1 ou 0

#include "WiFi.h"
#include "PubSubClient.h"
#include "Wire.h"
#include "wifi.h"
  // WiFi 
const char *ssid = ""; // Entrez votre SSID WiFi  
const char *password = ""; // Entrez votre mot de passe WiFi 
  
// MQTT Broker 

#define button_topic  "test_button"

const char *mqtt_broker = "192.168.1.1"; 
const char *topic = "buttonState"; 
const char *mqtt_username = "jeedom"; 
const char *mqtt_password = "xxxxxxxxxxxxxxxxxxx"; 
const int mqtt_port = 1883; 
WiFiClient espClient; 
PubSubClient client(espClient); 
String jsontomqtt;

const int buttonPin = 32;
const int ledPin =  23;

// Etat du bouton poussoir
int buttonState = 0;
//conversion string


void setup() { 

   buttonState = digitalRead(buttonPin);
  
 //Mise de la vitesse de transmission à 115200; 
 Serial.begin(115200); 
 
 //Configuration du pin en entrée pullup
    pinMode(buttonPin, INPUT_PULLUP);
    pinMode(ledPin, OUTPUT);
    
 // Connecting to a Wi-Fi network 
 WiFi.begin(ssid, password); 
 while (WiFi.status() != WL_CONNECTED) { 
 delay(500); 
 Serial.println("Connecting to WiFi.."); 
  } Serial.println("Connected to the Wi-Fi network"); 
  //connexion au broker MQTT  
 client.setServer(mqtt_broker, mqtt_port); 
 client.setCallback(callback); 
 while (!client.connected()) { 
 String client_id = "esp32-client-"; 
 client_id += String(WiFi.macAddress()); 
 Serial.printf("The client %s connects to the public MQTT brokern", client_id.c_str()); 
 if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) { 
  Serial.println("Public EMQX MQTT broker connected"); 
  } else { 
  Serial.print("failed with state "); 
  Serial.print(client.state()); 
  delay(2000); 
  } 
  } 
   
  // Publish et subscribe 
  jsontomqtt = "{"+ String(buttonState) +"}";
  client.publish(button_topic, jsontomqtt.c_str(), true);
  client.subscribe(topic);
  } 
  // Reception du message MQTT 
void callback(char *topic, byte *payload, unsigned int length) { 
Serial.print("Message arrived in topic: "); 
Serial.println(topic); 
  Serial.print("Message:"); 
  for (int i = 0; i < length; i++) { 
Serial.print((char) payload[i]); 
  } 
  Serial.println(); 
  Serial.println("-----------------------"); 
  } 
void loop() { 

    buttonState = digitalRead(buttonPin);
    Serial.println(buttonState);

    if (buttonState == 1) {
        // Allume la led
        digitalWrite(ledPin, HIGH);
    } else {
        // Eteins la led
        digitalWrite(ledPin, LOW);
        
      }
    }
    

oui je test ce que tu m’as envoyé et cela m’indique : button
bizarre?
ah zut j’ai pas vu ton dernier mess
j essaie cela merci

après si pas de valeur dans le topic, il faudrait tester sur le serial pour voir si les données remontent bien

Bonjour je n’ai pas réussi… je me suis donc tourné vers le plugin jeedouino avec succès.

salut, désolé je t’avais complètement oublié (entre les fêtes et la reprise boulot j’étais ailleurs :sweat_smile:)
tant mieux si ça fonctionne! voici le code modifié au cas ou (je l’ai testé et c’est good!) :

#include "WiFi.h"
#include "PubSubClient.h"
#include  "Wire.h"

#define topic_etat "Etat_Bouton"
  // WiFi 
const char *ssid = ""; // Entrez votre SSID WiFi  
const char *password = ""; // Entrez votre mot de passe WiFi 
  
// MQTT Broker 
const char *mqtt_broker = "192.168.1.xx"; 
const char *topic = "buttonState"; 
const char *mqtt_username = "jeedom"; 
const char *mqtt_password = "xxxxxxxxxxxxxxxxxxx"; 
const int mqtt_port = 1883; 
WiFiClient espClient; 
PubSubClient client(espClient); 

const int buttonPin = 32;
const int ledPin =  23;

// Etat du bouton poussoir
int buttonState = 0;

void setup() { 
 //Mise de la vitesse de transmission à 115200; 
 Serial.begin(115200); 
 
 //Configuration du pin en entrée pullup
    pinMode(buttonPin, INPUT_PULLUP);
    pinMode(ledPin, OUTPUT);
    
 // Connecting to a Wi-Fi network 
 WiFi.begin(ssid, password); 
 while (WiFi.status() != WL_CONNECTED) { 
 delay(500); 
 Serial.println("Connecting to WiFi.."); 
  } Serial.println("Connected to the Wi-Fi network"); 
  //connexion au broker MQTT  
 client.setServer(mqtt_broker, mqtt_port); 
 client.setCallback(callback); 
 while (!client.connected()) { 
 String client_id = "esp32-client-"; 
 client_id += String(WiFi.macAddress()); 
 Serial.printf("The client %s connects to the public MQTT brokern", client_id.c_str()); 
 if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) { 
  Serial.println("Public EMQX MQTT broker connected"); 
  } else { 
  Serial.print("failed with state "); 
  Serial.print(client.state()); 
  delay(2000); 
  } 
  
  } 
}
  
  // Reception du message MQTT 
void callback(char *topic, byte *payload, unsigned int length) { 
Serial.print("Message arrived in topic: "); 
Serial.println(topic); 
  Serial.print("Message:"); 
  for (int i = 0; i < length; i++) { 
Serial.print((char) payload[i]); 
  } 
  Serial.println(); 
  Serial.println("-----------------------"); 
  } 
void loop() { 

       buttonState = digitalRead(buttonPin);
    Serial.println(buttonState);

    if (buttonState == 1) {
        // Allume la led
        digitalWrite(ledPin, HIGH);
    } else {
        // Eteins la led
        digitalWrite(ledPin, LOW);
        
      }
      // Publish et subscribe 
  
  client.publish( topic_etat , String(buttonState).c_str());
  client.subscribe(topic);
  
    }
    

ah ok je vais essayer

Ça marche! Tu me diras si c’est bon!