Note

Bonjour, bienvenue dans la communauté des passionnés de SunFounder Raspberry Pi & Arduino & ESP32 sur Facebook ! Plongez plus profondément dans l’univers de Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.

Pourquoi nous rejoindre ?

  • Support d’experts : Résolvez les problèmes après-vente et les défis techniques avec l’aide de notre communauté et de notre équipe.

  • Apprendre et partager : Échangez des conseils et des tutoriels pour améliorer vos compétences.

  • Aperçus exclusifs : Bénéficiez d’un accès anticipé aux annonces de nouveaux produits et aux avant-premières.

  • Réductions spéciales : Profitez de réductions exclusives sur nos derniers produits.

  • Promotions festives et cadeaux : Participez à des concours et promotions de vacances.

👉 Prêt à explorer et créer avec nous ? Cliquez sur [Ici] et rejoignez-nous dès aujourd’hui !

8.4 Communication IoT avec MQTT

Ce projet se concentre sur l’utilisation de MQTT, un protocole de communication populaire dans le domaine de l’Internet des Objets (IoT). MQTT permet aux appareils IoT d’échanger des données en utilisant un modèle de publication/abonnement, où les appareils communiquent via des sujets.

Dans ce projet, nous explorons la mise en œuvre de MQTT en construisant un circuit incluant une LED, un bouton et un thermistor. Le microcontrôleur ESP32 carte est utilisé pour établir une connexion WiFi et communiquer avec un courtier MQTT. Le code permet au microcontrôleur de s’abonner à des sujets spécifiques, de recevoir des messages et de contrôler la LED en fonction des informations reçues. De plus, le projet montre comment publier des données de température du thermistor sur un sujet désigné lorsque le bouton est pressé.

Composants requis

Pour ce projet, nous avons besoin des composants suivants.

Il est certainement pratique d’acheter un kit complet, voici le lien :

Nom

ARTICLES DANS CE KIT

LIEN

Kit de démarrage ESP32

320+

ESP32 Starter Kit

Vous pouvez également les acheter séparément à partir des liens ci-dessous.

INTRODUCTION DES COMPOSANTS

LIEN D’ACHAT

ESP32 carte

Acheter

Extension de caméra ESP32

ACHETER

Plaque d’essai

Acheter

Fils de connexion

Acheter

Résistance

Acheter

LED

Acheter

Bouton

Acheter

Thermistance

Acheter

Téléchargement du code

  1. Montez le circuit.

    Note

    Lors de l’établissement d’une connexion WiFi, seuls les broches 36, 39, 34, 35, 32, 33 peuvent être utilisées pour la lecture analogique. Assurez-vous que le thermistor est connecté à ces broches désignées.

    ../../_images/iot_4_matt_bb.png
  2. Ensuite, connectez l’ESP32 carte à l’ordinateur à l’aide du câble USB.

    ../../_images/plugin_esp32.png
  3. Ouvrez le code.

    • Ouvrez le fichier iot_4_mqtt.ino situé dans le répertoire esp32-starter-kit-main\c\codes\iot_4_mqtt, ou copiez le code dans l’Arduino IDE.

    • Après avoir sélectionné la carte (ESP32 Dev Module) et le port approprié, cliquez sur le bouton Upload.

    • Toujours afficher « Unknown COMxx » ?

    • La bibliothèque PubSubClient est utilisée ici, vous pouvez l’installer depuis le Library Manager.

      ../../_images/mqtt_lib.png
  4. Trouvez les lignes suivantes et modifiez-les avec votre SSID et PASSWORD.

    // Remplacez les variables suivantes par votre combinaison SSID/Mot de passe
    const char* ssid = "SSID";
    const char* password = "PASSWORD";
    
  5. Trouvez la ligne suivante et modifiez votre unique_identifier. Assurez-vous que votre unique_identifier est vraiment unique car tout identifiant identique tentant de se connecter au même courtier MQTT peut entraîner un échec de connexion.

    // Ajoutez l'adresse de votre courtier MQTT, exemple :
    const char* mqtt_server = "broker.hivemq.com";
    const char* unique_identifier = "sunfounder-client-sdgvsda";
    

Abonnement au sujet

  1. Pour éviter les interférences des messages envoyés par d’autres participants, vous pouvez le définir comme une chaîne obscure ou peu commune. Remplacez simplement le sujet actuel SF/LED par le nom de sujet souhaité.

    Note

    Vous avez la liberté de définir le sujet comme n’importe quel caractère souhaité. Tout appareil MQTT qui s’est abonné au même sujet pourra recevoir le même message. Vous pouvez également vous abonner simultanément à plusieurs sujets.

    void reconnect() {
        // Boucle jusqu'à ce que nous soyons reconnectés
        while (!client.connected()) {
            Serial.print("Attempting MQTT connection...");
            // Tentative de connexion
            if (client.connect(unique_identifier)) {
                Serial.println("connected");
                // S'abonner
                client.subscribe("SF/LED");
            } else {
                Serial.print("failed, rc=");
                Serial.print(client.state());
                Serial.println(" try again in 5 seconds");
                // Attendre 5 secondes avant de réessayer
                delay(5000);
            }
        }
    }
    
  2. Modifiez la fonctionnalité pour répondre au sujet abonné. Dans le code fourni, si un message est reçu sur le sujet SF/LED, il vérifie si le message est on ou off. En fonction du message reçu, il modifie l’état de sortie pour contrôler l’allumage ou l’extinction de la LED.

    Note

    Vous pouvez le modifier pour n’importe quel sujet auquel vous êtes abonné, et vous pouvez écrire plusieurs instructions if pour répondre à plusieurs sujets.

    void callback(char* topic, byte* message, unsigned int length) {
        Serial.print("Message arrived on topic: ");
        Serial.print(topic);
        Serial.print(". Message: ");
        String messageTemp;
    
        for (int i = 0; i < length; i++) {
            Serial.print((char)message[i]);
            messageTemp += (char)message[i];
        }
        Serial.println();
    
        // Si un message est reçu sur le sujet "SF/LED", vérifiez si le message est "on" ou "off".
        // Change l'état de sortie en fonction du message
        if (String(topic) == "SF/LED") {
            Serial.print("Changing state to ");
            if (messageTemp == "on") {
                Serial.println("on");
                digitalWrite(ledPin, HIGH);
            } else if (messageTemp == "off") {
                Serial.println("off");
                digitalWrite(ledPin, LOW);
            }
        }
    }
    
  3. Après avoir sélectionné la carte correcte (ESP32 Dev Module) et le port, cliquez sur le bouton Upload.

  4. Ouvrez le moniteur série et si les informations suivantes sont imprimées, cela indique une connexion réussie au serveur MQTT.

    WiFi connecté
    Adresse IP :
    192.168.18.77
    Tentative de connexion MQTT...connecté
    

Publication de messages via HiveMQ

HiveMQ est une plateforme de messagerie qui fonctionne comme un courtier MQTT, facilitant le transfert de données rapide, efficace et fiable vers les appareils IoT.

Notre code utilise spécifiquement le courtier MQTT fourni par HiveMQ. Nous avons inclus l’adresse du courtier MQTT HiveMQ dans le code comme suit :

// Ajoutez l'adresse de votre courtier MQTT, exemple :
const char* mqtt_server = "broker.hivemq.com";
  1. À présent, ouvrez le HiveMQ Web Client dans votre navigateur web.

  2. Connectez le client au proxy public par défaut.

    ../../_images/sp230512_092258.png
  3. Publiez un message dans le sujet auquel vous vous êtes abonné. Dans ce projet, vous pouvez publier on ou off pour contrôler votre LED.

    ../../_images/sp230512_140234.png

Publication de messages vers MQTT

Nous pouvons également utiliser le code pour publier des informations sur le sujet. Dans cette démonstration, nous avons codé une fonctionnalité qui envoie la température mesurée par le thermistor sur le sujet lorsque vous appuyez sur le bouton.

  1. Cliquez sur Ajouter une nouvelle abonnement au sujet.

    ../../_images/sp230512_092341.png
  2. Remplissez les sujets que vous souhaitez suivre et cliquez sur S’abonner. Dans le code, nous envoyons des informations de température sur le sujet SF/TEMP.

    void loop() {
        if (!client.connected()) {
            reconnect();
        }
        client.loop();
    
        // si le bouton est pressé, publier la température sur le sujet "SF/TEMP"
        if (digitalRead(buttonPin)) {
                long now = millis();
                if (now - lastMsg > 5000) {
                lastMsg = now;
                char tempString[8];
                dtostrf(thermistor(), 1, 2, tempString);
                client.publish("SF/TEMP", tempString);
            }
        }
    }
    
  3. Ainsi, nous pouvons surveiller ce sujet sur HiveMQ, nous permettant de voir les informations que vous avez publiées.

    ../../_images/sp230512_154342.png