Table des matières:

Suivre la qualité de l'air à l'aide de Grafana et Raspberry Pi : 7 étapes
Suivre la qualité de l'air à l'aide de Grafana et Raspberry Pi : 7 étapes

Vidéo: Suivre la qualité de l'air à l'aide de Grafana et Raspberry Pi : 7 étapes

Vidéo: Suivre la qualité de l'air à l'aide de Grafana et Raspberry Pi : 7 étapes
Vidéo: #14 Monitorer la qualité de l'air environnant 2024, Novembre
Anonim
Suivre la qualité de l'air à l'aide de Grafana et Raspberry Pi
Suivre la qualité de l'air à l'aide de Grafana et Raspberry Pi

Je cherchais un petit petit projet IOT et un ami m'a recommandé de consulter ce tutoriel:

dzone.com/articles/raspberry-pi-iot-sensor…

Je recommande fortement de suivre le tutoriel à suivre pour configurer un Raspberry Pi pour la surveillance. Ce didacticiel complétera les étapes supplémentaires de la conception d'un appareil IoT simple qui permet une tolérance d'erreur élevée, ainsi que l'utilité d'un Raspberry Pi lorsqu'il est associé à Arduino.

J'aborde également l'efficacité et une certaine limitation des modèles MQ* de capteurs d'air. Les capteurs MQ* sont bon marché et assez efficaces, et sont très faciles à installer.

Dans l'ensemble, cela vous aidera à démarrer dans la connexion d'un Arduino à Internet de la manière la plus simple possible et ouvre la voie à l'utilisation de modules plus légers (re: ESP8266).

S'amuser!

Étape 1: équipement + configuration

Équipement

  • Raspberry Pi avec Raspbian installé
  • Alimentation Raspberry Pi
  • Arduino Uno/équivalent
  • USB mâle à mâle de type B à type A (doit être fourni avec votre Arduino)
  • N'importe lequel des capteurs MQ* (j'ai utilisé les MQ-2, 4, 5 et 135)
  • Fils de liaison assortis
  • mini planche à pain

Mettre en place

Ce tutoriel est conçu comme une introduction douce à l'utilisation d'Arduino et de Raspberry Pi - il vous aidera à savoir comment utiliser le terminal Linux. Cependant, je ne suppose pas beaucoup d'expérience avec le travail sur Arduino ou Raspberry Pi - tout ce dont vous avez vraiment besoin est l'équipement fourni et une attitude curieuse.

  • Vous devrez suivre les étapes de ce didacticiel.
  • Je vous recommande d'utiliser Secure Shell (SSH) pour l'interface avec le Raspberry Pi, car cela vous permet de saisir facilement des commandes. La connexion via SSH diffère selon que vous utilisez Windows, Linux ou Mac. Linux et Mac sont assez faciles à utiliser en ce qui concerne ssh (la commande pour ouvrir SSH est littéralement ssh). Découvrez Putty pour Windows. Je vous recommande de consulter screen comme moyen de maintenir votre session pendant le projet.
  • Vous devrez également installer Python sur Raspbian. Lorsque j'ai terminé ces étapes, j'ai fait une copie d'une ancienne carte SD que j'avais dans un projet précédent, sur laquelle Python était déjà installé. Si votre distribution de NOOBS/Raspbian n'a pas Python 3.7 ou supérieur, consultez ces étapes pour compiler Python à partir des sources.
  • Familiarisez-vous avec git et installez-le au cas où il ne serait pas déjà installé dans votre distribution de Raspbian.

Étape 2: Configuration du circuit

Mise en place du circuit
Mise en place du circuit

Il y a un circuit que vous devrez configurer dans l'Arduino.

J'ai fourni un schéma que vous pouvez utiliser comme référence.

La beauté de tous les capteurs de gaz MQ-* est qu'une fois qu'une connexion de 5 volts et de terre est établie, la résistance d'entrée des broches analogiques de l'Arduino permet au capteur de fonctionner correctement.

Veillez à ce que la connexion analogique de la carte de dérivation dans le capteur soit connectée à l'Arduino et non à la connexion numérique. Si vous êtes confronté à une plage de valeurs très étroite lors des tests, je vous recommande de vérifier d'abord votre connexion ici.

Étape 3: Code Arduino et clignotement

Dans l'étape qui suit celle-ci, nous allons connecter la carte Arduino au Raspberry Pi. Avant de faire cela, nous devons flasher l'Arduino avec le code pour lire le capteur ainsi que transmettre les données du capteur au Raspberry Pi. Cela peut être fait de n'importe quelle manière que vous envoyez normalement du code à l'Arduino. J'ai utilisé un outil tiers en dehors de l'IDE Arduino - j'inclus donc la bibliothèque Arduino en haut. Ce n'est pas nécessaire pour d'autres projets.

Vérifiez le code à copier/coller à la fin de cette section.

A quoi sert le code

Le code est configuré pour obtenir des données de quatre capteurs différents - si vous utilisez différents types de capteurs, il sera judicieux de modifier les noms sur le signal de sortie envoyé depuis le port série.

Dans la boucle, nous vérifions si le Raspberry Pi nous demande des données. Par conséquent, nous utilisons une configuration maître/esclave très simple où le Raspberry Pi fera continuellement des demandes de données à l'Arduino. C'est beaucoup plus simple que d'avoir un compteur dans le code Arduino car il est plus facile de tester quelles valeurs fonctionnent à partir du Raspberry Pi, au lieu d'avoir à flasher de nouvelles valeurs sur l'Arduino.

L'arduino, une fois reçu une demande de données, formatera la sortie en tant que paramètre GET - ceci est lié aux méthodes HTTP et est simplement un choix de conception. Si vous deviez concevoir un schéma de communication à partir d'Arduino via le port série, vous pourriez facilement opter pour autre chose, tant que vous le concevez de manière à ce que les données soient raisonnablement séparées. J'ai choisi GET parce qu'il est familier et robuste.

Des tests simples…

Une fois l'Arduino flashé et le code en cours d'exécution, ouvrez le moniteur série de l'IDE Arduino. Si vous envoyez le seul caractère "H" (assurez-vous de sa majuscule !), vous obtiendrez la charge utile des données. Félicitations, ça marche !

Un exemple de collecteur asynchrone de données MQ-*

#comprendre
entier mq2 = A2;
entier mq4 = A3;
entier mq5 = A4;
entier mq135 = A5;
int octet entrant;
void setup() {
pinMode(mq2, INPUT);
pinMode(mq4, INPUT);
pinMode(mq5, INPUT);
pinMode(mq135, ENTRÉE);
Serial.begin(9600);
}
/* valuePrint imprime la valeur de cette étiquette.
* Crée des effets secondaires uniquement.
*/
voidvaluePrint (étiquette de chaîne, lecture int) {
Serial.print(étiquette);
Serial.print("=");
Serial.print(lecture);
}
boucle vide() {
// voir s'il y a des données série entrantes:
if (Série.disponible() >0) {
// lit l'octet le plus ancien dans le tampon série:
// "Lorsque vous appelez Serial.read, un octet est supprimé du tampon de réception et renvoyé à votre code"
entrantByte = Serial.read();
// s'il s'agit d'un H majuscule (ASCII 72), lisez les valeurs et envoyez-les à l'hôte raspberry.
// A FAIRE: s'assurer que le message est toujours de la même longueur, à chaque fois
if (incomingByte == 72) {
int mq2Reading = analogRead(mq2);
int mq4Reading = analogRead(mq4);
int mq5Reading = analogRead(mq5);
int mq135Reading = analogRead(mq135);
Serial.print("?");
valuePrint("mq2", mq2Reading);
Serial.print("&");
valuePrint("mq4", mq4Reading);
Serial.print("&");
valuePrint("mq5", mq5Lecture);
Serial.print("&");
valuePrint("mq135", mq135Lecture);
Serial.print("\n");
}
}
// ne lit la série que toutes les secondes
retard(1000);
}

voir rawmain.cpp hébergé avec ❤ par GitHub

Étape 4: Code Raspberry Pi

Maintenant que vous avez configuré le Raspberry Pi selon https://dzone.com/articles/raspberry-pi-iot-sensor…, vous pouvez maintenant exécuter le code Raspberry Client qui enverra des données via MQTT à notre base de données, qui également se connecte à Grafana.

  1. Assurez-vous que votre framboise est connectée à Internet, puis exécutez une commande git clone pour copier l'intégralité du code sur le Raspberry Pi. Votre commande ressemblera un peu à:

    git clone

  2. Dans le terminal du raspberry Pi, exécutez une commande de changement de répertoire (cd) dans "raspberry_client":

    cd raspberry_client.

  3. Vous devrez utiliser un environnement virtuel*. Simple. Courir

    python3 -m venv env. Cela créera un environnement virtuel appelé "env" que nous utiliserons pour installer les dépendances.

  4. Maintenant, nous devons entrer dans notre environnement virtuel. Courir:

    source env/bin/activate. Vous êtes maintenant prêt à installer les dépendances du projet.

  5. Dans le package que vous venez de cloner, il y a un fichier appelé requirements.txt. Ouvrez ce fichier; vous verrez que nous avons besoin des packages paho-mqtt et pyserial, ainsi que de leurs versions respectives. Vous pouvez afficher le contenu du fichier en exécutant

    chat exigences.txt. Pour installer ces packages, ru

    pip install -r requirements.txt.

  6. Ceci termine la configuration.

Littéralement, chaque tutoriel qui utilise python fait mention de Virtual env, et même pour ce petit projet, je ferai une mention. Les environnements virtuels vous permettent de séparer les versions des dépendances, ainsi que de séparer votre flux de travail python - C'est un bon moyen de ranger vos espaces de travail Python. Si c'est la première fois que vous utilisez des environnements virtuels, lisez-les brièvement ici.

A quoi sert le code…

Le fichier client.py importera un ensemble simple de bibliothèques comprenant notre propre capteur arduino. Dans la fonction principale, nous obtiendrons les valeurs de l'Arduino, publierons les données sur le courtier MQTT, puis dormirons pendant 10 secondes.

Le fichier arduinosensor.py est un ensemble de méthodes d'assistance qui entourent la bibliothèque paho.mqtt, et fournit également un schéma de communication utile pour communiquer avec la charge utile de l'Arduino (voir: parse_payload). Bien entendu, le code est joint à la fin de cette section.

Un client simple qui communique avec un élément arduino via un moniteur série. Attendez-vous à trouver le code ici lorsqu'il sera rendu public:

fromimportlibimportimport_module
importos
heure d'importation
importarduinocapteur
defmain():
# client défini ouvert
heure_départ=heure.heure()
whileTrue:
lecture=arduinosensor.get_values(os.environ.get('PORT', "/dev/ttyUSB0"))
arduinosensor.pub("python_client", payload=reading)
time.sleep(10.0- ((time.time() -start_time) %10.0))
if_name_=="_main_":
principale()

voir rawclient.py hébergé avec ❤ par GitHub

Étape 5: Tout assembler

Nous avons configuré le code Raspberry Python et le code client Arduino configuré. Passons à la connexion des deux entités ensemble.

Tout d'abord, connectons l'Arduino et configurons la bonne configuration:

  1. Sur votre terminal Raspberry Pi, exécutez

    python -m serial.tools.list_ports. Cela listera tous les ports USB qui prennent en charge la communication série.

  2. Maintenant, branchez votre Arduino et attendez environ 2 secondes que le Raspberry le reconnaisse. Saisie

    python -m serial.tools.list_ports une fois de plus vous montrera à nouveau les ports. Vous pouvez voir une liste supplémentaire apparaître - si c'est effectivement le cas, alors cette nouvelle entrée est l'entrée à laquelle votre Arduino est connecté. Ce sera probablement "/dev/ttyUSB0".

  3. Essayez d'exécuter le code python dans votre environnement virtuel en exécutant python3.7 client.py. Attendez quelques secondes (au plus dix) - si vous rencontrez une exception, cela signifie que nous devrons modifier la valeur de notre port com sur le raspberry pi. Si vous voyez que le code imprime une ligne commençant par « Envoyé la charge utile suivante:… » Alors, vous serez prêt à passer à l'étape finale avec Grafana. Astuce: assurez-vous de courir

    écran -S python avant de démarrer le client python, sinon, lorsque vous mettez fin à votre connexion à votre raspberry pi, vous perdrez votre programme python en cours d'exécution. Techniquement, vous n'avez pas besoin d'utiliser strictement "python" comme dernier paramètre, mais j'aime nommer mes sessions d'écran en conséquence.

    1. Afin de modifier la valeur du port COM, vous devrez définir une variable d'environnement avant d'exécuter le code. Vous devrez essayer ceci pour chaque valeur de sortie possible que vous avez obtenue lors de l'exécution de python -m serial.tools.list_ports. Par exemple, si le nombre d'entrées que j'ai obtenu était de deux et était le suivant:

      • /dev/ttyUSB6
      • /dev/acm0

alors les commandes que j'exécuterais seraient:

PORT="/dev/ttyUSB6" python3.7 client.py, et si cela ne fonctionnait pas, je ruais par la suite

PORT="/dev/acm0" python3.7 client.py

Une fois ces étapes terminées, le code validera les données dans notre instance de base de données influxdb qui, une fois connectée à Grafana, nous permettra de visualiser notre tableau de bord.

Étape 6: Configuration de Grafana et affichage du tableau de bord

Configuration Grafana et affichage du tableau de bord
Configuration Grafana et affichage du tableau de bord

Bon, nous sommes maintenant dans la dernière ligne droite ! Nous allons maintenant utiliser Grafana pour créer un tableau de bord simple.

  1. Connectez-vous à votre instance Grafana. Puisque vous avez suivi les étapes de l'article dzone d'origine, vous devriez pouvoir vous connecter avec votre utilisateur administrateur. Allez-y et connectez-vous.
  2. Dans le volet de gauche, survolez l'icône "tableaux de bord" - les quatre carrés. Cliquez sur "Gérer".
  3. Sur la nouvelle page, cliquez sur "Nouveau tableau de bord". Ensuite, cliquez sur "Ajouter un nouveau panneau".
  4. Cela ouvre l'éditeur Grafana. Nous allons créer une vue simple montrant une seule métrique.

    1. Dans le volet de droite, remplacez le titre du panneau par quelque chose de significatif, tel que « Lectures de cuisine ». Vous pouvez également saisir une description facultative.
    2. En bas à gauche, "Requête", nous ajouterons une seule série temporelle. Grafana brille vraiment ici car nous pouvons facilement créer des instructions SQL avec une interface basée sur un clic. Sous "par défaut", choisissez InfluxDB.
    3. Maintenant, pour lire "A" - dans la clause FROM, sélectionnez la mesure "airtestt". Si vous regardez le code python d'origine dans la fonction get_values de arduinosensor.py, vous verrez que nous définissons cette table airtestt dans le code.
    4. Pour un exemple, allons à la clause "SELECT" et choisissons field(mq4). A l'origine notre tableau de bord nous donnera le choix "mean ()" - cliquez sur ce choix et sélectionnez "Supprimer". puis, cliquez sur le signe plus et, sous "Agrégations", choisissez "distinct()". Cela affichera des points de temps spécifiques. Nous pouvons choisir d'autres mesures mais pour l'instant, notre panel affichera des lectures distinctes de mq4.
    5. Cliquez sur Enregistrer en haut à droite et vous avez terminé !

Si vous rencontrez des problèmes, vous pouvez vérifier vos paramètres avec ceux de la capture d'écran ci-jointe.

Étape 7: Conclusion

Conclure
Conclure

Dans ce didacticiel, vous avez pu configurer un réseau MQTT robuste composé d'un seul nœud et d'un courtier. Vous avez également pu visualiser vos données IOT à l'aide de Grafana. Enfin, vous avez pu composer cette architecture système simple à partir (espérons-le) du confort de votre navigateur et de votre PC via l'utilisation d'une connexion SSH.

Il y a certaines choses que nous pouvons vouloir améliorer.

  • Les lectures de capteur dans notre graphique ne sont pas réellement des lectures de capteur précises - elles sont la tension de sortie de notre capteur. Ils doivent être calibrés, consultez cet article de blog pour plus de détails.
  • Notre configuration Raspberry Pi peut être rendue beaucoup plus légère en utilisant une carte ESP8266 connectée à l'arduino et en supprimant complètement le pi. Découvrez une introduction au module ESP8266.
  • Nous pouvons souhaiter ajouter des alertes pour des événements spécifiques. Heureusement, Grafana offre un moyen de le faire.

Je vais laisser quelques lectures supplémentaires pour attirer votre imagination avec le monde de l'IOT. J'ai hâte de vous voir dans le prochain instructable !

Autres lectures:

Conseillé: