Construisez votre propre station météo Raspberry Pi

Construisez votre propre station météo Raspberry Pi
Raspberry Pi Sense Hat est une carte complémentaire qui peut être utilisée avec des ordinateurs monomodes Raspberry Pi. Le chapeau Raspberry Pi Sense a un écran LED 8 × 8 et un joystick à 5 bouts, et il est équipé des capteurs suivants:
  1. Gyroscope
  2. Accéléromètre
  3. Magnétomètre
  4. Température
  5. Pression barométrique
  6. Humidité

Dans cet article, je vais vous montrer comment créer une application Web de station météo basée sur l'API Python en utilisant le température, pression barométrique, et humidité capteurs du chapeau de sens de la framboise Pi. Pour suivre cet article, vous aurez besoin de ce qui suit:

  1. A Raspberry Pi 3 ou Raspberry Pi 4 avec connectivité réseau.
  2. Un module de chapeau de sens Raspberry Pi.
  3. A Micro-USB (Raspberry Pi 3) ou USB Type-C (Raspberry PI 4).
  4. Une carte microSD de 16 Go ou 32 Go avec Raspberry Pi OS.
  5. Un ordinateur portable ou un ordinateur de bureau pour l'accès à la télécommande VNC ou l'accès SSH au Raspberry Pi.

NOTE: Dans cet article, nous nous connecterons à la Raspberry Pi à distance via VNC ou SSH en utilisant la configuration sans tête du Raspberry Pi. Si vous ne souhaitez pas accéder à votre framboise PI à distance via SSH ou VNC, vous devrez connecter un moniteur, un clavier et une souris à votre framboise PI.

Pour apprendre à flasher l'image Raspberry Pi OS sur une carte microSD, veuillez vous référer à l'installation et à utiliser l'imageur Raspberry Pi. Si vous avez besoin d'aide pour installer Raspberry Pi OS sur votre Raspberry Pi, lisez comment installer Raspberry Pi OS sur Raspberry Pi 4. Si vous avez besoin d'aide pour la configuration sans tête de Raspberry Pi, consultez comment installer et configurer Raspberry Pi OS sur Raspberry Pi 4 sans moniteur externe.

Connexion de Raspberry Pi Sense Hat à Raspberry Pi

Le kit de chapeau Raspberry Pi Sense est livré avec la carte complémentaire Rendatber Pi Sense Hat, un en-tête masculin à 40 broches et quelques vis et espaceurs.

Avant de pouvoir attacher la carte Sense Hat au Raspberry Pi, vous devez connecter l'en-tête à 40 broches au chapeau de sens. Connectez les épingles mâles de l'en-tête masculin-femelle à 40 broches au chapeau de sens comme indiqué dans les images ci-dessous.

Les ordinateurs monomodes Raspberry Pi ont 4 trous qui peuvent être utilisés pour attacher des planches complémentaires ou un boîtier. Pour fixer la carte complémentaire, insérez les vis à l'arrière du framboise PI, comme indiqué dans les images ci-dessous.

Ensuite, connectez une entretoise à la vis.

Une fois que vous avez ajouté les quatre vis et espaceurs, votre Raspberry Pi devrait ressembler à celui montré dans l'image ci-dessous.

Connectez le chapeau Sense Raspberry Pi à la tête mâle GPIO à 40 broches du Raspberry Pi, comme indiqué dans les images ci-dessous.

NOTE: Soyez prudent tout en déconnectant le chapeau Sense Raspberry Pi de l'en-tête GPIO Raspberry Pi 40-Pin pour éviter de plier les broches du framboise PI GPIO.

Avec les quatre vis restantes, fixez le chapeau de sens de Raspberry Pi, comme indiqué dans les images ci-dessous.

Alimenter sur le Raspberry Pi

Maintenant que le chapeau de Sense Raspberry Pi est connecté au Raspberry Pi, insérez la carte microSD avec Raspberry Pi OS.

Installation de la bibliothèque Python du chapeau Sense Raspberry Pi

Pour utiliser le chapeau de sens de Raspberry Pi sur le Raspberry Pi, le houx du sens La bibliothèque Python doit être installée sur le Raspberry Pi OS. Le houx du sens La bibliothèque est disponible dans le référentiel officiel de package de Raspberry Pi OS.

Pour installer le Raspberry Pi houx du sens Python Library sur le Raspberry Pi OS, mettez d'abord à jour le cache du référentiel de package APT avec la commande suivante:

$ sudo apt mise à jour

Ensuite, exécutez la commande suivante:

$ sudo apt installer sens-hat -y

Installation de la bibliothèque Python Micro Framework Flask

Nous utiliserons le framework Flask Python pour créer notre application météo. Vous pouvez installer Flask à partir du référentiel de package officiel de Raspberry Pi OS avec la commande suivante:

$ sudo apt installer python3-flask -y

Création d'un répertoire de projet

C'est une bonne idée de créer un répertoire de projet pour organiser vos fichiers de projet. Pour créer un répertoire de projet ~ / travail, Utilisez la commande suivante:

$ mkdir ~ / travail

Une fois le répertoire du projet créé, accédez au répertoire du projet comme suit:

$ cd ~ / travail

Tester le chapeau de Sense Raspberry Pi

Pour tester si le chapeau Raspberry Pi Sense fonctionne, nous pouvons écrire un simple script Python de test. Vous pouvez créer un nouveau script python appelé test.py avec le nano Éditeur de texte comme suit:

$ test nano.py

Entrez le code suivant dans le test.py déposer. Ligne 1 importations Senshat du SENSE_HAT module, la ligne 3 crée un Senshat Object et stocke une référence dans le sens variable et les lignes 5-6 définissent la couleur des LED 8 × 8 vers le rouge. Une fois que vous avez terminé, appuyez sur + X suivie par Y et .

Vous pouvez exécuter le test.py Script python avec la commande suivante:

$ Python3 Test.py

La matrice LED 8 × 8 doit briller en couleur rouge comme indiqué dans l'image ci-dessous.

Pour éteindre les LED du chapeau de sens, exécutez le clair() Méthode sans aucune valeur de couleur dans le test.py Script python, comme indiqué dans la capture d'écran ci-dessous, et exécutez le test.py Script Python à nouveau.

Les LED du chapeau de sens doivent maintenant être désactivées, comme indiqué dans l'image ci-dessous.

Si le chapeau de sens fonctionne correctement, passez à la section suivante.

Obtenir les données météorologiques de Sense Hat

Vous pouvez obtenir des données de capteur à partir du chapeau de sens très facilement en utilisant le houx du sens Bibliothèque python. Pour récupérer les données du capteur à partir du chapeau de sens, vous pouvez créer un nouveau script Python read_sensor_data.py comme suit:

$ nano read_sensor_data.py

Entrez le code suivant dans le read_sensor_data.py Fichier python.

de Sense_hat Import Sensehat
à partir de temps pour sommeil
sens = Sensehat ()
sens.clair()
Bien que vrai:
tempc = sens.get_Temperature ()
tempf = tempc * (9/5) + 32
pression = sens.get_pressure ()
Humidité = sens.get_humidity ()
Imprimer ("Température:%.2f ° C /%.2f ° f \ n "% (tempc, tempf))
Imprimer ("Pression:%.2f Mb \ n "% (pression))
Imprimer ("Humidité:%.2f %% \ n \ n "% (humidité))
sommeil (5)

Une fois que vous avez terminé, appuyez sur + X suivie par Y et .

Dans le code ci-dessus, les lignes 1 et 2 importent toutes les bibliothèques requises, la ligne 4 crée un Senshat objet et ligne 5 éteint toutes les LED du chapeau de sens en utilisant le clair() méthode. La boucle while dans la ligne 7 est une boucle infinie qui exécutera le code dans les lignes 8-16 pour toujours.

Dans la ligne 8, le get_Temperature () La méthode est utilisée pour lire les données de température (en degrés Celsius) à partir du capteur d'humidité du chapeau de sens. Dans la ligne 9, les données de température sont converties de degrés Celsius à degrés Fahrenheit. Dans la ligne 10, le get_pressure () La méthode est utilisée pour lire les données de pression d'air (en millibars) à partir du capteur de pression du chapeau de sens. Dans la ligne 11, le get_humidity () La méthode est utilisée pour lire les données d'humidité (en%) à partir du capteur d'humidité du chapeau de sens.

Les lignes 13-15 sont utilisées pour imprimer les données du capteur à la console, et la ligne 16 est utilisée pour attendre 5 secondes avant de relire les données du capteur.

Vous pouvez exécuter le read_sensor_data.py Script python comme suit:

$ python3 read_sensor_data.py

Une fois le script exécuté, les données du capteur seront imprimées sur la console.

Maintenant que nous pouvons lire les données du capteur du chapeau de sens, appuyez sur + C Pour arrêter le programme.

Création d'une application Web de station météo

Dans cette section, nous vous montrerons comment utiliser le framework Web Python Flask pour créer une API météo et une application météorologique. L'application météorologique accédera à l'API des données météorologiques et affichera les données météorologiques en temps réel. Tout le code discuté dans cette section est disponible sur GitHub à Shovon8 / Raspberry-pi-sens-hat-weather-app.

Tout d'abord, créez un serveur.py Script Python dans le répertoire du projet comme suit:

$ Nano Server.py

Entrez le code suivant dans le serveur.py Fichier python.

De Flask Import Flask
à partir de flask importer jsonify
De Flask Import Render_Template
de Flask Import URL_FOR
de Sense_hat Import Sensehat
app = flacon (__ name__)
appliquer.config ['send_file_max_age_agelault'] = 0
sens = Sensehat ()
sens.clair()
avec application.test_request_context ():
URL_FOR («statique», fichier = 'style.CSS ')
URL_FOR ('statique', filename = 'App.JS ')
@app.route ('/ api')
def api ():
tempc = sens.get_Temperature ()
tempf = tempc * (9/5) + 32
pression = sens.get_pressure ()
PressurePsi = pression * 0.0145038
Pressure = pression * 100
Humidité = sens.get_humidity ()
return jsonify (
"Température": "C": tempc, "f": tempf,
"pression": "MB": pression, "HPA": pression,
"psi": pressionpsi, "p": pression de pression,
"Humidité": humidité
)
@app.itinéraire('/')
def home ():
return render_template ('./maison.html ')

Puis appuyez + X suivie par Y et Pour sauver le serveur.py Script python.

Dans le code ci-dessus, les lignes 1 à 5 importent toutes les bibliothèques requises, la ligne 7 crée une application Flask, la ligne 11 crée un objet SenseHat et la ligne 12 éteint toutes les LED du chapeau de sens. Ligne 8 désactive la mise en cache Web pour l'application Flask. Parce que cette application est légère, il n'y a pas besoin de mise en cache. Si vous souhaitez modifier l'application, le désactivé de la cache Web facilitera les tests beaucoup plus faciles.

Les lignes 18-31 lisent les données du capteur du chapeau de sens et renvoyez les données de l'API au format JSON sur HTTP GET DEMAND dans le / API point de terminaison du serveur Web. Les lignes 37-39 renvoient la page d'accueil de l'application Web météo sur la / / point de terminaison du serveur Web. La page d'accueil est rendue à partir du maison.html fichier, qui devrait être dans le modèles / Répertoire du répertoire du projet.

Les lignes 14-16 sont utilisées pour permettre l'accès au style.CSS et appliquer.js fichiers statiques. Ces fichiers doivent être dans le statique/ Répertoire du répertoire du projet. Le style.CSS le fichier est utilisé pour styliser le maison.html page d'accueil, et le appliquer.js le fichier est utilisé pour demander les données de l'API à la / API point final et mettez à jour les données météorologiques sur le maison.html Page toutes les 5 secondes.

Créer le statique/ et modèles / Répertoire dans le répertoire de projet comme suit:

$ mkdir -v statique, modèles

Créer un maison.html fichier dans le modèles / Répertoire comme suit:

$ Modèles Nano / Home.html

Entrez le code suivant dans le maison.html déposer.





Station météo Raspberry Pi
href = "url_for ('static', filename =" style.css ")" />



Station météo Raspberry Pi



Température












Pression




















Humidité











Puis appuyez + X suivie par Y et Pour sauver le maison.html déposer.

Créer un style.CSS fichier dans le statique/ Répertoire comme suit:

$ nano statique / style.CSS

Entrez les codes suivants dans le style.CSS déposer.

@Import URL ('https: // polices.googleapis.com / css2?Family = Roboto & Display = swap ');
*
rembourrage: 0;
marge: 0;
Font-Family: «Roboto», Sans-Serif;

corps
Contexte: # 737373;

H1
bloc de visualisation;
Couleur: # 79DC7B;
Texte-aligne: Centre;
Police-poids: 400;
Contexte: # 000;
rembourrage: 0.5EM 0;

H2
bloc de visualisation;
Contexte: # 000;
Couleur: #FFF;
Texte-aligne: Centre;
Police-poids: 400;
taille de police: 1em;

.contenu de données
marge: 10px;
Border: 2px noir solide;
Border-Radius: 5px;
Color d'arrière-plan: # 79DC7B;

.Data-Row
Affichage: flex;
Direction flexible: ligne;

.cellule de données
Largeur: 100%;
hauteur: 80px;
Affichage: flex;
Align-Items: Centre;
Justification-contenu: centre;
Police-poids: Bold;
taille de police: 1.5EM;
Couleur: # 006902;

.cellule de données: en survol
Contexte: # ffe891;
Couleur: # AA8600;
curseur: pointeur;

Puis appuyez + X suivie par Y et Pour sauver le style.CSS déposer.

Créé un appliquer.js fichier dans le statique/ Répertoire comme suit:

$ nano statique / application.js

Entrez le code suivant dans le appliquer.js déposer.

fenêtre.addEventListener («charge», main);
fonction main ()
fonction getapidata ()
var http = new xmlhttprequest ();
http.onReadyStateChange = function ()
si ce.ReadyState === 4 && ceci.status === 200)
Mise à jour (JSON.Parse (ceci.ResponseText));


http.ouvert ("get", "/ api", true);
http.envoyer();

Function Update (Apidata)
var tempc = document.getElementById ("tempc");
var tempf = document.getElementById ("tempf");
var pressionmb = document.GetElementById ("PressureMB");
var pressionpsi = document.GetElementById ("PressurePsi");
var pressionhpa = document.GetElementById ("PressionHPA");
VAR PRESSION = DOCUMENT.GetElementById ("Pressurep");
Var Humidité = Document.GetElementByid ("Humidité");
tempc.innerhtml = parsefloat (Apidata.température.C).tofixé (2) + "° C";
tempf.innerhtml = parsefloat (Apidata.température.F).tofixé (2) + "° f";
sous-trait.innerhtml = parsefloat (Apidata.pression.MB).tofixed (2) + "MB";
pression.innerhtml = parsefloat (Apidata.pression.psi).tofixed (2) + "psi";
pression.innerhtml = parsefloat (Apidata.pression.HPA).tofixed (2) + "hpa";
pression de pression.innerhtml = parsefloat (Apidata.pression.P).tofixed (2) + "p";
humidité.innerhtml = parsefloat (Apidata.humidité).tofixed (2) + "%";

Function App ()
fenêtre.setInterval (function ()
getapidata ();
, 5000);

app ();

Puis appuyez + X suivie par Y et Pour sauver le appliquer.js déposer.

Ici, la ligne 1 exécute le principal() fonction lorsque la page Web termine le chargement. Dans le principal() fonction, le getapidata () La fonction récupère les données de l'API météorologiques à l'aide de AJAX et appelle le mise à jour() fonction (à la ligne 10) une fois que les données ont été récupérées avec succès. Le mise à jour() La fonction met à jour l'élément de page Web à l'aide des données de l'API.

Dans la ligne 20, le document.getElementByid () La méthode est utilisée pour obtenir la référence de l'élément de page Web avec l'ID tempc. La ligne 28 est utilisée pour remplacer le contenu de l'élément de page Web qui a l'ID tempc avec la température (en Celsius) de l'API. De la même manière, le contenu de tous les éléments Web (lignes 21-26) est remplacé par leurs données API respectives.

Dans le app () fonction, le getapidata () est appelé toutes les 5 secondes (5000 millisecondes) pour maintenir les données météorologiques à jour dans l'application météorologique. Enfin, dans la ligne 46, le app () La fonction est exécutée.

Pour tester l'application Web, entrez la commande suivante:

$ Flask_app = serveur.Py Flask Run --host = 0.0.0.0

L'application météo doit fonctionner sur le port 5000 (par défaut).

Pour tester si l'API Weather fonctionne, exécutez la commande suivante:

$ curl -s http: // localhost: 5000 / api | JSON_PP

Comme vous pouvez le voir, les données de l'API météorologiques sont imprimées sur la console. Par conséquent, l'API fonctionne.

Pour tester l'application météo, visitez http: // localhost: 5000 d'un navigateur Web Chromium. L'application météo doit être chargée sur le navigateur Web, mais aucune donnée météorologique ne doit être affichée au début.

Après quelques secondes, l'application météo doit finir de récupérer les données météorologiques de l'API et l'afficher.

À tout moment, vous pouvez appuyer + C Pour arrêter le serveur Web.

Création d'un service systemd pour l'application Web météo

Dans cette section, nous vous montrerons comment créer un fichier de service SystemD pour l'application météo afin qu'elle commence automatiquement lors du démarrage.

Tout d'abord, créez un Station météo.service Fichier dans votre répertoire de projet comme suit:

$ Nano Weather Station.service

Entrez les lignes de code suivantes dans le Station météo.service déposer.

[Unité]
Description = Raspberry Pi Weather Station Web App Using Raspberry Pi Sense Hat
After = réseau.cible
[Service]
WorkingDirectory = / home / pi / work
Environnement = flask_app = serveur.py
Environnement = flask_env = production
Execstart = / usr / bin / flask run - host = 0.0.0.0
StandardOutput = héritage
StandardError = héritage
Redémarrer = toujours
Utilisateur = pi
[Installer]
Recherché = multi-utilisateurs.cible

Puis appuyez + X suivie par Y et Pour sauver le Station météo.service déposer.

Copier le Station météo.service fichier à la / etc / systemd / system / Répertoire avec la commande suivante:

$ sudo cp -v station météorologique.Service / etc / Systemd / System /

Recharger les démons Systemd pour que les changements prennent effet comme suit:

$ sudo Systemctl Daemon-Reload

Le Station météo Le service SystemD doit être inactif pour le moment, comme le montre la capture d'écran ci-dessous.

$ sudo systemctl statut weather station.service

Commencer le Station météo Service avec la commande suivante:

$ sudo systemctl démarrer la station météorologique.service

Comme vous pouvez le voir, le Station météo Le service est maintenant en cours d'exécution.

$ sudo systemctl statut weather station.service

Maintenant que le Station météo Le service fonctionne, vous pouvez l'ajouter au démarrage du système de Raspberry Pi OS avec la commande suivante:

$ sudo systemctl activer la station météorologique.service

Redémarrez votre Raspberry Pi avec la commande suivante:

$ sudo redémarrer

Une fois vos bottes de framboise Pi, le Station météo Le service doit être en cours d'exécution, comme indiqué dans la capture d'écran ci-dessous.

$ sudo systemctl statut weather station.service

Accéder à l'application météo à partir d'autres appareils

Pour accéder à l'application météo à partir d'autres appareils de votre réseau domestique, vous devez connaître l'adresse IP de votre framboise PI. Vous pouvez trouver l'adresse IP de votre Raspberry Pi 4 à partir de l'interface de gestion Web de votre routeur domestique. Dans notre cas, l'adresse IP est 192.168.0.103, mais cette adresse sera différente pour vous, alors assurez-vous de remplacer cette adresse par la vôtre dans toutes les étapes suivantes.

Si vous avez accès à la console Raspberry Pi, vous pouvez également exécuter la commande suivante pour trouver l'adresse IP également.

$ hostname -i

Une fois que vous connaissez l'adresse IP de votre Raspberry Pi, vous pouvez y accéder à partir de n'importe quel appareil de votre réseau domestique. Comme le montre la capture d'écran ci-dessous, nous avons accédé à l'application météo à partir d'un smartphone Android.

Conclusion

Dans cet article, nous vous avons montré comment utiliser le chapeau Raspberry Pi Sense pour construire une station météo Raspberry Pi. Nous avons utilisé le houx du sens Python Library pour extraire les données météorologiques du chapeau de sens de Raspberry Pi. Ensuite, nous avons utilisé le framework Web Flask Python Micro pour créer une API météo et une application Web. L'application Web obtient les données météorologiques de l'API météo toutes les 5 secondes pour garder l'application Web à jour avec les dernières données météorologiques.