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 …
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 )
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!