Bonjour,
J'ai un ESP qui transmet des infos sur un topic (sofar2mqtt)
La publication se déroule bien et je reçois les données si je me connecte sur le client en ligne "http://www.emqx.io/"
Par contre je n'arrive pas à récupérer les données sur un autre ESP.
Voici mon code, si qqun a une idée du problème...
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
// WiFi
const char *ssid = "xxxxxxx"; // Enter your WiFi name
const char *password = "xxxxxxx"; // Enter WiFi password
// MQTT Broker
const char *mqtt_broker = "broker.emqx.io";
const char *topic = "topicXXXX";
const char *mqtt_username = "xxxxxxx";
const char *mqtt_password = "xxxxxxx";
const int mqtt_port = 1883;
WiFiClient espClient;
PubSubClient client(espClient);
void mqttReconnect()
{
//connecting to a mqtt broker
client.disconnect(); // Just in case.
delay(200);
client.setServer(mqtt_broker, mqtt_port);
client.setCallback(callback);
while (!client.connected()) {
String client_id = "Arduino";
//client_id += String(WiFi.macAddress());
Serial.printf("The client %s connects to the public mqtt broker\n", 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);
}
}
client.subscribe(topic);
}
void setup() {
// Set software serial baud to 115200;
Serial.begin(9600);
// connecting to a WiFi network
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to the WiFi network");
mqttReconnect();
Serial.println("Setup fini, attente message");
}
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() {
client.loop();
//make sure mqtt is still connected
if((!client.connected()) || !client.loop())
{
mqttReconnect();
}
}
Sur le pc, dans la page du broker je vois bien les données arriver toutes les 5-10 secondes du 1er module ESP mais rien sur le second.
Par contre si je poste un message sur le topic (pc) il arrive bien dans le second ESP. Il est donc bien connecté au broker
Je comprends pas…
il est fort probable que 'arduino' est déjà utilisé comme identifiant pour le broker !
ça pourrait expliquer le non fonctionnement de la souscription pour le second ESP8266
Des serial.print() sont présents dans la fonction de callback, ça devrait suffire à signaler l'arrivée d'une donnée pour un topic souscrit
Bonjour,
Le nom du 2ème ESP est unique sous la forme : Ard_DueXX:XX:XX:XX:XX:XX
Le topic est également unique sous la forme : Sofar2mqtt_XXXXXXXXXXX/state
Je me connecte au broker avec les même username et password sur les 2 ESP et via le PC
Pourtant rien n'arrive dans la fonction callback du 2ème ESP (sauf lorsque je fais un envoi "manuel" du PC vers le topic
1-Donc le second ESP aynt souscrit à un topic ne recoit que les données publiées à partir de l'ordi et non celles publitées par l'autre ESP , c'est bien ça ? (étant donné que la publication par l'autre ESP semble effective au vu de l'écran del'ordi)
2-version de MQTT utilsée actuellement côté broker ? (3 ? 5?)
3-pour les manipulations de mise au point avec l'ordi utilises tu un client comme MQTT Explorer, MQTTFx... ?
4-la souscription est elle OK avec un exemple de base de la bibliothèque PubSub ?
oui c'est tout à fait cela.
Sur l'ordi je suis connecté via "http://www.emqx.io/online-mqtt-client#/..."
J'utilise les librairies ESP8266WiFi.h et PubSubClient.h sur le 2ème ESP
Pour la souscription elle est ok; à la fin du setup du 2ème ESP je publie un message sur le topic et il s'affiche bien à l'ordi.
Je n'ai pas compris le point 2 "version de MQTT"
La bibliothèque PubSub utilise la version 3.1.1
Certains brokers proposent la vertion 5
c'est sans doute le cas des brokers d'EMQX ,que je n'utilise pas, il faut peut être faire sur sa consoie une action pour lui dire de travailler en version 3.1.1
oui en effet. Il faudrait que je trouve un broker 3.1.1. alors ? J'en avais essayé plusieurs mais le seul où j'ai réussi à me connecter (pour faire les tests je n'ai pas envie de payer un abonnement), c'est emqx.io