MQTT + Arduino IDE + ESP8266
Publié : 12 mars 2017, 15:29
Bonjour, je me bas depuis quelques heures avec le protocole MQTT. Je souhaite programmer un ESP8266 avec l'IDE Arduino pour que, via le protocole MQTT, lorsque j'appuis sur un bouton branché sur le ESP8266 il me passe un interrupteur virtuel Domoticz à on où à off.
J'utilise ce code pioché à droite à gauche :
Pour "déboguer" j'ai :
-vérifié mon bouton physique avec l'allumage d'une led
-testé Réacticz sur ma tablette avec MQTT et cela fonctionne bien
Qu'est ce que je pourrait tester d'autre ? Il existe pas une sorte de "log" pour voir ce qu'il ce passe chez Mosquitto ?
J'utilise ce code pioché à droite à gauche :
Code : Tout sélectionner
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
// Update these with values suitable for your network.
const char* ssid = "Livebox-42C1";
const char* password = "LMOoo58F566DdPOLZfrdk5s5s5fk";
const char *topicin = "domoticz/in";
const char *topicout = "domoticz/out";
const char *msgContactOn = "{\"command\": \"switchlight\", \"idx\": 37, \"switchcmd\": \"On\", \"level\": 100}";
const char *msgContactOff = "{\"command\": \"switchlight\", \"idx\": 37, \"switchcmd\": \"On\", \"level\": 100}";
const char* mqtt_server = "broker.mqtt-dashboard.com";
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;
void setup_wifi() {
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
randomSeed(micros());
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
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]);
}
Serial.println();
// Switch on the LED if an 1 was received as first character
if ((char)payload[0] == '1') {
digitalWrite(BUILTIN_LED, LOW); // Turn the LED on (Note that LOW is the voltage level
// but actually the LED is on; this is because
// it is acive low on the ESP-01)
} else {
digitalWrite(BUILTIN_LED, HIGH); // Turn the LED off by making the voltage HIGH
}
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Create a random client ID
String clientId = "ESP8266Client-";
clientId += String(random(0xffff), HEX);
// Attempt to connect
if (client.connect(clientId.c_str())) {
Serial.println("connected");
// Once connected, publish an announcement...
client.publish("outTopic", "hello world");
// ... and resubscribe
client.subscribe("inTopic");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void setup() {
pinMode(4, INPUT_PULLUP);
pinMode(14, OUTPUT);
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
if (digitalRead(4) == LOW) { // check if the input is HIGH (button released)
{client.publish(topicin, msgContactOn);
digitalWrite(14,HIGH);
}
}
else {
{client.publish(topicin, msgContactOff);
digitalWrite(14,LOW);
}
}
delay(100);
} -vérifié mon bouton physique avec l'allumage d'une led
-testé Réacticz sur ma tablette avec MQTT et cela fonctionne bien
Qu'est ce que je pourrait tester d'autre ? Il existe pas une sorte de "log" pour voir ce qu'il ce passe chez Mosquitto ?