Table des matières:
- Étape 1: Spécification matérielle et logicielle
- Étape 2: Création d'un portail captif
- Étape 3: Fournir les identifiants WiFi et UbiDots
- Étape 4: Publication des lectures des capteurs sur UbiDots
- Étape 5: Visualiser les données
- Étape 6: Code général
Vidéo: UbiDots-Connecter un ESP32 et publier des données de capteurs multiples : 6 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:07
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 des capteurs de température et d'humidité 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
- ESP32 Wi-Fi/BLE
- Capteur de température et d'humidité sans fil
Spécification du logiciel
IDE Arduino
Étape 2: Création d'un portail captif
Un portail captif est une page Web qui s'affiche pour les utilisateurs nouvellement connectés avant qu'ils ne bénéficient d'un accès plus large aux ressources du réseau. Ici, nous servons trois pages Web pour choisir entre les paramètres DHCP et IP statique. nous pouvons définir l'adresse IP à ESP de deux manières.
- Adresse IP DHCP - c'est un moyen d'attribuer dynamiquement l'adresse IP à l'appareil. L'adresse IP par défaut de l'ESP est 192.168.4.1
- L'adresse IP statique - attribuant une adresse IP permanente à notre périphérique réseau. pour fournir l'adresse IP statique à l'appareil, nous devons définir l'adresse IP, l'adresse de la passerelle et le masque de sous-réseau.
La première page Web est hébergée au 192.168.1.77. Ici, l'utilisateur dispose des boutons radio pour choisir entre les paramètres DHCP et IP statique. Dans la page Web suivante, nous devons fournir les informations relatives à l'IP pour continuer.
Code HTML
Le code HTML des pages Web se trouve dans ce référentiel Github. Vous pouvez utiliser n'importe quel IDE ou éditeur de texte comme Sublime ou notepad++ pour créer des pages Web HTML.
- Créez d'abord une page Web HTML contenant deux boutons radio pour choisir entre DHCP et Static IP Settings.
- Créez maintenant le bouton pour soumettre votre réponse
- Donnez un nom aux boutons radio.
- La classe du serveur Web ESP prendra ces noms comme arguments et obtiendra la réponse des boutons radio en utilisant ces arguments
- Insérez maintenant un bouton « ENVOYER » pour envoyer la réponse à l'appareil. Dans les autres pages Web, nous avons des zones de texte.
- Donnez la valeur du nom et le type d'entrée à la zone de texte et ajoutez un bouton d'envoi pour « ENVOYER » soumettre la réponse.
- Créez un bouton 'RESET' pour réinitialiser le contenu du champ de texte.
Étape 3: Fournir les identifiants WiFi et UbiDots
Le principal problème se produit lors de la gestion des informations d'identification WiFi. Même si nous avons la bibliothèque WiFiMulti pour cela, nous pouvons donner plusieurs SSID et mots de passe à l'appareil et l'appareil se connectera au réseau disponible. Mais que faire si le réseau disponible n'est pas dans la liste WiFiMulti. Flasher l'appareil ESP32 en permanence n'est pas une solution fiable.
Pour résoudre ce problème, nous hébergeons une page Web où l'utilisateur peut soumettre le SSID et le mot de passe du réseau disponible. Cela fonctionne comme suit.
- La page Web est hébergée sur l'adresse IP statique ou l'adresse IP DHCP choisie par l'utilisateur à partir du portail captif
- Cette page Web contient des champs de texte pour saisir le SSID, le mot de passe et l'ID de jeton UBIDOTS pour connecter l'appareil à UbiDots.
- Entrez le SSID et le mot de passe de votre WiFi local dans les champs de saisie, entrez l'identifiant du jeton UbiDot et entrez SOUMETTRE
- Ces informations d'identification sont enregistrées dans l'EEPROM d'ESP32
- Après 60 secondes, l'appareil se déconnectera automatiquement du point d'accès
-
La prochaine fois que vous allumerez l'appareil, l'utilisateur n'aura pas à suivre cette procédure, l'appareil récupérera automatiquement les informations d'identification de l'utilisateur dans l'EEPROM et continuera à publier les lectures du capteur sur UbiDots.
Étape 4: Publication des lectures des capteurs sur UbiDots
Ici, nous utilisons des capteurs de température et d'humidité 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 un 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 des données de température et d'humidité réelles
uint8_t données[29];
data[0] = Serial1.read(); retard(k); //chck for start byte if(data[0]==0x7E) { while (!Serial1.available()); for (i = 1; i< 29; i++) { data = Serial1.read(); retard(1); } if(data[15]==0x7F) /////// pour vérifier si les données reçues sont correctes { if(data[22]==1) //////// assurez-vous que le type de capteur est correct {
humidité = ((((données[24]) * 256) + données[25]) /100,0); humidité /=10,0; cTempint = (((uint16_t)(data[26])<<8)| data[27]); cTemp = (float)cTempint /100,0; cTemp /= 10,0; fTemp = cTemp * 1,8 + 32; fTemp /= 10,0; batterie = aléatoire (100, 327); tension = batterie/100; nodeId = données[16];}
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 (nous récupérons l'ID du jeton à partir de l'EEPROM)
#define MQTT_CLIENT_NAME "ClientVBShightime123"
char mqttBroker = "things.ubidots.com";
char payload[100];char topic[150];
//créer une variable pour stocker l'ID du jeton
Id de jeton de chaîne;
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 5: 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 6: 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 température et d'humidité sans fil ncd.
- pubsubclient
- UbiDots
- Planificateur de tâches
Conseillé:
Lire et représenter graphiquement les données des capteurs de lumière et de température avec Raspberry Pi : 5 étapes
Lecture et représentation graphique des données du capteur de lumière et de température avec Raspberry Pi : dans ce Instructable, vous apprendrez à lire un capteur de lumière et de température avec Raspberry Pi et un convertisseur analogique-numérique ADS1115 et à le représenter graphiquement à l'aide de matplotlib. Commençons par le matériel nécessaire
IOT - Publier des données sur Thingspeak à l'aide d'ESP8266 : 3 étapes
IOT | Publier des données sur Thingspeak à l'aide d'ESP8266 : De nos jours, l'IoT est à la mode et de nombreuses machines ont des données à télécharger sur le cloud et à analyser les données. De petits capteurs mettent à jour les données sur le cloud et l'actionneur à une autre extrémité agit dessus. Je vais expliquer celui de l'exemple de l'IoT. J'ai cet article et je
Envoi des données des capteurs de vibrations et de température sans fil vers Excel à l'aide de Node-RED : 25 étapes
Envoi de données de capteur de vibration et de température sans fil vers Excel à l'aide de Node-RED : Présentation du capteur de vibration et de température sans fil industriel IoT à longue portée de NCD, offrant une portée allant jusqu'à 3 km grâce à l'utilisation d'une structure de réseau maillé sans fil. Intégrant un capteur de vibration et de température de précision 16 bits, cet appareil trans
Comment publier des données ESP32 avec l'horodatage NTP sur le cloud IoT : 5 étapes
Comment publier des données ESP32 avec l'horodatage NTP sur le cloud IoT : Dans de nombreuses applications, les utilisateurs doivent envoyer leurs données avec l'horodatage local des valeurs à envoyer dans la charge utile au cloud AskSensors IoT. Le format d'horodatage est UNIX Epoch time : le nombre de millisecondes qui se sont écoulées depuis janvier
Arduino Uno + SIM900 + DHT22 + Thingspeak [ENG /PL] DONNÉES DE CAPTEURS MULTIPLES ! : 3 étapes
Arduino Uno + SIM900 + DHT22 + Thingspeak [ENG / PL] DONNÉES DE CAPTEURS MULTIPLES ! : Bonjour, j'ai vu qu'il y avait un manque d'informations sur la manière de publier des données de capteurs multiples sur Thingspeak par Arduino Uno avec le module SIM900. J'ai donc fait un court instructable de connexion et de configuration Arduino UNO avec les capteurs SIM900 et DHT22. Données de DHT22 (température