Contrôle Esp8266 via Internet par le protocole MQTT

Contrôle Esp8266 via Internet par le protocole MQTT
Bonjour à tous ! Dans cet article, nous allons expliquer en détail comment configurer à distance un module esp8266 en utilisant une application Android via le protocole MQTT en seulement 20 minutes de temps libre.

L'idée de contrôle et de surveillance à distance a toujours captivé les esprits des passionnés d'électronique et de programmation. En effet, la possibilité d'obtenir ou d'envoyer des données à tout moment, quelle que soit sa localisation, ouvre de vastes possibilités. Dans mes précédents articles ( Article 1 et Article 2) j'ai tenté d'explorer plusieurs variantes disponibles et relativement simples de mise en œuvre du contrôle à distance des microcontrôleurs via Internet. Cependant, le temps et le monde ne restent pas en place - le progrès continue son inexorable avance. En peu de temps, le module esp8266 a gagné une large popularité grâce à son faible coût et à son Wi-Fi intégré, devenant l'un des éléments clés de la "maison intelligente".

Actuellement, MQTT est le protocole de transmission de données le plus avancé et le plus populaire entre les dispositifs au sein des systèmes de "maison intelligente". Il présente plusieurs avantages par rapport à d'autres protocoles :
— faible consommation de trafic;
— connexion entre le client et le serveur toujours ouverte;
— ne surcharge pas le canal Internet;
— absence de délais dans la transmission des données;
— système d'abonnement pratique aux sujets;
Tout cela permet une surveillance et un contrôle en temps réel. Cependant, MQTT nécessite la présence de son propre serveur qui agit comme un intermédiaire entre les clients du réseau. Il y a deux options : soit créer son propre serveur, soit utiliser des services tiers.

Le système de gestion décrit se compose de deux parties principales : un serveur MQTT (qui est généralement unique) et plusieurs clients. Dans notre cas, l'application Android et le module esp8266 serviront de clients.

Le fonctionnement du système est le suivant. Les clients se connectent au serveur et, immédiatement après la connexion, chacun d'eux s'abonne aux sujets qui l'intéressent. Toutes les communications entre les clients transitent par le serveur, qui redirige les données aux autres clients en fonction de leurs abonnements.

Serveur MQTT.

Dans notre cas, nous allons utiliser un service extrêmement pratique www.cloudmqtt.com qui propose un plan tarifaire gratuit (Cute Cat), totalement suffisant pour répondre aux besoins de la mise en place d'un petit système de « maison intelligente ».
Contrôle Esp8266 via Internet par le protocole MQTT
Nous allons nous inscrire sur le site et obtenir les données nécessaires pour accéder au serveur. Lors de la configuration des clients, il est nécessaire d'utiliser un port standard (sans SSL ni TLS).
Contrôle Esp8266 via Internet par le protocole MQTT

Application sur Android.

Notre application agira comme une télécommande pour le microcontrôleur, tout en recevant et affichant toutes les informations obtenues de l'esp8266.

L'application s'appelle IoT MQTT Dashboard et se présente sous la forme d'un client MQTT prêt à l'emploi avec un petit nombre de widgets très pratiques. Vous pouvez voir plus en détail le fonctionnement de l'application dans la vidéo.

Esp8266.

Le module est programmé dans l'environnement de programmation Arduino, cependant, je tiens à signaler que le module rencontre des problèmes de programmation dans les dernières versions d'Arduino, donc je recommande d'utiliser la version 1.6.4.
À titre d'exemple, un LED (broche 5) et un capteur de température ds18b20 (broche 2) sont connectés à l'esp8266.
Comme il est nécessaire d'obtenir des données pour contrôler la LED, après connexion, l'esp doit s'abonner au topic correspondant « test/led », sinon toutes les données envoyées passeront à côté de notre microcontrôleur.
Pour l'envoi des données de température, aucune souscription n'est nécessaire, mais lors de la transmission des valeurs de température, il est impératif d'indiquer le topic auquel ces données seront envoyées.

Voici un sketch avec des commentaires détaillés.

Sketch Esp8266_mqtt.ino// Светодиод подлкючен к 5 пину
// Датчик температуры ds18b20 к 2 пину

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

const char *ssid = "AIRPORT"; // Nom du point d'accès wifi
const char *pass = "PASSWORD"; // Mot de passe du point d'accès

const char *mqtt_server = "server"; // Nom du serveur MQTT
const int mqtt_port = 11140; // Port pour la connexion au serveur MQTT
const char *mqtt_user = "Login"; // Identifiants du serveur
const char *mqtt_pass = "Pass"; // Mot de passe du serveur

#define BUFFER_SIZE 100

bool LedState = false;
int tm=300;
float temp=0;

// Функция получения данных от сервера

void callback(const MQTT::Publish& pub)
{
Serial.print(pub.topic()); // Affiche le nom du topic sur le port série
Serial.print(" => ");
Serial.print(pub.payload_string()); // Affiche la valeur des données reçues sur le port série

String payload = pub.payload_string();

if(String(pub.topic()) == "test/led") // Vérifie si les données proviennent du topic souhaité
{
int stled = payload.toInt(); // Convertit les données reçues en type integer
digitalWrite(5,stled); // Allume ou éteint la LED selon les valeurs reçues
}
}

WiFiClient wclient;
PubSubClient client(wclient, mqtt_server, mqtt_port);

void setup() {

sensors.begin();
Serial.begin(115200);
delay(10);
Serial.println();
Serial.println();
pinMode(5, OUTPUT);
}

void loop() {
// подключаемся к wi-fi
if (WiFi.status() != WL_CONNECTED) {
Serial.print("Connecting to ");
Serial.print(ssid);
Serial.println("...");
WiFi.begin(ssid, pass);

if (WiFi.waitForConnectResult() != WL_CONNECTED)
return;
Serial.println("WiFi connected");
}

// подключаемся к MQTT серверу
if (WiFi.status() == WL_CONNECTED) {
if (!client.connected()) {
Serial.println("Connecting to MQTT server");
if (client.connect(MQTT::Connect("arduinoClient2")
.set_auth(mqtt_user, mqtt_pass))) {
Serial.println("Connected to MQTT server");
client.set_callback(callback);
client.subscribe("test\/led"); // Nous nous abonnons au topic avec les données pour la LED
} else {
Serial.println("Could not connect to MQTT server");
}
}

if (client.connected()){
client.loop();
TempSend();
}

}
} // fin de la boucle principale

// Функция отправки показаний с термодатчика
void TempSend(){
if (tm==0)
{
sensors.requestTemperatures(); // Nous récupérons la valeur de température du capteur
float temp = sensors.getTempCByIndex(0);
client.publish("test\/temp",String(temp)); // Nous envoyons la valeur de température au topic pour le capteur
Serial.println(temp);
tm = 300; // pause entre les envois de valeurs de température d'environ 3 secondes
}
tm--;
delay(10);
}

Nous obtenons ainsi un outil pratique pour le contrôle à distance et la surveillance des données, qui est assez simple à apprendre et accessible même aux débutants.

Vidéo démontrant le fonctionnement du système de contrôle

Lire la vidéo

Instructions vidéo détaillées pour configurer le système

Lire la vidéo

Une des options d'application du contrôle esp8266 via le protocole MQTT

Lire la vidéo

Contrôle de la bande LED via Internet

Lire la vidéo

Si vous avez des questions sur ce matériel, je vous recommande de regarder la deuxième partie de la vidéo, où le matériel est présenté de manière plus visuelle.

L'archive contient le croquis et toutes les bibliothèques nécessaires pour flasher le microcontrôleur avec le croquis de l'exemple.
Je vous rappelle que la bibliothèque ESP8266WiFi.h n'est pas incluse dans cette archive, elle est installée via le gestionnaire de cartes dans l'environnement Arduino.

ARCHIVE

Serveur MQTT — www.cloudmqtt.com

Lien vers l'application IoT MQTT Dashboard — play.google.com/store/apps/details?id=com.thn.iotmqttdashboard&hl=fr

Merci à tous pour votre attention.

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster