La qualité de l’air est une grande préoccupation. Nous tenons l’air que nous respirons pour acquis, et parfois cet air est plein de pollution. Les incendies de forêt au Canada et les incendies de colline au Royaume-Uni sont tous des exemples récents d’incendie polluant notre air, alors comment pouvons-nous vérifier qu’il est sécuritaire de sortir?
Dans ce guide, nous allons construire un projet qui utilise les données sur la qualité de l’air du API OpenWeather pour nous donner une indication de la qualité de l’air avant de quitter la maison. Les données sont visualisées à l’aide d’un Raspberry Pi Pico W, un microcontrôleur à 6 $ qui peut aller en ligne, obtenir les données, puis afficher les données à l’aide d’une bande de LED RGB NeoPixel.
Construire le circuit
Le circuit est composé de deux sections. L’entrée et la sortie. L’entrée est un simple bouton-poussoir connecté au GPIO14 et à la broche 3V3 du Pico W. L’état normal du GPIO14 est ramené à la masse, essentiellement 0V. Lorsque nous appuyons sur le bouton, nous connectons la broche 3V3 à GPIO14, ce qui l’amène à tirer la broche vers le haut (à 3,3 V). Ce changement d’état est ce que notre code recherche. La sortie est une bande NeoPixel connectée à 3V3, GND et GPIO16. GPIO16 est utilisé pour envoyer des données aux NeoPixels, en changeant leur couleur selon les besoins.
Le Broches GPIO sur le Raspberry Pi Pico W et le bâton NeoPixel devra être soudé et en utilisant l’un des meilleurs fers à souder ou stations de soudage rendra le travail un jeu d’enfant.
Pour ce projet, vous aurez besoin
Écrire le code
Le code de ce projet est décomposé en ce qui est nécessaire pour établir une connexion à Internet et télécharger des données à partir d’une API, un code pour attendre l’entrée de l’utilisateur et enfin un code pour interpréter les données via des LED RVB.
1. Suivez ces étapes pour télécharger la dernière version de MicroPython pour le Raspberry Pi Pico W. Les étapes les plus importantes consistent à télécharger et installer l’image du micrologiciel UF2 et à configurer Thonny. Le reste est facultatif.
2. Ouvrir Thonny et cliquez sur le bouton Arrêter pour rafraîchir la connexion. Cela garantit que Python Shell est ouvert et fonctionne correctement.
3. Créez un nouveau fichier et coller le contenu de ce lien. Enregistrez le fichier sous neopixel.py à la racine du Raspberry Pi Pico W.
4. Créez un nouveau fichier pour le code du projet.
5. Importez une série de modules essentiels au projet. Le réseau permet au Pico W de se connecter au Wi-Fi, le temps est utilisé pour contrôler les horaires du code du projet, urequests est utilisé pour récupérer les données de l’API. La machine contient une « Pin » qui est utilisée pour obtenir et définir l’état d’une broche GPIO, NeoPixel permet le contrôle d’une bande LED RGB NeoPixel.
import network
import time
import urequests
from machine import Pin
from neopixel import Neopixel
6. Créez un objet, un bouton et créez une connexion à GPIO14, et en utilisant la résistance interne pour cette broche, tirez la broche vers le bas (vers GND).
button = Pin(14, Pin.IN, Pin.PULL_DOWN)
7. Créez un objet, pixels, qui établit une connexion entre le code et les huit NeoPixels connectés au GPIO16. Notez que les pixels sont dans l’ordre GRB (vert, rouge, bleu) pour notre module. Si le vôtre diffère, changez-le en RVB.
pixels = Neopixel(8, 0, 16, "GRB")
8. Créez un objet, wlan, et utilisez-le pour vous connecter à votre point d’accès Wi-Fi. Modifiez le SSID et le MOT DE PASSE pour qu’ils correspondent à votre point d’accès. Ajoutez une courte pause pour permettre à la connexion d’être établie et stable.
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("SSID", "PASSWORD")
time.sleep(5)
9. Imprimez l’état de la connexion au shell Python.
print(wlan.isconnected())
dix. À l’aide d’une instruction conditionnelle, configurez les NeoPixels pour qu’ils clignotent en vert 10 fois pour signifier que la connexion a réussi.
if wlan.isconnected() == True:
for i in range(10):
pixels.fill((0, 64, 0))
pixels.show()
time.sleep(0.1)
pixels.fill((0, 0, 0))
pixels.show()
time.sleep(0.1)
11. En cas d’échec, utilisez une boucle for pour faire clignoter les NeoPixels en rouge 10 fois.
else:
for i in range(10):
pixels.fill((64, 0, 0))
pixels.show()
time.sleep(0.1)
pixels.fill((0, 0 , 0))
pixels.show()
time.sleep(0.1)
12. Créez une boucle infinie et vérifiez l’état du bouton. S’il n’est pas enfoncé, le code s’arrêtera ici. Une fois pressé, l’indentation s’exécutera.
while True:
if button.value():
13. Créez un objet, aq, et stockez les dernières données sur la qualité de l’air. En appuyant sur le bouton, le code déclenche le téléchargement des dernières données sur la pollution de l’air d’OpenWeather à l’aide d’une clé API gratuite. Notez que vous devrez Inscrivez-vous pour un compte gratuit, puis cliquez sur votre nom d’utilisateur et sélectionnez Mes clés API. Générez une nouvelle clé API appelée AirPollution. Copiez la clé API et remplacez-la dans l’URL dessous. Changez également la lat (latitude) et lon (longitude) pour correspondre à votre emplacement. Cela peut être trouvé via Google Maps, le nôtre est défini sur New York.
aq = urequests.get("http://api.openweathermap.org/data/2.5/air_pollution/forecast?lat=40.714272&lon=-74.005966&appid=YOUR API KEY HERE").json()
14. À partir des données renvoyées, découpez l’indice de qualité de l’air et enregistrez-le dans l’objet air_quality_index. Les données renvoyées sont au format JSON, qui est presque identique aux objets de stockage de données du dictionnaire Python. Cela signifie que nous pouvons lire les données exactes à l’aide d’une séquence spécifique de touches. Celles-ci sont documentées dans la référence de l’API OpenWeather.
air_quality_index = aq['list'][0]['main']['aqi']
15. Imprimez la valeur de l’indice de qualité de l’air sur le shell Python sous forme de phrase. Ceci est à des fins de débogage. La valeur peut être comprise entre 1 et 5. Où 1 = Bon, 2 = Passable, 3 = Modéré, 4 = Mauvais, 5 = Très mauvais.
print("The Air Quality index is: ",str(air_quality_index))
16. Si la qualité de l’air est 1, Bon. Réglez les LED pour qu’elles clignotent en vert 10 fois avec un délai d’une demi-seconde.
if air_quality_index == 1:
for i in range(10):
pixels.fill((0, 64, 0))
pixels.show()
time.sleep(0.5)
pixels.fill((0, 0, 0))
pixels.show()
time.sleep(0.5)
17. Si la qualité de l’air est 2, passable. Réglez les LED pour qu’elles clignotent en bleu 10 fois avec un délai d’une demi-seconde.
elif air_quality_index == 2:
for i in range(10):
pixels.fill((51,255,255))
pixels.show()
time.sleep(0.5)
pixels.fill((0, 0, 0))
pixels.show()
time.sleep(0.5)
18. Si la qualité de l’air est 3, Modérée. Réglez les LED pour qu’elles clignotent en violet 10 fois avec un délai d’une demi-seconde.
elif air_quality_index == 3:
for i in range(10):
pixels.fill((153, 51, 255))
pixels.show()
time.sleep(0.5)
pixels.fill((0, 0, 0))
pixels.show()
time.sleep(0.5)
19. Si la qualité de l’air est 4, Médiocre. Réglez les LED pour qu’elles clignotent en orange 10 fois avec un délai d’une demi-seconde.
elif air_quality_index == 4:
for i in range(10):
pixels.fill((255,153,51))
pixels.show()
time.sleep(0.5)
pixels.fill((0, 0, 0))
pixels.show()
time.sleep(0.5)
20. Si la qualité de l’air est de 5, très médiocre. Réglez les LED pour qu’elles clignotent en rouge 10 fois avec un délai d’une demi-seconde.
elif air_quality_index == 5:
for i in range(10):
pixels.fill((255, 0, 0))
pixels.show()
time.sleep(0.5)
pixels.fill((0, 0, 0))
pixels.show()
time.sleep(0.5)
21. Enfin, définissez la condition else, activée s’il n’y a pas de données de qualité de l’air renvoyées, pour passer, permettant à la boucle de revenir en arrière et d’attendre l’entrée de l’utilisateur.
else:
pass
22. Enregistrez le code sous main.py sur le Raspberry Pi Pico W. Dans MicroPython, le fichier main.py est exécuté à chaque démarrage du Pico.
23. Cliquez sur Exécuter pour démarrer le code. Les NeoPixels doivent clignoter en vert pour confirmer une connexion Wi-Fi. Si ce n’est pas le cas, vérifiez que votre SSID et votre mot de passe sont corrects.
24. Appuyez sur le bouton pour que le Pico W se connecte et télécharge les dernières données sur la pollution de l’air. Les NeoPixels afficheront les données via les cinq couleurs et la coque Python affichera la valeur exacte de la qualité de l’air.
Liste complète des codes
import network
import time
import urequests
from machine import Pin
from neopixel import Neopixel
button = Pin(14, Pin.IN, Pin.PULL_DOWN)
pixels = Neopixel(8, 0, 16, "GRB")
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("SSID", "PASSWORD")
time.sleep(5)
print(wlan.isconnected())
if wlan.isconnected() == True:
for i in range(10):
pixels.fill((0, 64, 0))
pixels.show()
time.sleep(0.1)
pixels.fill((0, 0, 0))
pixels.show()
time.sleep(0.1)
else:
for i in range(10):
pixels.fill((64, 0, 0))
pixels.show()
time.sleep(0.1)
pixels.fill((0, 0 , 0))
pixels.show()
time.sleep(0.1)
while True:
if button.value():
aq = urequests.get("http://api.openweathermap.org/data/2.5/air_pollution/forecast?lat=40.714272&lon=-74.005966&appid=282f4cee730d75261ae4855ee7719e44").json()
air_quality_index = aq['list'][0]['main']['aqi']
print("The Air Quality index is: ",str(air_quality_index))
if air_quality_index == 1:
for i in range(10):
pixels.fill((0, 64, 0))
pixels.show()
time.sleep(0.5)
pixels.fill((0, 0, 0))
pixels.show()
time.sleep(0.5)
elif air_quality_index == 2:
for i in range(10):
pixels.fill((51,255,255))
pixels.show()
time.sleep(0.5)
pixels.fill((0, 0, 0))
pixels.show()
time.sleep(0.5)
elif air_quality_index == 3:
for i in range(10):
pixels.fill((153, 51, 255))
pixels.show()
time.sleep(0.5)
pixels.fill((0, 0, 0))
pixels.show()
time.sleep(0.5)
elif air_quality_index == 4:
for i in range(10):
pixels.fill((255,153,51))
pixels.show()
time.sleep(0.5)
pixels.fill((0, 0, 0))
pixels.show()
time.sleep(0.5)
elif air_quality_index == 5:
for i in range(10):
pixels.fill((255, 0, 0))
pixels.show()
time.sleep(0.5)
pixels.fill((0, 0, 0))
pixels.show()
time.sleep(0.5)
else:
pass