Table des matières:

Système de surveillance météorologique IoT distribué intelligent utilisant NodeMCU : 11 étapes
Système de surveillance météorologique IoT distribué intelligent utilisant NodeMCU : 11 étapes

Vidéo: Système de surveillance météorologique IoT distribué intelligent utilisant NodeMCU : 11 étapes

Vidéo: Système de surveillance météorologique IoT distribué intelligent utilisant NodeMCU : 11 étapes
Vidéo: IA & BATIMENT RESPONSABLE & INTELLIGENT - Partie 2 (replay) 2024, Juillet
Anonim
Système de surveillance météorologique IoT distribué intelligent utilisant NodeMCU
Système de surveillance météorologique IoT distribué intelligent utilisant NodeMCU

Vous connaissez peut-être tous la station météorologique traditionnelle; mais vous êtes-vous déjà demandé comment cela fonctionnait réellement ? La station météo traditionnelle étant coûteuse et encombrante, la densité de ces stations par unité de surface est très moindre ce qui contribue à l'imprécision des données. Je vais vous expliquer comment: supposons qu'une station soit située au milieu d'une ville et que ce soit la seule station située dans un rayon de « x mètres », elle peut être facilement biaisée si un agent polluant est présent à proximité de la station montrant toute la zone de rayon de 'x' mètre comme polluée puisque cette seule station est chargée de déterminer les données météorologiques de l'ensemble de la zone.

Pour surmonter ce problème, la densité des modules doit être augmentée, ce qui n'est possible que si les modules sont moins chers et prennent un encombrement inférieur à celui existant.

C'est la raison pour laquelle ma solution proposée est la solution parfaite pour ce problème, elle coûte moins de 10 $ et repose également facilement sur ma paume.

Comment ça fonctionne…

Il y a 3 grandes parties de ce projet.

Côté appareil:

L'appareil est un module IoT montré dans l'image qui envoie les données météorologiques au serveur à chaque intervalle de temps « x ». Les données comprennent les données météorologiques réelles, l'emplacement géographique du module; c'est-à-dire ses coordonnées, son adresse MAC; pour identifier de manière unique l'appareil, la version du micrologiciel sur laquelle il s'exécute actuellement. Le côté appareil comprend N-modules répartis dans la zone qui contribuent activement aux données du serveur.

Du côté serveur:

Comme son nom l'indique, c'est le serveur centralisé qui gère plusieurs opérations comme recevoir les données des modules et les stocker dans la base de données, mettre à jour le module avec le dernier firmware s'il fonctionne sur une version plus ancienne, envoyer les données météo au client sur demande.

Côté client/utilisateur:

C'est l'utilisateur final qui demande les données météo au serveur. Le client envoie l'emplacement actuel et en fonction de l'emplacement, le serveur calcule la distance entre le client et tous les modules et envoie les données météo du module le plus proche au client qui est considéré comme précis.

Fournitures

  • NodeMCU (ESP8266-12E)
  • DHT11 (Capteur d'humidité et de température)
  • BMP180 (Capteur de pression et de température)
  • MQ-135 (Capteur d'indice de qualité de l'air)
  • Câble USB (pour télécharger le programme)
  • alimentation 5 volts
  • Condensateurs (En option: à placer parallèlement à la ligne électrique)
  • Arduino IDE (pour déboguer et télécharger le programme)
  • Application POSTMAN (facultatif: pour déboguer l'API)
  • Un site Web (pour héberger le serveur PHP et MySQL)

Étape 1: soudez tous les composants et téléchargez le programme sur le NodeMCU

Soudez tous les composants et téléchargez le programme sur le NodeMCU
Soudez tous les composants et téléchargez le programme sur le NodeMCU
Soudez tous les composants et téléchargez le programme sur le NodeMCU
Soudez tous les composants et téléchargez le programme sur le NodeMCU

Soudez tous les composants au NodeMCU comme indiqué dans le schéma de circuit sur une carte de perforation. De plus, soudez un condensateur en parallèle aux lignes électriques, car les surtensions lors de la transmission et de la réception actives de données.

Une fois le travail de soudure terminé, téléchargez le code fourni dans le fichier "code.c".

Remarque: N'oubliez pas de remplacer les informations d'identification par vos propres informations d'identification. Placez également le fichier nommé "html_file.h" dans le dossier de croquis arduino. Tous les fichiers d'en-tête utilisés dans ce projet peuvent être trouvés ici

Caractéristiques du code:

Point d'accès: comme il est difficile de programmer chaque module avec les informations d'identification en production de masse, le module héberge une page Web lors de son premier démarrage pour accepter les informations d'identification du WiFi auquel les modules doivent se connecter et les stocker dans l'EEPROM pour une utilisation ultérieure.

Une fois les informations d'identification configurées, le NodeMCU vérifie les informations d'identification dans l'EEPROM et se connecte aux informations d'identification WiFi présentes dans l'EEPROM.

Après s'être connecté avec succès au WiFi, le NodeMCU commence à télécharger les données sur le serveur à chaque intervalle de temps « x », les données incluent les données météorologiques, l'adresse MAC du module, la version du micrologiciel, l'emplacement géographique de l'appareil.

Mise à jour OTA: le module recherche également une nouvelle mise à jour du firmware chaque jour à une heure spécifique spécifiée dans le code. Cette fonctionnalité est utile car il n'est pas possible pour un fabricant de continuer et de modifier le programme d'un module individuel au cas où des modifications seraient apportées.

Watchdog Timer: Atlast doit avoir un moyen de se récupérer sans aucune intervention humaine s'il se bloque ou se bloque. Ceci peut être réalisé en utilisant la minuterie Watchdog. Voici comment cela fonctionne: il existe un sous-programme d'interruption qui s'exécute toutes les secondes. L'ISR incrémente le compteur à chaque exécution et vérifie si le compteur a atteint le nombre maximum. Une fois que le compteur atteint la valeur maximale, le module se réinitialise en supposant qu'il s'est écrasé. En fonctionnement normal, le compteur est toujours réinitialisé avant d'atteindre le nombre maximum.

Étape 2: Configuration du serveur SQL

Configuration du serveur SQL
Configuration du serveur SQL

La configuration de SQL Server est également très simple. Créez simplement une base de données dans le serveur SQL et importez le paramètre en important le fichier nommé "database_structure.txt". Vous pouvez trouver le fichier dans cette étape. Comme l'instructable ne permet pas de télécharger des fichiers ".sql", j'ai renommé le fichier en ".txt".

Remarque: Renommez le fichier de ".txt" en ".sql".

Étape 3: Configuration du serveur de fichiers

La configuration du serveur est vraiment simple si vous possédez un site Web et qu'il est hébergé en ligne. Je ne vais pas passer en revue toute la procédure de configuration et d'hébergement d'un site Web, car cela dépasse le cadre de ce didacticiel. Mais vous pouvez l'héberger sur votre propre PC en tant qu'hôte local pour essayer le fonctionnement des fichiers.

Étant donné que l'Instructable ne permet pas de télécharger des fichiers PHP, j'ai renommé les fichiers en ".txt".

Remarque: Veuillez renommer l'extension des fichiers en ".php". N'oubliez pas non plus de modifier les informations d'identification du fichier " config.php ".

Téléchargez simplement les fichiers sur le serveur et vous êtes prêt à partir.

Je vais vous donner de brèves informations sur les fichiers PHP.

db_config.php:

Dans ce fichier, toutes les informations d'identification requises pour se connecter au serveur SQL sont stockées.

db_connect:

Dans ce fichier, la classe nécessaire à la connexion à la base de données est présente.

insérer.php:

Le NodeMCU appelle ce fichier PHP pour télécharger les données sur le serveur à l'aide de la méthode GET. Ce fichier est également chargé de stocker les mêmes données sur le serveur SQL.

récupérer.php:

L'utilisateur/client appelle ce PHP en utilisant la méthode GET. Le serveur calcule la distance entre l'utilisateur et tous les modules. Ensuite, les données du module le plus proche sont envoyées en réponse au client au format JSON/XML tel que préféré par le client.

update.php:

Ce fichier PHP est appelé par le module tous les jours à une heure précise pour vérifier si le module exécute la dernière version du firmware. Il suffit de placer le dernier fichier ".bin" dans le serveur de fichiers et de spécifier le répertoire du fichier dans la variable du fichier.

Si ces nombreux fichiers semblent intimidants au début, j'ai inclus la documentation utilisateur à l'étape suivante.

Étape 4: Documentation utilisateur

Documentation utilisateur
Documentation utilisateur
Documentation utilisateur
Documentation utilisateur

Introduction:

L'API Météo fournit une interface simple pour demander les données météorologiques pour des emplacements sur la surface de la terre. Vous demandez les informations météorologiques pour une paire latitude/longitude spécifique avec le format de sortie spécifié. L'API renvoie la température, l'humidité, la pression et l'indice de qualité de l'air qui ont été enregistrés en dernier par le module le plus proche de l'emplacement demandé.

Avant que tu commences:

Ce document est destiné aux développeurs de sites Web et mobiles qui souhaitent inclure des informations météorologiques sur une application en cours de développement. Il présente l'utilisation à l'aide de l'API et du matériel de référence sur les paramètres disponibles.

Demandes de données météorologiques:

Les requêtes de l'API météo sont construites sous la forme d'une chaîne d'URL. L'API renvoie des données météorologiques pour un point sur la terre, spécifié par une paire latitude/longitude. Notez que la précision des données météorologiques est directement proportionnelle à la densité des modules placés dans une zone.

Une requête API Météo prend la forme suivante:

example.com/retrieve.php?lat=25.96446&lon=53.9443&format=json

Où format de sortie(format) peut être l'une des valeurs suivantes:

  • JSON (recommandé), indique la sortie en JavaScript Object Notation (JSON); ou
  • XML, indique une sortie en XML, enveloppée dans le nœud.

Paramètres de demande:

Comme c'est la norme dans toutes les URL, les paramètres sont séparés par le caractère esperluette (&). La liste des paramètres et leurs valeurs possibles sont indiquées ci-dessous.

Paramètres requis:

  • lat: représentant une latitude d'un emplacement à rechercher. (par exemple lat=19.56875)
  • lon: représentant une longitude d'un emplacement à rechercher. (par exemple lon=72,97568)

Paramètres facultatifs:

format: spécifie le format de sortie de la réponse des données météorologiques. Il peut s'agir de JSON ou de XML. La valeur par défaut est JSON. (par exemple format=json ou format=xml)

Réponses météo:

Pour chaque demande valide, le service de fuseau horaire renverra une réponse au format indiqué dans l'URL de la demande. Chaque réponse contiendra les éléments suivants:

  • success: une valeur indiquant l'état de la réponse.

    • 0: Négatif; indique que la demande était malformée.
    • 1: Affirmatif; indique que la demande a abouti.
  • message: une chaîne indiquant la raison de la malformité de la demande. Uniquement disponible lorsque le statut est négatif.
  • data: un tableau avec plusieurs paramètres météorologiques.

    • temp: les données de température.
    • hum: les données de présence d'humidité.
    • pres: les données de pression absolue.
    • aqi: l'indice de qualité de l'air actuel.

Les exemples de réponse des deux formats peuvent être vus dans les images.

Étape 5: Configuration du module

Configuration des modules
Configuration des modules
Configuration des modules
Configuration des modules

Un point d'accès est créé et une page Web est hébergée sur une adresse IP (par défaut: 192.168.4.1) pour recevoir les informations d'identification du gestionnaire de périphérique/utilisateur lors du tout premier démarrage ou si le module ne trouve pas les informations d'identification déjà stockées dans le EEPROM.

L'utilisateur doit saisir le SSID et le mot de passe auxquels il souhaite que le module se connecte. La latitude et la longitude sont automatiquement renseignées si vous autorisez le navigateur à accéder à l'emplacement.

Une fois tous les détails saisis, cliquez sur le bouton "ENVOYER", puis toutes les informations d'identification sont écrites dans l'EEPROM du module.

Cette étape est très cruciale car lors de la production en masse des modules, il n'est pas possible de programmer tous les modules avec ses données de localisation exactes et ses identifiants WiFi. De plus, il n'est pas conseillé de coder en dur les informations d'identification dans le programme, car si nous devons déplacer le module vers un autre emplacement ou si nous voulons modifier les informations d'identification WiFi, nous devrons reprogrammer le module. Pour éviter ce problème, la fonction de configuration initiale est implémentée.

Étape 6: Il est maintenant temps de fournir des données au cloud

Il est maintenant temps de fournir des données au cloud
Il est maintenant temps de fournir des données au cloud
Il est maintenant temps de fournir des données au cloud
Il est maintenant temps de fournir des données au cloud

Une fois toutes les étapes précédentes terminées, il est maintenant temps de laisser le module télécharger les données sur le serveur. Le téléchargement commence automatiquement une fois que vous avez enregistré les informations d'identification.

Il appelle le "insert.php" en tant qu'appel API en passant tous les paramètres à envoyer dans la méthode GET.

L'extrait de code ci-dessous montre comment les paramètres sont traités.

if (isset($_GET['temp']) && isset($_GET['hum']) && isset($_GET['pres']) && isset($_GET['aqi']) && isset($_GET ['mac']) && isset($_GET['lat']) && isset($_GET['lon '])) 2. { 3. // programme principal 4. }

Ainsi, tous les modules commencent à télécharger les données.

Remarque: réduisez la fréquence de téléchargement dans le code si vous pensez que le serveur est surchargé.

Étape 7: Mise à jour en direct (OTA)

Mise à jour en direct (OTA)
Mise à jour en direct (OTA)

Une fois que le module est configuré et commence à télécharger les données, il vérifie les mises à jour du micrologiciel tous les jours à une heure spécifique mentionnée dans le programme. S'il en trouve, il télécharge et flashe le fichier binaire qu'il contient. Et si ce n'est pas le cas, l'opération normale de téléchargement des données se poursuit.

Pour vérifier une nouvelle mise à jour, le module appelle le "update.php" en envoyant l'adresse MAC dans son en-tête de requête. Le serveur vérifie ensuite si cette adresse MAC spécifique a une nouvelle mise à jour, si oui, alors il envoie le fichier binaire du dernier firmware en réponse.

Il vérifie également tous les en-têtes nécessaires à l'authentification de base du module.

Étape 8: Comment l'utilisateur/client peut accéder aux données…

Comment l'utilisateur/client peut accéder aux données…
Comment l'utilisateur/client peut accéder aux données…
Comment l'utilisateur/client peut accéder aux données…
Comment l'utilisateur/client peut accéder aux données…
Comment l'utilisateur/client peut accéder aux données…
Comment l'utilisateur/client peut accéder aux données…

Il est assez simple d'accéder aux données du serveur. En appelant simplement "retrieve.php", nous obtiendrons les données météorologiques en réponse au format JSON. Après cela, il suffit d'analyser les données JSON pour accéder aux éléments individuels. La réponse XML est similaire. L'utilisateur peut toujours spécifier le format de réponse préféré dans lequel il est à l'aise de travailler. Si l'utilisateur ne spécifie pas le format, le format par défaut est JSON.

Un exemple de requête est effectué à l'aide de l'outil POSTMAN pour vérifier le fonctionnement de l'API.

Un exemple d'analyse de la réponse JSON en javascript est présenté dans l'extrait de code ci-dessous.

var url = "https://example.com/retrieve.php?lat=19.044848&lon=72.8464373";function httpGet(theUrl) { var xmlHttp = new XMLHttpRequest(); xmlHttp.open("GET", theUrl, false); // false pour la requête synchrone xmlHttp.send(null); return xmlHttp.responseText; } var maVar = httpGet(url); var obj = JSON.parse(myVar); document.getElementById("aqi").innerHTML = obj.data[0].aqi; document.getElementById("temperature").innerHTML = Math.round(obj.data[0].temp) + "°C"; document.getElementById("temp").innerHTML = Math.round(obj.data[0].temp) + "°C"; document.getElementById("humidité").innerHTML = Math.round(obj.data[0].hum) + "%"; document.getElementById("pression").innerHTML = Math.round(obj.data[0].pres) + " mb";

Le code source de l'exemple de page HTML qui analyse la réponse JSON est disponible à la fin de cette étape.

Remarque: Modifiez l'extension du fichier en ".html".

Étape 9: Limites de ce projet

  • Le projet utilise GET pour envoyer les données; même s'il ne s'agit pas de données sensibles, les données peuvent être facilement manipulées car elles ne disposent d'aucun mécanisme pour vérifier l'authenticité de la source en dehors de la vérification des en-têtes, qui peuvent être facilement modifiés et même un appareil normal peut être usurpé ressembler à un module météo.
  • Étant donné que le module repose uniquement et dépend d'un autre point d'accès (WIFI) pour envoyer les données qui, dans la plupart des cas, seraient celles d'autres organisations. Si le point d'accès est en panne pour une raison quelconque, le module ne pourra pas envoyer de données.
  • Même si le projet est conçu pour augmenter la précision du système existant, le capteur disponible sur le marché est moins précis que prévu, ce qui entraîne l'échec de son objectif principal.
  • Lors de la planification du projet, j'ai prévu d'inclure un mode dans lequel le serveur fait la moyenne de la valeur des données en fonction de l'emplacement pour la correction des erreurs. Mais lors de la mise en œuvre de cette fonctionnalité, j'ai réalisé qu'il fallait des API tierces pour traduire les coordonnées en régions géographiques.

Étape 10: Autres améliorations pouvant être apportées à ce projet

  • La précision du module peut être encore améliorée en adaptant spécialement les capteurs à un usage spécifique au lieu d'utiliser le module générique disponible sur le marché.
  • Le module peut être modifié pour fonctionner de manière encore plus indépendante en utilisant une puce spéciale qui communique sans fil avec les tours cellulaires pour envoyer les données, améliorant ainsi la tolérance aux pannes.
  • Le panneau solaire et le système de batterie peuvent être utilisés en conjonction avec le mode veille prolongée de l'ESP, améliorant ainsi l'efficacité énergétique et le rendant plus indépendant d'une alimentation électrique externe.
  • POST peut être utilisé pour envoyer des données avec un mécanisme d'authentification comme l'utilisation de codes cycliques pour chaque transmission de données.
  • Au lieu de NodeMCU, qui est une carte de prototypage, nous pouvons utiliser un microcontrôleur personnalisé en production de masse, ce qui non seulement réduit les coûts, mais utilise également au mieux les ressources du système.
  • En conjonction avec l'API de géolocalisation de Google et en se connectant à n'importe quel WIFI ouvert disponible, le module peut fonctionner sans même le configurer; prêt à transmettre des données à l'usine sans aucune configuration nécessaire.

Étape 11: Quelques mots pour le public

Quelques mots pour le public
Quelques mots pour le public

Hé les gars, je me rends compte qu'il ne s'agit pas du tout d'un didacticiel convivial pour les débutants, car je n'ai pas mentionné tous les détails qui doivent être couverts. Et aussi ce projet est vraiment vaste pour être couvert dans un Instructable. Pourtant, j'ai fait de mon mieux pour couvrir tous les aspects importants du projet. Je sais aussi qu'une vidéo présentant le fonctionnement du projet aurait été vraiment géniale, mais comme il s'agit de mon premier instructable et pour être honnête, il s'agit de ma première publication de quelque chose de similaire à cela, j'étais assez nerveux d'être devant un caméra.

Si vous avez besoin d'aide pour créer ce projet ou quelque chose de similaire à celui-ci, contactez-moi simplement à [email protected] ou vous pouvez laisser un commentaire comme toujours. Je vais essayer de vous aider les gars du mieux que je peux.

Merci!!

Conseillé: