Dans cet article, je vais vous montrer comment je vais utiliser un Raspberry zero W pour mesurer les poussières fines avec un SDS011.
Dans l’état actuel, l’article est un résumé des opérations. Il ne fonctionne qu’avec Python 2.x. Je travaille sur un autre article dont l’instrument fonctionne avec Python3 et pour que les données soient envoyées via LoRaWAN, sur un serveur distant
Introduction
On peut dire assez grossièrement que la poussière fine est une très petite particule dans l’air. Une distinction est faite entre les PM10 et les PM2,5. Les PM10 sont toutes les particules dans l’air qui sont inférieures à 10 µm, tandis que les PM2,5 sont toutes les particules qui sont inférieures à 2,5 µm. Plus les particules sont petites, c’est-à-dire tout ce qui est inférieur à 2,5 µm, plus elles sont dangereuses pour la santé car elles peuvent pénétrer dans les alvéoles.
L’indice de qualité de l’air peut être calculé sur la base des particules dans l’air. Il indique à quel point l’air est «bon» ou «mauvais». Malheureusement, il n’y a pas de norme uniforme ici, car différents pays calculent cela différemment ou ont des échelles différentes. L’article de Wikipedia sur l’indice de la qualité de l’air donne un bon aperçu.
Le capteur SDS011, va vous permettre de mesurer ces particules
Prérequis
Cet exercice ne fonctionne qu’avec Python 2.x.
Vos commentaires sont les bienvenus pour perfectionner cet article.
Matériel
- Raspberry Zero W
- RFM 95 Lorawan/TTN hat
- LCD 1,3 » Oled 128×64
- Nova SDS011
- Un adaptateur USB -> MicroUSB
Sources
- https://hackernoon.com/how-to-measure-particulate-matter-with-a-raspberry-pi-75faa470ec35
- https://projetsdiy.fr/affichage-oled-ssd1306-i2c-sur-raspberry-pi-code-python-dune-mini-station-meteo-connectee-a-jeedom-avec-la-librairie-adafruit/
Préparation du Raspberry
Pour la préparation de votre Raspberry, je vous laisse suivre cette partie https://eco-sensors.ch/2-faire-ses-sauvegardes-sans-connexion/
en faisant attention de télécharger la dernière version de Rasbian, soit la version Raspbian Buster with desktop qui est la version en vigueur, lors de la rédaction de cet article.
Installation du capteur SDS011
Au passage, nous remercions Hackernoon pour la rédaction de leur article qui m’a aidé à faire le mien.
Connectez le capteur SDS011 au port USB de votre Raspberry. Il vous faudra probablement un adaptateur USB->MicroUSB.
Une fois votre Raspberry installé, connectez-vous à ce dernier, après vous être connecté sur votre réseau WiFi de votre routeur, auquel votre Pi est aussi connecté
ssh pi@ecosensors5.local
Bien entendu, vous modifierez, le nom d’utilisateur et le nom (hostname) de votre Raspberry selon votre configuration
Installation des librairies
sudo apt update && sudo apt upgrade sudo apt install git-core python-serial python-enum lighttpd
Modifiez encore le propriétaire du dossier
sudo chown pierrot:pierrot /var/www/html/
Bien entendu, si vous travaillez avec le compte pi, ou en autre, il faudra remplacer pierrot
Créez encore un fichier json, où seront sauvez les mesures
echo [] > /var/www/html/aqi.json
Cette étape est très intéressante, car elle vous permettra de sauver les mesures sur votre Pi, dans le cas ou elles ne pouvaient pas être envoyées avec LoRaWAN
Nous devons savoir à quel port USB, le capteur est connecter. Lancer la commande suivante
dmesg | grep USB
et vous devriez voir une ligne finissant par ttyUSB0, comme cela est mon cas
[ 14.565709] usb 1-1: ch341-uart converter now attached to ttyUSB0
Téléchargez le script et téléchargez le
cd /opt wget https://github.com/pierrot10/aqi/blob/master/python/aqi.py
Editez le fichier aqi.py
sudo nano /opt/aqi.py
et vérifiez cette ligne
ser.port = "/dev/ttyUSB0"
à ce qu’elle corresponde bien, à ce que vous a affiché la commande dmesg. Si non, corrigez-là en fonction de votre résultat.
Vous pouvez, dès à présent, essayer votre capteur en lançant la commande
sudo python /opt/aqi.py
ce qui devrait vous afficher ceci
Y: 18, M: 1, D: 18, ID: 0x98a7, CRC=OK PM2.5: 23.0 µg/m3, PM10: 41.1 µg/m3 PM2.5: 22.8 µg/m3, PM10: 41.0 µg/m3 PM2.5: 22.8 µg/m3, PM10: 41.1 µg/m3 PM2.5: 22.7 µg/m3, PM10: 40.9 µg/m3 PM2.5: 22.7 µg/m3, PM10: 42.2 µg/m3 PM2.5: 22.8 µg/m3, PM10: 41.8 µg/m3 PM2.5: 22.8 µg/m3, PM10: 41.6 µg/m3 PM2.5: 22.9 µg/m3, PM10: 41.9 µg/m3 PM2.5: 22.6 µg/m3, PM10: 40.9 µg/m3 PM2.5: 22.7 µg/m3, PM10: 40.6 µg/m3 PM2.5: 22.9 µg/m3, PM10: 40.8 µg/m3 PM2.5: 22.9 µg/m3, PM10: 39.8 µg/m3 PM2.5: 22.8 µg/m3, PM10: 40.4 µg/m3 PM2.5: 22.7 µg/m3, PM10: 41.1 µg/m3 PM2.5: 22.6 µg/m3, PM10: 40.5 µg/m3 Going to sleep for 1 min...
La dernière mesure sera sauvée dans le fichier aqi.json, que nous avons créer plus haut
Affichage des mesures sur l’écran OLED
Installation
Vérifiez la version de votre Python. Cette librairie est aussi écrite que pour Python 2.7.x
python --version
Installez git, si ce n’est pas fait
sudo apt-get install git
Créez un dossier où le télécharger, téléchargez-le et installez-le
# Création du dossier mkdir -p ~/Documents/Soft/ # déplacez-vous dans le dossier cd ~/Documents/Soft # cloner le dossier git clone https://github.com/pierrot10/Adafruit_Python_SSD1306.git # Déplacez-vous dans le dossier cd Adafruit_Python_SSD1306 #Installation sudo python setup.py install
Installez encore pillow.
Pillow est un fork de PIL (Python Image Library), démarré et maintenu par Alex Clark et Contributors. Il était basé sur le code PIL, puis a évolué vers une version meilleure, moderne et plus conviviale de PIL. Il ajoute la prise en charge de l’ouverture, de la manipulation et de l’enregistrement de nombreux formats de fichiers image différents. Beaucoup de choses fonctionnent de la même manière que le PIL d’origine.
sudo pip install pillow
info: https://stackoverflow.com/questions/32772596/pip-install-pil-fails/32800456
Affichage des mesures
Nous allons maintenant modifier le fichier aqi.py pour afficher les mesures. N’hésitez pas à me proposer mieux.
Editez le fichier aqi.py
sudo nano /opt/aqi.py
et ajoutez les lignes suivantes, au début du fichier après
import serial, struct, sys, time, json, subprocess
import Adafruit_GPIO.SPI as SPI import Adafruit_SSD1306 from PIL import Image from PIL import ImageDraw from PIL import ImageFont RST=None # Crée un objet disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST) # Initialise l'écran disp.begin() # Efface l'écran disp.clear() disp.display() # Récupération de la taille de l'écran width = disp.width height = disp.height image = Image.new('1', (width, height)) # On créé un objet sur lequel on va dessiner - Get drawing object to draw on image. draw = ImageDraw.Draw(image) # Charge la font par défaut - load default font font = ImageFont.load_default()
Descendez maintenant à la ligne 116, qui doit correspondre à ceci et ajoutez sous while ces lignes (attention à l’indentation sous python)
while True: disp.clear() disp.display() # Draw a black filled box to clear the image. draw.rectangle((0,0,width,height), outline=0, fill=0) draw.text((0,0), 'ECO-SENSORS.CH', font=font, fill=255) draw.text((0,10), 'Measuring Air Quality', font=font, fill=255) disp.image(image) disp.display()
Puis allez à la ligne 137, ce qui doit correspondre à ceci (théoriquement, ça devrait être la ligne145, puisque nous avons ajouter 8 lignes) et ajoutez le code suivante, dessous data.append(jsonrow)
# data.append(jsonrow) draw.text((0,25), 'pm25:', font=font, fill=255) draw.text((33,25), str(values[0]), font=font, fill=255) draw.text((0,35), 'pm10:', font=font, fill=255) draw.text((33,35), str(values[1]), font=font, fill=255)
Finalement, allez à la fin du fichier et ajoutez sous print(« Going to sleep for 1 min… »)
# print("Going to sleep for 1 min...") draw.text((0,55), 'Sleep for 1mn',font=font, fill=255) disp.image(image) disp.display()
Si vous lancez maintenant le script
sudo python /opt/aqi.py
Vous allez voir du joli texte sur votre écran OLED.
J’attire encore votre attention sur les chiffres 0,55 la fonction
draw.text((0,55), 'Du texte',font=font, fill=255)
Le premier indiquera la position X (horizontal) et le second, indiquera la position Y (vertical) du texte.
Zero2Go Omini
La carte zero2go omini est une carte sympa à avoir. Elle vous permet de fournir trois sources d’alimentation et elle va utiliser la batterie la plus chargée en priorité. Vous pouvez connecter un panneau solaire de 5 à12V, même plus (à vérifier). Un des avantage, est que vous pouvez alimenter votre Raspberry avec son alimentation sur le Input 1 du zero2go, et connecter une batterie sur le Input 2 de la même carte. Ainsi il agira comme UPS.
Documentation: https://cdn-shop.adafruit.com/product-files/4114/4114_Zero2Go_Omini_UserManual.pdf
Installation
L’installation du soft doit se faire avant que la HAT Zero2Go soit connecté
sudo mkdir -p /opt/zero2go cd /opt/zero2go sudo wget http://www.uugear.com/repo/Zero2GoOmini/installZero2Go.sh sudo sh installZero2Go.sh sudo reboot # Une fois l'installation terminée
Un nouveau dossier a été créé dans
ls /opt/zero2go/zero2go
ou vous trouverez 4 fichiers
daemon.sh init.sh utilities.sh zero2go.log zero2go.sh
Vous pouvez maintenant connecter votre HAT Zero2go
zero2go.sh est le script qui lancera l’application.
cd /opt/zero2go/zero2go/ sudo ./zero2go
Cet article a été arrêté pour développer la même application avec Pythoin3
Soutenez-nous
Si vous avez aimé cet article, faites un don de quelques Euro pour le financement de mes projets et du matériel.