MQTT + Arduino IDE + ESP8266

Forum dédié au protocole MQTT : fonctionnement, intégration ...
Pour les questions concernant le plugin de FlyingDomotic, merci d'utiliser le sous-forum dédié.
Djodo
Messages : 86
Inscription : 23 févr. 2016, 12:32

MQTT + Arduino IDE + ESP8266

Message par Djodo »

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 :

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);   
 }  
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 ?
Ninipc
Messages : 101
Inscription : 28 nov. 2016, 20:07

Re: MQTT + Arduino IDE + ESP8266

Message par Ninipc »

Je peux pas t'aider sur le code je suis une bille mais pourquoi tu charges pas ESPeasy dans ton esp (que tu peux configurer en MQTT si tu préfères) et t'as une fonction bouton toute bête qui marche très bien
https://www.letscontrolit.com/wiki/index.php/Switch
Djodo
Messages : 86
Inscription : 23 févr. 2016, 12:32

Re: MQTT + Arduino IDE + ESP8266

Message par Djodo »

Je pose la question parce que je fait en sorte que certains de mes modules Esp8266 soient autonome ; qu'ils ne dépendent pas de Domoticz. Mais je souhaite tous de même qu'ils communique avec Domoticz. Pour l'instant je les fait communiquer avec des requêtes http. Mais comme apparemment MQTT est plus léger, rapide... que http, je voulais les faire communiqué avec MQTT. Voilà tout :)
Antori91

Re: MQTT + Arduino IDE + ESP8266

Message par Antori91 »

-
Dernière modification par Antori91 le 03 avr. 2021, 10:50, modifié 1 fois.
Djodo
Messages : 86
Inscription : 23 févr. 2016, 12:32

Re: MQTT + Arduino IDE + ESP8266

Message par Djodo »

Bonjour Antori91 :)

Désolé je n'ai pas retenté la programmation de MQTT dans l'IDE arduino depuis mon précédent post par manque de temps. Donc actuellement, les communications entre mets ESP8266 et Domoticz ce font par requêtes http. Une chose est sûr, c'est que je place la méthode de communication MQTT dans mets projets de perfectionnement de ma domotique. Lorsque j'aurait plus de temps je m'y pencherais, et si j'y arrive, je ferait des retours sur ce forum.

Merci pour les liens dès que j'aurais du temps je testerais ça ! ;)
Antori91

Re: MQTT + Arduino IDE + ESP8266

Message par Antori91 »

-
Dernière modification par Antori91 le 03 avr. 2021, 10:51, modifié 1 fois.
Antori91

Re: MQTT + Arduino IDE + ESP8266

Message par Antori91 »

-
Dernière modification par Antori91 le 03 avr. 2021, 10:51, modifié 1 fois.
Jeff
Messages : 1007
Inscription : 17 nov. 2016, 20:54
Localisation : Rennes (35)

Re: MQTT + Arduino IDE + ESP8266

Message par Jeff »

Version: 2023.1 sur VM Synology, docker Zwave Js UI (Z-stick GEN5, Fibaro...), Zigbeefordomoticz. Nextion RGB Led Screen
Antori91

Re: MQTT + Arduino IDE + ESP8266

Message par Antori91 »

-
Dernière modification par Antori91 le 03 avr. 2021, 10:51, modifié 2 fois.
Djodo
Messages : 86
Inscription : 23 févr. 2016, 12:32

Re: MQTT + Arduino IDE + ESP8266

Message par Djodo »

Merci du retour ! Pour ma part, n'ayant pas beaucoup de connaissance dans tous ce bidouillage, je pense rester avec les requêtes JSON. A moins que cela ce simplifie un jour...
Répondre