Table des matières:

Station météo Inky_pHAT : 5 étapes
Station météo Inky_pHAT : 5 étapes

Vidéo: Station météo Inky_pHAT : 5 étapes

Vidéo: Station météo Inky_pHAT : 5 étapes
Vidéo: Raspberry Pi Weather Station 2024, Juillet
Anonim
Station météo Inky_pHAT
Station météo Inky_pHAT
Station météo Inky_pHAT
Station météo Inky_pHAT
Station météo Inky_pHAT
Station météo Inky_pHAT
Station météo Inky_pHAT
Station météo Inky_pHAT

Je voudrais ici décrire une station météorologique très simple et compacte, basée sur Raspberry Pi Zero, qui affiche les valeurs mesurées par un capteur de température/pression/humidité BME280 sur un écran Pimoroni Inky pHAT e-paper/e-ink. Pour permettre la connexion des capteurs et du pHAT au GPIO du Pi, j'ai placé un hacker Pimorini Pico HAT avec deux en-têtes femelles attachés entre le GPIO et l'écran. L'appareil a été utilisé pour fixer plusieurs capteurs, la version BME280 décrite ici n'est donc qu'un exemple.

Contrairement aux écrans LCD, les écrans e-ink conservent l'image même si l'alimentation a été coupée. Par conséquent, ils constituent une très bonne solution si vous souhaitez afficher des informations mises à jour de temps en temps, notamment pour construire des appareils à faible consommation d'énergie. Le principal avantage de la version monochrome/noir de l'Inky pHAT est que la mise à jour de l'affichage ne prend qu'une seconde environ, au lieu des dix à quinze secondes requises par les versions tricolores. Voir un film.

La bibliothèque Blinka d'Adafruit permet d'exécuter du code Circuit Python sur le Raspberry Pi, et des exemples Circuit Python pour une grande variété de capteurs sont disponibles auprès d'Adafruit. Une description détaillée de l'installation de Blinka et des codes Circuit Python est disponible sur le site Web d'Adafruit. Les bibliothèques que j'ai testées jusqu'à présent (BMP280, BME280, TSL2591, TCS34785, VEML7065, …) fonctionnaient très bien, alors qu'il y avait des problèmes mineurs dans certains des exemples de codes.

Le BME280 est un capteur pour mesurer la température, l'humidité et la pression atmosphérique. Les breakouts BMP280 sont disponibles auprès de nombreux fournisseurs, y compris Adafruit, mais j'utilisais ici une version chinoise bon marché. Veuillez noter qu'ils utilisent des adresses i2c différentes (Adafruit: 0x77, autres: 0x76).

Le breakout est connecté au Pi par i2c, et la lecture du capteur est très simple à l'aide de la bibliothèque et de l'exemple de code.

Étape 1: Matériaux utilisés

Les matériaux utilisés
Les matériaux utilisés
Les matériaux utilisés
Les matériaux utilisés
Les matériaux utilisés
Les matériaux utilisés
Les matériaux utilisés
Les matériaux utilisés

Un Raspberry Pi Zero, avec un en-tête mâle attaché. Mais n'importe quelle version Raspberry Pi ferait l'affaire.

Un Pimoroni Inky pHAT, version noir/monochrome, 25€|22£|20US$, chez Pimoroni.

Un hacker Pimoroni Pico HAT, 2.50€|2£, avec deux embases femelles attachées, dont une embase booster avec des broches plus longues. J'ai construit deux versions différentes, voir la description ci-dessous.

Une évasion BME280, livraison AZ via Amazon.de @ 7,50 €, avec en-tête attaché.

Câbles de démarrage d'allongement

Optionnel:

Un bloc d'alimentation USB, pour les applications mobiles

Un boîtier pour le Pi ou l'appareil (non illustré ici)

Étape 2: Assemblage

Assemblée
Assemblée
Assemblée
Assemblée
Assemblée
Assemblée
  • Soudez les en-têtes femelles au hacker Pico HAT. Avant de souder, vérifiez l'orientation correcte. J'ai construit deux versions de ceci, à des fins différentes. Une avec la tête d'appoint orientée vers le bas placée dans la première rangée et une tête normale, vers le haut/face à la rangée arrière, et une version avec la tête d'appoint orientée vers le bas dans la rangée arrière et une tête femelle à angle droit dans la première rangée. Voir les images. La première version permet de fixer et d'échanger très facilement les capteurs et les câbles, tandis que la version avec l'embase tournée vers l'intérieur permet d'enfermer Pi, capteur et Inky pHAT dans un boîtier. Alternativement, vous pouvez souder les câbles reliant le GPIO et le capteur directement au hacker Pico HAT et/ou souder le hacker Pico HAT directement aux broches GPIO. Dans tous les cas, utilisez la quantité minimale de soudure requise.
  • Soudez l'embase au capteur, si nécessaire.
  • Empilez l'unité de piratage Pico HAT modifiée sur le Pi, puis ajoutez l'Inky pHAT. Si nécessaire, insérez un support, par ex. Un bloc de mousse ou des entretoises, pour le Inky pHAT.
  • Fixez les câbles et le capteur en utilisant les ports 3V, GND, SDA et SCL. Tous les capteurs ne survivront pas à 5V, veuillez donc vérifier avant de les connecter aux ports 5V.
  • Installez la bibliothèque Blinka, puis installez la bibliothèque Circuit Python BME280 d'Adafruit.
  • Installez la bibliothèque Inky pHAT de Pimoroni.
  • Installez l'exemple de code Python décrit dans une étape ultérieure et joint à cette instructable.
  • Exécutez le code.

Étape 3: Utilisation de l'appareil

Utilisation de l'appareil
Utilisation de l'appareil

Il y a deux options pour utiliser l'appareil.

Le code tel qu'illustré ici doit être démarré à l'aide d'un écran joint, mais pourrait ensuite s'exécuter sans.

Avec des modifications mineures du code, vous pouvez utiliser crontab pour effectuer des mesures à des moments définis. Cela permettrait de réduire encore plus la consommation d'énergie. D'excellentes descriptions sur l'utilisation de crontab peuvent être trouvées ailleurs.

En conjonction avec un bloc d'alimentation, vous pouvez construire un appareil mobile et l'utiliser pour mesurer les conditions à l'intérieur ou à l'extérieur, dans le réfrigérateur, dans le sauna, votre cave, la cave à vin, dans un avion, ….

En utilisant un Zero W, vous pouvez non seulement afficher les valeurs sur l'écran, mais également les envoyer à un serveur ou à votre site Web via WLAN, comme décrit ailleurs.

Étape 4: Le script BME280

Le script BME280
Le script BME280

Comme mentionné précédemment, vous devez installer les bibliothèques Adafruit Blinka et Circuit Python BME280 ainsi que la bibliothèque Pimoroni Inky pHAT.

Le code initialise d'abord le capteur et Inky pHAT, puis lit les valeurs de température, de pression et d'humidité du capteur et les affiche sur l'écran et l'affichage e-ink. En utilisant la commande time.sleep(), les mesures sont prises toutes les minutes. Ajustez au besoin. En définissant un paramètre de langue, vous pouvez modifier la langue utilisée pour afficher les résultats.

En utilisant l'affichage e-ink Inky pHAT, vous construisez d'abord l'image à afficher en mémoire avant qu'elle ne soit finalement transférée à l'écran à l'aide de la commande inkyphat.show(). La bibliothèque Inky pHAT simplifie le processus, offrant des commandes pour dessiner et formater du texte, des lignes, des rectangles, des cercles ou utiliser des images d'arrière-plan.

En plus des valeurs mesurées, l'heure de la mesure est également affichée.

Veuillez garder à l'esprit que le script ainsi que les bibliothèques sont écrits en Python 3, donc ouvrez et exécutez en utilisant Py3 IDLE ou équivalent.

# Un script pour le capteur de température/pression/humidité bme280 (version non-Adafruit)# et l'encre pHAT - version noire # # version Dec 01 2018, Dr H # # Nécessite les bibliothèques Adafruit Blinka et Circuit Python BME280 # et le Pimoroni Inky bibliothèque pHAT import time import datetime import board import busio depuis adafruit_bme280 import Adafruit_BME280 depuis adafruit_bme280 import Adafruit_BME280_I2C import inkyphat import sys depuis PIL import ImageFont inkyphat.set_colour('black') # pour n/b inky phat inkyphat.set_rotation 180° font1 = ImageFont.truetype(inkyphat.fonts. FredokaOne, 27) # Sélectionnez la police standard font2 = ImageFont.truetype(inkyphat.fonts. FredokaOne, 19) # Sélectionnez les données de police standard # lang ="DE" # définissez le paramètre de langue, default ("") -> english lang ="EN" i2c = busio. I2C(board. SCL, board. SDA) bmp = Adafruit_BME280_I2C(i2c, address=0x76) # adresse i2c par défaut (pour Adafruit BMP280) 0x77 (par défaut), 0x76 pour l'évasion chinoise) #définir la pression de référence # requis pour al calcul du titre, veuillez ajuster. Valeur standard 1013,25 hPa # entrée manuelle: #reference_hPa =input ("Entrer la pression de référence en hPa: ") # ou # régler la pression au moment du démarrage comme référence, par ex. pour les mesures de hauteur relative time.sleep (1) # attendre une seconde avant la 1ère mesure j= 0 pres_norm_sum = 0 tandis que j est dans la plage (5): # prendre cinq mesures pour définir la valeur de référence pres_norm_sum = pres_norm_sum + bmp.pressure j= j+ 1 time.sleep (1) reference_hPa=(pres_norm_sum/j) # définir la mesure initiale comme point de référence pour permettre les mesures de hauteur bmp.sea_level_pressure = float (reference_hPa) print () while True: #runs forever, modifier pour la version crontab # mesuré valeurs t=bmp.temperature p=bmp.pressure h=bmp.humidity a=bmp.altitude # calculé par la bibliothèque adafruit à partir de la pression #timestamp ts = datetime.datetime.now() # timestamp ts0_EN ='{:%Y-% m-%d}'.format(ts) # timestamp - date, format EN ts0_DE ='{:%d.%m.%Y}'.format(ts) # timestamp - date, format allemand ts1='{: %H:%M:%S}'.format(ts) # timestamp - heure tmp = "{0:0.1f}".format(t) pre = "{0:0.1f}".format(p) hyg = "{0:0.1f}".format(h) alt="{0:0.1f}".format(a) tText = "Temp.: " pText_EN = "Pression: " pText_DE = "Luftdruck: " h Text_EN = "Humidité: " hText_DE = "rel. LF: " aText_EN = "Altitude: " aText_DE = "Höhe üNN: " # exakt: ü. NHN, über Normal Höhen Null if (lang =="DE"): ts0 = ts0_DE aText = aText_DE pText = pText_DE hText = hText_DE else: # anglais par défaut ts0 = ts0_EN aText = aText_EN pText = pText_EN hText = hText_EN # print les valeurs à afficher print (ts) print (tText, tmp, "°C") print (pText, pre, " hPa") print (hText, hyg, " %") print (aText, alt, " m") print () # imprime les valeurs vers Inky pHAT t1 = 5 # onglet 1, première colonne, simplifie l'optimisation de la mise en page t2 = 110 # onglet 2, deuxième colonne inkyphat. clear() inkyphat.text((t1, 0), ts0, inkyphat. BLACK, font2) # écriture de la date d'horodatage inkyphat.text((t2, 0), ts1, inkyphat. BLACK, font2) # écriture de l'heure d'horodatage inkyphat.line ((t1, 25, 207, 25), 1, 3) # trace une ligne inkyphat.text((t1, 30), tText, inkyphat. BLACK, font2) inkyphat.text((t2, 30), (tmp + "°C"), inkyphat. BLACK, font2) inkyphat.text((t1, 55), pText, inkyphat. BLACK, font2) inkyphat.text((t2, 55), (pre + " hPa"), inkyphat. NOIR, font2) inkyphat.text ((t1, 80), hText, inkyphat. BLACK, font2) inkyphat.text((t2, 80), (hyg + " %"), inkyphat. BLACK, font2) # afficher alternativement la hauteur calculée # inkyphat.text((t1, 80), aText, inkyphat. BLACK, font2) # inkyphat.text((t2, 80), (alt + " m"), inkyphat. BLACK, font2) inkyphat.show() time.sleep(51) # attendre quelques secondes avant les prochaines mesures, +19 sec par cycle inkyphat.clear() # vide Procédure d'affichage Inky pHAT, inkyphat.show() # silence pour la version crontab

Étape 5: Le script BMP280

Le BMP280 est très similaire au capteur BME280, mais ne mesure que la température et la pression. Les scripts sont très similaires, mais vous avez besoin de bibliothèques Circuit Python différentes. Ici, au lieu de l'humidité, une hauteur calculée, basée sur une pression de référence, est affichée.

Vous trouverez ci-joint le script.

Conseillé: