Bonjour,
je connais rien en Arduino a part faire du copier collé, je cherche via un esp32 a remonter une info binaire (contact qui se fermerait…) via jmqtt .
j arrive a mettre ce code dans l esp. Le moniteur série montre bien le binaire. l’esp est bien connecté en wifi;
le topic renseigné …l équipement créé dans jmqtt ok ;
Mais quel mécanique dans le code pour remonter l’information?
Tu veux récupérer l’état du bouton via topic? c’est bien ça ?
#include Pubsubclient ne suffit pas ?
oui l état binaire de la sortie 32
pour me faire un capteur simple
Dac, et c’est publié sur mqtt_explorer ou pas?
je n’ai pas regardé
a part sur jmqtt en temps réel mais …
essaies « client.publish (topic, buttonState) » pluton que « bouton » qui n’est pas défini
j essaie cela
et check sur mqqt_explorer, tu devrais avoir 1 ou 0 comme valeur, après tu peux mettre un nom devant ta variable pour la repérer facilement
je viens d’install mqtt explorer je regarde
cela ne remonte pas
tu pourrais m’envoyer ton code formater stp parce que je vois pas rand chose
ok je fais ca
Ah j’ ai un truc buttonState = jeedom/buttonState
#include "WiFi.h"
#include "PubSubClient.h"
#include "Wire.h"
// WiFi
const char *ssid = "xxxxxxxxxxxx"; // Entrez votre SSID WiFi
const char *password = "xxxxxxxxxx"; // Entrez votre mot de passe WiFi
// MQTT Broker
const char *mqtt_broker = "192.168.1.160";
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);
}
}
// Publish et subscribe
client.publish(topic, "jeedom/buttonState");
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);
}
}
Hello,
Je ne suis pas spécialiste du code mais;
tu peux déplacer dans le global:
// Publish et subscribe
void MQTTsend() {
String buttonStateString = String(buttonState);
client.publish(topic, buttonStateString.c_str());
client.subscribe(topic);
}
et tu rajoute dans la loop:
void loop() {
delay(1000);
MQTTsend();
ce qui donne :
#include "WiFi.h"
#include "PubSubClient.h"
#include "Wire.h"
// WiFi
const char *ssid = "xxxxxxxxxxxxxxx"; // Entrez votre SSID WiFi
const char *password = "xxxxxxxxxxxxxxx"; // Entrez votre mot de passe WiFi
// MQTT Broker
const char *mqtt_broker = "192.168.1.160";
const char *topic = "bouton_esp";
const char *mqtt_username = "jeedom";
const char *mqtt_password = "xxxxxxxxxxx";
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;
// Publish et subscribe
void MQTTsend() {
String buttonStateString = String(buttonState);
client.publish(topic, buttonStateString.c_str());
client.subscribe(topic);
}
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);
}
}
/*
// Publish et subscribe
client.publish(topic, "jeedom/buttonState");
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() {
delay(1000);
MQTTsend();
buttonState = digitalRead(buttonPin);
//Serial.println(buttonState); //debug
if (buttonState == 1) {
// Allume la led
digitalWrite(ledPin, LOW);
} else {
// Eteins la led
digitalWrite(ledPin, HIGH);
}
}
Tu as aussi le bouton qui est pas bon car sur le gpio 32 tu es HIGH par défaut sur l’esp32
ok je vois le probleme, je suis dans le train donc pas moyen de tester mais essaies avec ces modifications :
#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
const char *mqtt_broker = "192.168.1.XXX";
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
bool buttonState = 0;
//conversion string
void setup() {
const char*button ;
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
client.publish(topic, button, String(buttonState) );
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);
}
}
Hello,
Je passe juste par là, mais pourquoi ne pas simplement utiliser un cade déjà fait, maintenu et répondant à la majorité des cas d’usages génériques comme ESPEasy ou Tasmota pour ton usage ?
Bad
parce que c’est quand même plus marrant quand on se prend un peu la tête!
Oui,ce serait plus simple, mais j’aime bien connaitre le pourquoi du comment ? la mécanique du truc quoi.
Aussi je suis sur Mac et je ne sais pas sur que ces solutions soient compatibles sur Mac OS ?
Allez essaie en cours…