Sommario:

Stazione meteorologica Inky_pHAT: 5 passaggi
Stazione meteorologica Inky_pHAT: 5 passaggi

Video: Stazione meteorologica Inky_pHAT: 5 passaggi

Video: Stazione meteorologica Inky_pHAT: 5 passaggi
Video: ANTO ANTO SCHERZO DELLA PIZZA INCREDIBILE THE BLACK BOYS😨😱😱 2024, Luglio
Anonim
Stazione meteorologica Inky_pHAT
Stazione meteorologica Inky_pHAT
Stazione meteorologica Inky_pHAT
Stazione meteorologica Inky_pHAT
Stazione meteorologica Inky_pHAT
Stazione meteorologica Inky_pHAT
Stazione meteorologica Inky_pHAT
Stazione meteorologica Inky_pHAT

Vorrei qui descrivere una stazione meteo molto semplice e compatta, basata su Raspberry Pi Zero, che visualizza i valori misurati da un sensore di temperatura/pressione/umidità BME280 su un display Pimoroni Inky pHAT e-paper/e-ink. Per consentire il collegamento dei sensori e del pHAT al GPIO del Pi ho posizionato un hacker Pimorini Pico HAT con due connettori femmina attaccati tra il GPIO e il display. Il dispositivo è stato utilizzato per collegare diversi sensori, quindi la versione BME280 qui descritta è solo un esempio.

A differenza dei display LCD, i display e-ink mantengono l'immagine anche se l'alimentazione è stata spenta. Pertanto sono un'ottima soluzione se si desidera visualizzare informazioni che vengono aggiornate solo di volta in volta, soprattutto per costruire dispositivi a basso consumo energetico. Il vantaggio principale della versione monocromatica/nera di Inky pHAT è che l'aggiornamento del display richiede solo un secondo, invece dei dieci-quindici secondi richiesti dalle versioni a tre colori. Guardare film.

La libreria Blinka di Adafruit consente di eseguire il codice Circuit Python sul Raspberry Pi e gli esempi di Circuit Python per un'ampia varietà di sensori sono disponibili da Adafruit. Una descrizione dettagliata su come installare Blinka e i codici Circuit Python è disponibile sul sito Web di Adafruit. Le librerie che ho testato finora (BMP280, BME280, TSL2591, TCS34785, VEML7065, …) funzionavano molto bene, mentre c'erano problemi minori in alcuni dei codici di esempio.

BME280 è un sensore per misurare temperatura, umidità e pressione atmosferica. I breakout BMP280 sono disponibili da molti fornitori, incluso Adafruit, ma qui stavo usando una versione cinese economica. Tieni presente che utilizzano indirizzi i2c diversi (Adafruit: 0x77, altri: 0x76).

Il breakout è collegato al Pi tramite i2c e la lettura del sensore è molto semplice utilizzando la libreria e il codice di esempio.

Passaggio 1: materiali utilizzati

Materiali usati
Materiali usati
Materiali usati
Materiali usati
Materiali usati
Materiali usati
Materiali usati
Materiali usati

Un Raspberry Pi Zero, con un'intestazione maschio attaccata. Ma qualsiasi versione di Raspberry Pi andrebbe bene.

Un Pimoroni Inky pHAT, versione nera/monocromatica, 25€|22£|20US$, da Pimoroni.

Un hacker Pimoroni Pico HAT, 2.50€|2£, con due intestazioni femminili attaccate, una delle quali un'intestazione booster con pin più lunghi. Ho creato due versioni diverse, vedere la descrizione di seguito.

Un breakout BME280, consegna AZ tramite Amazon.de @ 7,50 €, con intestazione allegata.

Cavi di accoppiamento in allungamento

Opzionale:

Un alimentatore USB, per applicazioni mobili

Un alloggiamento per il Pi o il dispositivo (non mostrato qui)

Passaggio 2: assemblaggio

Assemblea
Assemblea
Assemblea
Assemblea
Assemblea
Assemblea
  • Salda le intestazioni femminili all'hacker Pico HAT. Prima di saldare, verificare il corretto orientamento. Ho creato due versioni di questo, per scopi diversi. Uno con l'intestazione del booster rivolta verso il basso posizionata nella prima fila e un'intestazione normale, rivolta verso l'alto nella fila posteriore, e una versione con l'intestazione del booster rivolta verso il basso nella fila posteriore e un'intestazione femmina ad angolo retto nella prima fila. Vedi immagini. La prima versione consente di collegare e scambiare sensori e cavi molto facilmente, mentre la versione con l'intestazione rivolta verso l'interno consente di racchiudere Pi, sensore e Inky pHAT in un alloggiamento. In alternativa è possibile saldare i cavi che collegano GPIO e sensore direttamente all'hacker Pico HAT e/o saldare l'hacker Pico HAT direttamente ai pin GPIO. In ogni caso utilizzare la quantità minima di saldatura necessaria.
  • Se necessario, saldare l'intestazione al sensore.
  • Impila l'unità hacker Pico HAT modificata sul Pi, quindi aggiungi l'Inky pHAT. Se necessario, inserire un supporto, ad es. Un blocco di schiuma o distanziatori, per Inky pHAT.
  • Collegare i cavi e il sensore, utilizzando le porte 3V, GND, SDA e SCL. Non tutti i sensori sopravviveranno a 5V, quindi controlla prima di collegarli alle porte 5V.
  • Installa la libreria Blinka, quindi installa la libreria Circuit Python BME280 da Adafruit.
  • Installa la libreria Inky pHAT di Pimoroni.
  • Installa il codice Python di esempio descritto in un passaggio successivo e allegato a questa istruzione.
  • Esegui il codice.

Passaggio 3: utilizzo del dispositivo

Utilizzo del dispositivo
Utilizzo del dispositivo

Sono disponibili due opzioni per utilizzare il dispositivo.

Il codice come mostrato qui deve essere avviato utilizzando una schermata allegata, ma poi potrebbe essere eseguito senza.

Con piccole modifiche al codice è possibile utilizzare crontab per eseguire misurazioni in momenti definiti. Ciò consentirebbe di ridurre ulteriormente il consumo di energia. Ottime descrizioni su come usare crontab possono essere trovate altrove.

In combinazione con un alimentatore puoi costruire un dispositivo mobile e usarlo per misurare le condizioni all'interno o all'esterno, nel frigorifero, nella sauna, nel tuo humidor, in cantina, in aereo, ….

Utilizzando uno Zero W puoi non solo visualizzare i valori sul display, ma anche inviarli a un server o al tuo sito web tramite WLAN, come descritto altrove.

Passaggio 4: lo script BME280

Lo script BME280
Lo script BME280

Come accennato in precedenza, è necessario installare le librerie Adafruit Blinka e Circuit Python BME280, nonché la libreria Pimoroni Inky pHAT.

Il codice prima inizializza il sensore e Inky pHAT, quindi legge i valori di temperatura, pressione e umidità dal sensore e li visualizza sullo schermo e sul display e-ink. Utilizzando il comando time.sleep(), le misurazioni vengono eseguite ogni minuto. Regolare come richiesto. Impostando un parametro di lingua, è possibile modificare la lingua utilizzata per visualizzare i risultati.

Usando il display e-ink Inky pHAT, prima costruisci l'immagine da visualizzare in memoria prima che venga infine trasferita sullo schermo usando il comando inkyphat.show(). La libreria Inky pHAT semplifica il processo, offrendo comandi per disegnare e formattare testo, linee, rettangoli, cerchi o utilizzare immagini di sfondo.

Oltre ai valori misurati, viene visualizzato anche il tempo di misurazione.

Tieni presente che lo script e le librerie sono scritti in Python 3, quindi apri ed esegui utilizzando Py3 IDLE o equivalente.

# Uno script per il sensore di temperatura/pressione/umidità bme280 (versione non Adafruit)# e inky pHAT - versione nera # # versione Dec 01 2018, Dr H # # Richiede le librerie Adafruit Blinka e Circuit Python BME280 # e Pimoroni Inky Libreria pHAT import time import datetime import board import busio from adafruit_bme280 import Adafruit_BME280 from adafruit_bme280 import Adafruit_BME280_I2C import inkyphat import sys from PIL import ImageFont inkyphat.set_colour('black') # per b/n inky phat inkyphat.set_rotation(180 180° font1 = ImageFont.truetype(inkyphat.fonts. FredokaOne, 27) # Seleziona font standard font2 = ImageFont.truetype(inkyphat.fonts. FredokaOne, 19) # Seleziona dati font standard # lang ="DE" # imposta il parametro della lingua, default ("") -> inglese lang ="EN" i2c = busio. I2C(board. SCL, board. SDA) bmp = Adafruit_BME280_I2C(i2c, address=0x76) # indirizzo i2c predefinito (per Adafruit BMP280) 0x77 (default), 0x76 per breakout cinese) #set pressione di riferimento # richiesto per al calcolo dell'istituto, si prega di regolare. Valore standard 1013.25 hPa # input manuale: #reference_hPa =input ("Inserire la pressione di riferimento in hPa: ") # o # impostare la pressione all'inizio come riferimento, ad es. per le misurazioni relative dell'altezza time.sleep (1) # aspetta un secondo prima della prima misurazione j= 0 pres_norm_sum = 0 mentre j nel range (5): # esegui cinque misurazioni per definire il valore di riferimento pres_norm_sum = pres_norm_sum + bmp.pression j= j+ 1 time.sleep (1) reference_hPa=(pres_norm_sum/j) # imposta la misurazione iniziale come punto di riferimento per abilitare le misurazioni dell'altezza bmp.sea_level_pression = float (reference_hPa) print () mentre True: #runs sempre, modifica per crontab-version # misurato valori t=bmp.temperature p=bmp.pression h=bmp.humidity a=bmp.altitude # calcolato dalla libreria adafruit da pressure #timestamp ts = datetime.datetime.now() # timestamp ts0_EN ='{:%Y-% m-%d}'.format(ts) # timestamp - data, formato EN ts0_DE ='{:%d.%m.%Y}'.format(ts) # timestamp - data, formato tedesco ts1='{: %H:%M:%S}'.format(ts) # timestamp - time 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 = "Pressione: " pText_DE = "Luftdruck: " h Text_EN = "Umidità: " 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: # default italiano ts0 = ts0_EN aText = aText_EN pText = pText_EN hText = hText_EN # stampa i valori da visualizzare print (ts) print (tText, tmp, "°C") print (pText, pre, " hPa") print (hText, hyg, " %") print (aText, alt, " m") print() # stampa i valori su Inky pHAT t1 = 5 # tab 1, prima colonna, semplifica l'ottimizzazione del layout t2 = 110 # tab 2, seconda colonna inkyphat. clear() inkyphat.text((t1, 0), ts0, inkyphat. BLACK, font2) # scrive data e ora inkyphat.text((t2, 0), ts1, inkyphat. BLACK, font2) # scrive data e ora inkyphat.line ((t1, 25, 207, 25), 1, 3) # traccia una linea 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. NERO, font2) inkyphat.text ((t1, 80), hText, inkyphat. BLACK, font2) inkyphat.text((t2, 80), (hyg + " %"), inkyphat. BLACK, font2) # visualizza in alternativa l'altezza calcolata # inkyphat.text((t1, 80), aText, inkyphat. BLACK, font2) # inkyphat.text((t2, 80), (alt + " m"), inkyphat. BLACK, font2) inkyphat.show() time.sleep(51) # attendere alcuni secondi prima delle misurazioni successive, +19 sec per ciclo inkyphat.clear() # vuoto procedura di visualizzazione Inky pHAT, inkyphat.show() # silenzio per la versione crontab

Passaggio 5: lo script BMP280

Il BMP280 è molto simile al sensore BME280, ma misura solo temperatura e pressione. Gli script sono molto simili, ma sono necessarie diverse librerie Circuit Python. Qui invece dell'umidità viene visualizzata un'altezza calcolata, basata su una pressione di riferimento.

In allegato trovate lo script.

Consigliato: