Table des matières:

Publication des données du capteur de pression sans fil à l'aide de MQTT : 7 étapes
Publication des données du capteur de pression sans fil à l'aide de MQTT : 7 étapes

Vidéo: Publication des données du capteur de pression sans fil à l'aide de MQTT : 7 étapes

Vidéo: Publication des données du capteur de pression sans fil à l'aide de MQTT : 7 étapes
Vidéo: Découverte MQTT - Installation de MOSQUITTO BROKER 2024, Juillet
Anonim
Publication de données de capteur de pression sans fil à l'aide de MQTT
Publication de données de capteur de pression sans fil à l'aide de MQTT

ESP32 et ESP 8266 sont des SoC très familiers dans le domaine de l'IoT. Ce sont en quelque sorte une aubaine pour les projets IoT. ESP 32 est un appareil avec WiFi et BLE intégrés. Donnez simplement votre SSID, mot de passe et configurations IP et intégrez les choses dans le cloud. Ici, dans ce instructable, nous réfléchirons à certains des termes de base de l'IoT comme la plate-forme IoT, MQTT, les portails captifs, etc. Alors, passons en revue

  • L'architecture IoT en termes très simples consiste en un appareil intégré et une plate-forme IoT pour mettre l'appareil dans le cloud. Ici, nous utilisons la plate-forme UbiDots IoT pour visualiser les données des capteurs.
  • La gestion des paramètres IP et des informations d'identification de l'utilisateur peut être un casse-tête pour l'utilisateur. Que faire si l'utilisateur souhaite modifier les informations d'identification WiFi ? Que faire si l'utilisateur souhaite changer les paramètres DHCP/IP statique ? Flasher l'ESP32 à chaque fois n'est pas fiable et même pas la solution à ces problèmes. Nous allons donc passer par le portail captif pour enregistrer les identifiants WiFi et autres configurations.
  • MQTT est en train de devenir un terme très courant dans le monde de l'IoT. il a dépassé les demandes et les réponses (HTTP) par Publier et S'abonner en raison de l'architecture rapide, robuste et allégée.

Ici, dans ce instructable, nous allons démontrer.

  • Donner des informations d'identification WiFi et MQTT à l'aide du portail captif.
  • Publication et abonnement de plusieurs données de capteurs à UbiDots.
  • Lecture des données du capteur à partir du capteur de pression et de température sans fil
  • Hébergement d'un formulaire Web à partir de l'ESP32.
  • Lecture et écriture à partir de SPIFFS ESP32.

Étape 1: Spécification matérielle et logicielle

Spécification matérielle

  • ESP32 Wi-Fi/BLE
  • Capteur de pression et de température sans fil

Spécification du logiciel

  • IDE Arduino
  • XCTU
  • Utilitaire Labview

Étape 2: Capteurs de pression et de température sans fil

Capteurs de pression et de température sans fil
Capteurs de pression et de température sans fil
Capteurs de pression et de température sans fil
Capteurs de pression et de température sans fil
Capteurs de pression et de température sans fil
Capteurs de pression et de température sans fil

Caractéristiques

  • Capteur de température de pression sans fil à longue portée de capteur de qualité industrielle
  • Plage de fonctionnement 0 à 14 000 mbar -40° à +85°C (-40° à 185°F)
  • Résolution de pression de calcul interne configurable 0,012 à 0,065 mbar
  • Résolution de température de calcul interne configurable 0,002 à 0,012 °C
  • Précision ±2,5 mbar, ±2 °C
  • Sorties de pression absolue, de pression relative et de changement d'altitude relative
  • Portée en visibilité directe de 2 milles avec antenne embarquée
  • Portée LOS supérieure jusqu'à 28 miles avec des antennes à gain élevé
  • Interface avec Raspberry Pi, Microsoft® Azure®, Arduino et plus
  • Réseau maillé sans fil utilisant DigiMesh®

Configuration du capteur de pression et de température sans fil à l'aide de Labview Utility et XCTU

Le capteur fonctionne en deux modes

  • Mode de configuration: configurez l'ID de casserole, le délai, le nombre de tentatives, etc.
  • Mode d'exécution: nous exécutons l'appareil en mode d'exécution. Et pour analyser ces valeurs, nous utilisons l'utilitaire Labview

Cette interface utilisateur Labview affiche les valeurs dans de jolis graphiques. Il affiche les valeurs actuelles et passées. Vous pouvez accéder à ce lien pour télécharger l'interface utilisateur Labview. cliquez sur l'icône Exécuter dans le menu de la page de destination pour passer en mode exécution.

Étape 3: connexion au Wi-Fi

Connexion au Wi-Fi
Connexion au Wi-Fi
Connexion au Wi-Fi
Connexion au Wi-Fi

Nous utilisons le portail captif pour enregistrer les informations d'identification WiFi et survoler les paramètres IP. Pour l'introduction détaillée sur le portail captif, vous pouvez passer par l'instructable suivante.

Le portail captif nous donne la possibilité de choisir entre les paramètres statiques et DHCP. Entrez simplement les informations d'identification telles que l'IP statique, le masque de sous-réseau, la passerelle et la passerelle de capteur sans fil sera configurée sur cette IP.

Une page Web est hébergée où une liste montrant les réseaux WiFi disponibles et là RSSI. Sélectionnez le réseau WiFi et le mot de passe et entrez soumettre. Les informations d'identification seront enregistrées dans l'EEPROM et le paramètre IP sera enregistré dans le SPIFFS. Vous trouverez plus d'informations à ce sujet dans cette instructable.

Étape 4: Configuration d'UbiDots sur ESP32

Configuration d'UbiDots sur ESP32
Configuration d'UbiDots sur ESP32

Ici, nous utilisons des capteurs de pression et de température sans fil avec l'appareil ESP 32 pour obtenir les données de température et d'humidité. Nous envoyons les données à UbiDots en utilisant le protocole MQTT. MQTT suit un mécanisme de publication et d'abonnement plutôt qu'une demande et une réponse. Il est plus rapide et fiable que HTTP. Cela fonctionne comme suit.

  • Nous utilisons le planificateur de tâches pour planifier la tâche, comme récupérer les données des capteurs, publier les lectures des capteurs, s'abonner au sujet MQTT.
  • Tout d'abord, incluez les fichiers d'en-tête du planificateur de tâches, son instance et planifie les tâches.
  • Nous avons programmé deux tâches faisant référence à deux opérations de contrôle différentes.

#define _TASK_TIMEOUT#include Planificateur ts; //---------Tâches------------// Tâche tSensor(4 * TASK_SECOND, TASK_FOREVER, &taskSensorCallback, &ts, false, NULL, &taskSensorDisable); Tâche tWiFi(10* TASK_SECOND, TASK_FOREVER, &taskWiFiCallback, &ts, false, NULL, &taskWiFiDisable);

  • La tâche 1 sert à lire la valeur du capteur, cette tâche s'exécute pendant 1 seconde jusqu'à ce qu'elle atteigne le délai d'attente de 10 secondes.
  • Lorsque la tâche1 atteint son délai d'expiration, nous nous connectons au courtier Wifi et MQTT local.
  • Maintenant, la tâche 2 est activée et nous désactivons la tâche 1
  • La tâche 2 sert à publier les données du capteur sur le courtier UbiDots MQTT, cette tâche s'exécute pendant 20 secondes jusqu'à ce qu'elle atteigne un délai d'attente de 20 secondes
  • Lorsque la tâche 2 atteint son délai d'expiration, la tâche 1 est à nouveau activée et la tâche 2 est désactivée. Ici encore, nous obtenons la valeur mise à jour et le processus continue.

Lecture des données du capteur I2C

Nous obtenons une trame de 29 octets des capteurs de température et d'humidité sans fil. Ce cadre est manipulé pour obtenir les données réelles de température et d'humidité

si (Série1.disponible())

{ data[0] = Serial1.read(); retard(k); if(data[0]==0x7E) { while (!Serial1.available()); for (i = 1; i< 36; i++) { data = Serial1.read(); retard(1); } if(data[15]==0x7F) /////// pour vérifier si les données reçues sont correctes { if(data[22]==0x06) //////// assurez-vous que le type de capteur est correct { int cTemp = ((((data[24]) * 256) + data[25])); int16_t abs_pressure = ((((uint16_t)(data[26])<<8)| data[27])*0.001); int rlt_pressure = ((((data[28]) * 256) + data[29])*0.001); int16_t delta_alt = ((((uint16_t)(data[30])<<8)| data[31])*0.01); batterie flottante = ((données[18] * 256) + données[19]); tension d'entretien = 0,00322 * batterie; Serial.print("Numéro de capteur "); Serial.println(data[16]); Serial.print("Type de capteur "); Serial.println(data[22]); Serial.print("Version du micrologiciel "); Serial.println(data[17]); Serial.print("Température en Celsius:"); Serial.print(cTemp); Serial.println("C"); Serial.print("Pression absolue:"); Serial.println(abs_pressure); Serial.print(" mbar"); Serial.print("Pression relative:"); Serial.println(rlt_pressure); Serial.print(" mbar"); Serial.print("Delta Altitude:"); Serial.println(delta_alt); Serial.print(" meter"); Serial.print("Valeur ADC:"); Serial.println(batterie); Serial.print("Tension de la batterie:"); Serial.print(tension); Serial.println("\n"); if (tension < 1) { Serial.println ("Il est temps de remplacer la batterie"); } } }else{ pour (i = 0; i< 36; i++) { Serial.print(data); Serial.print(", "); retard(1); }} } }

Connexion à l'API UbiDots MQTT

Incluez le fichier d'en-tête du processus MQTT

#comprendre

définir d'autres variables pour MQTT comme le nom du client, l'adresse du courtier, l'ID du jeton

#define TOKEN "BBFF-************************************" // Votre TOKEN Ubidots#define MQTT_CLIENT_NAME "******************************"

char mqttBroker = "things.ubidots.com";

charge utile char[100]; sujet char[150]; //créer une variable pour stocker le jeton d'ID de jeton

Étape 5: Publication des lectures des capteurs sur UbiDots

Publication des lectures de capteurs sur UbiDots
Publication des lectures de capteurs sur UbiDots

Créez des variables pour stocker différentes données de capteur et créez une variable char pour stocker le sujet

#define VARIABLE_LABEL_TEMPF "tempF" // Assertion du libellé de la variable#define VARIABLE_LABEL_TEMPC "tempC" // Assinger le libellé de la variable #define VARIABLE_LABEL_BAT "bat" #define VARIABLE_LABEL_HUMID "humid" // Assumer le libellé de la variable

char topic1[100];

char topic2[100]; char topic3[100];

publier les données dans le sujet MQTT mentionné, la charge utile ressemblera à { "tempc": {value: "tempData"}}

sprintf(sujet1, "%s", ""); sprintf(topic1, "%s%s", "/v1.6/devices/", DEVICE_LABEL); sprintf(charge utile, "%s", ""); // Nettoie la charge utile sprintf(payload, "{"%s\":", VARIABLE_LABEL_TEMPC); // Ajoute la valeur sprintf(payload, "%s{"value\":%s}", payload, str_cTemp); // Ajoute la valeur sprintf(payload, "%s}", payload); // Ferme les crochets du dictionnaire Serial.println(payload); Serial.println(client.publish(topic1, payload) ? "published": "notpublished"); //Faire de même pour les autres sujets

client.publish() publie les données sur UbiDots

Étape 6: Visualiser les données

Visualiser les données
Visualiser les données
  • Allez sur Ubidots et connectez-vous à votre compte.
  • Accédez au tableau de bord à partir de l'onglet Données répertorié en haut.
  • Cliquez maintenant sur l'icône "+" pour ajouter les nouveaux widgets.
  • Sélectionnez un widget dans la liste et ajoutez une variable et des appareils.
  • Les données des capteurs peuvent être visualisées sur le tableau de bord à l'aide de différents widgets.

Étape 7: Code général

Le code Over pour HTML et ESP32 se trouve dans ce référentiel GitHub.

Crédits

  • Carte de dérivation ncd ESP32.
  • Capteurs de pression et de température sans fil ncd
  • pubsubclient
  • UbiDots
  • Planificateur de tâches

Conseillé: