Spisu treści:

Stacja pogodowa Inky_pHAT: 5 kroków
Stacja pogodowa Inky_pHAT: 5 kroków

Wideo: Stacja pogodowa Inky_pHAT: 5 kroków

Wideo: Stacja pogodowa Inky_pHAT: 5 kroków
Wideo: Cebula dymka cz. 5 2024, Lipiec
Anonim
Stacja pogodowa Inky_pHAT
Stacja pogodowa Inky_pHAT
Stacja pogodowa Inky_pHAT
Stacja pogodowa Inky_pHAT
Stacja pogodowa Inky_pHAT
Stacja pogodowa Inky_pHAT
Stacja pogodowa Inky_pHAT
Stacja pogodowa Inky_pHAT

W tym miejscu chciałbym opisać bardzo prostą i kompaktową stację pogodową opartą na Raspberry Pi Zero, która wyświetla wartości zmierzone przez czujnik temperatury/ciśnienia/wilgotności BME280 na wyświetlaczu e-paper/e-ink Pimoroni Inky pHAT. Aby umożliwić podłączenie czujników i pHAT do GPIO Pi, umieściłem hakera Pimorini Pico HAT z dwoma żeńskimi nagłówkami dołączonymi między GPIO a wyświetlaczem. Urządzenie zostało użyte do podłączenia kilku czujników, więc opisana tutaj wersja BME280 jest tylko przykładem.

W przeciwieństwie do wyświetlaczy LCD, wyświetlacze e-ink zachowują obraz nawet po wyłączeniu zasilania. Dlatego są bardzo dobrym rozwiązaniem, jeśli chcesz wyświetlać informacje, które są aktualizowane tylko od czasu do czasu, zwłaszcza do budowy urządzeń energooszczędnych. Główną zaletą monochromatycznej/czarnej wersji Inky pHAT jest to, że aktualizacja wyświetlacza zajmuje tylko około jednej sekundy, zamiast dziesięciu do piętnastu sekund wymaganych w wersjach trójkolorowych. Zobacz film.

Biblioteka Blinka firmy Adafruit umożliwia uruchamianie kodu Circuit Python na Raspberry Pi, a próbki Circuit Python dla szerokiej gamy czujników są dostępne w Adafruit. Szczegółowy opis instalacji kodów Blinki i Circuit Python można znaleźć na stronie Adafruit. Biblioteki, które testowałem do tej pory (BMP280, BME280, TSL2591, TCS34785, VEML7065, …) działały bardzo dobrze, podczas gdy w niektórych przykładowych kodach występowały drobne problemy.

BME280 to czujnik do pomiaru temperatury, wilgotności i ciśnienia atmosferycznego. Breakouty BMP280 są dostępne u wielu sprzedawców, w tym u Adafruit, ale tutaj używałem taniej chińskiej wersji. Należy pamiętać, że używają one różnych adresów i2c (Adafruit: 0x77, inne: 0x76).

Breakout jest podłączony do Pi przez i2c, a odczyt czujnika jest bardzo prosty przy użyciu biblioteki i przykładowego kodu.

Krok 1: Użyte materiały

Użyte materiały
Użyte materiały
Użyte materiały
Użyte materiały
Użyte materiały
Użyte materiały
Użyte materiały
Użyte materiały

Raspberry Pi Zero z dołączonym męskim nagłówkiem. Ale wystarczy każda wersja Raspberry Pi.

Pimoroni Inky pHAT, wersja czarna/monochromatyczna, 25€|22£|20US$, w Pimoroni.

Haker Pimoroni Pico HAT, 2,50 €|2 £, z dołączonymi dwoma żeńskimi nagłówkami, z których jedna to nagłówek wzmacniający z dłuższymi pinami. Zbudowałem dwie różne wersje, patrz opis poniżej.

Wybuch BME280, dostawa AZ przez Amazon.de @ 7,50 €, z dołączonym nagłówkiem.

Przedłużenia kabli połączeniowych

Opcjonalny:

Zasilacz USB do zastosowań mobilnych

Obudowa dla Pi lub urządzenia (nie pokazana tutaj)

Krok 2: Montaż

montaż
montaż
montaż
montaż
montaż
montaż
  • Przylutuj żeńskie nagłówki hakerowi Pico HAT. Przed lutowaniem sprawdź poprawność orientacji. Zbudowałem dwie wersje tego, do różnych celów. Jeden z głowicą podwyższającą skierowaną w dół umieszczoną w pierwszym rzędzie i normalną głowicą skierowaną do góry/w kierunku tylnym oraz wersję z głowicą podwyższającą skierowaną w dół w tylnym rzędzie i żeńską głowicą pod kątem prostym w przednim rzędzie. Zobacz obrazy. Pierwsza wersja pozwala na bardzo łatwe podłączanie i wymianę czujników i kabli, podczas gdy wersja ze złączem skierowanym do wewnątrz pozwala na umieszczenie Pi, czujnika i Inky pHAT w obudowie. Alternatywnie możesz przylutować kable łączące GPIO i czujnik bezpośrednio do hakera Pico HAT i/lub przylutować hakera Pico HAT bezpośrednio do pinów GPIO. W każdym przypadku użyj minimalnej wymaganej ilości lutu.
  • W razie potrzeby przylutuj głowicę do czujnika.
  • Ułóż zmodyfikowaną jednostkę hakerską Pico HAT na Pi, a następnie dodaj Inky pHAT. W razie potrzeby wstaw podporę, np. Blok piankowy lub elementy dystansowe do Inky pHAT.
  • Podłącz kable i czujnik, używając portów 3V, GND, SDA i SCL. Nie wszystkie czujniki przetrwają napięcie 5V, więc sprawdź przed podłączeniem ich do portów 5V.
  • Zainstaluj bibliotekę Blinka, a następnie zainstaluj bibliotekę Circuit Python BME280 firmy Adafruit.
  • Zainstaluj bibliotekę Inky pHAT firmy Pimoroni.
  • Zainstaluj przykładowy kod Pythona opisany w późniejszym kroku i dołączony do tej instrukcji.
  • Uruchom kod.

Krok 3: Korzystanie z urządzenia

Korzystanie z urządzenia
Korzystanie z urządzenia

Istnieją dwie możliwości korzystania z urządzenia.

Kod pokazany tutaj powinien być uruchamiany przy użyciu dołączonego ekranu, ale potem może działać bez.

Przy drobnych modyfikacjach kodu można użyć crontab do wykonywania pomiarów w określonych punktach czasowych. Pozwoliłoby to jeszcze bardziej zmniejszyć zużycie energii. Doskonałe opisy jak korzystać z crontab można znaleźć gdzie indziej.

W połączeniu z zasilaczem możesz zbudować urządzenie mobilne i użyć go do pomiaru warunków wewnątrz lub na zewnątrz, w lodówce, saunie, humidorze, piwnicy na wino, w samolocie….

Używając Zero W możesz nie tylko wyświetlać wartości na wyświetlaczu, ale także wysyłać je na serwer lub Twoją stronę internetową przez WLAN, jak opisano w innym miejscu.

Krok 4: Skrypt BME280

Skrypt BME280
Skrypt BME280

Jak wspomniano wcześniej, należy zainstalować biblioteki Adafruit Blinka i Circuit Python BME280 oraz bibliotekę Pimoroni Inky pHAT.

Kod najpierw inicjuje czujnik i Inky pHAT, a następnie odczytuje wartości temperatury, ciśnienia i wilgotności z czujnika i wyświetla je na ekranie i wyświetlaczu e-ink. Za pomocą polecenia time.sleep() pomiary są wykonywane co minutę. Dostosuj zgodnie z wymaganiami. Ustawiając parametr języka, możesz zmienić język używany do wyświetlania wyników.

Korzystając z wyświetlacza e-ink Inky pHAT, najpierw budujesz obraz, który ma być wyświetlany w pamięci, zanim ostatecznie zostanie on przesłany na ekran za pomocą polecenia inkyphat.show(). Biblioteka Inky pHAT upraszcza proces, oferując polecenia do rysowania i formatowania tekstu, linii, prostokątów, okręgów lub używania obrazów tła.

Oprócz zmierzonych wartości wyświetlany jest również czas pomiaru.

Należy pamiętać, że skrypt oraz biblioteki są napisane w Pythonie 3, więc otwórz i uruchom przy użyciu Py3 IDLE lub odpowiednika.

# Skrypt dla czujnika temperatury/ciśnienia/wilgotności bme280 (wersja bez Adafruit)# i atramentowy pHAT - wersja czarna # # wersja Dec 01 2018, Dr H # # Wymaga bibliotek Adafruit Blinka i Circuit Python BME280 # oraz Pimoroni Inky biblioteka pHAT import czas import datetime import board import busio z adafruit_bme280 import Adafruit_BME280 z adafruit_bme280 import Adafruit_BME280_I2C import inkyphat import sys z PIL import ImageFont inkyphat.set_colour('black') # for b/w inky phat inkyphat. 180° font1 = ImageFont.truetype(inkyphat.fonts. FredokaOne, 27) # Wybierz standardową czcionkę font2 = ImageFont.truetype(inkyphat.fonts. FredokaOne, 19) # Wybierz standardowe dane czcionki # lang ="DE" # ustaw parametr języka, default ("") -> angielski ="PL" i2c = busio. I2C(board. SCL, board. SDA) bmp = Adafruit_BME280_I2C(i2c, adres=0x76) # domyślny adres i2c (dla Adafruit BMP280) 0x77 (domyślnie), 0x76 dla chińskiego wybicia) #ustaw ciśnienie odniesienia # wymagane dla al Obliczanie tytułu, proszę dostosować. Wartość standardowa 1013,25 hPa # ręczne wprowadzenie: #reference_hPa =input ("Wprowadź ciśnienie odniesienia w hPa:") # lub # ustaw ciśnienie w momencie rozpoczęcia jako wartość odniesienia, np. dla pomiarów wysokości względnej time.sleep (1) # czekaj sekundę przed pierwszym pomiarem j= 0 pres_norm_sum = 0 podczas j w zakresie (5): # wykonaj pięć pomiarów, aby zdefiniować wartość odniesienia pres_norm_sum = pres_norm_sum + bmp.pressure j= j+ 1 time.sleep (1) reference_hPa=(pres_norm_sum/j) # ustaw pomiar początkowy jako punkt odniesienia, aby włączyć pomiary wysokości bmp.sea_level_pressure = float (reference_hPa) print () while True: #działa w nieskończoność, zmodyfikuj dla wersji crontab # zmierzone wartości t=bmp.temperature p=bmp.pressure h=bmp.humidity a=bmp.altitude # obliczane przez bibliotekę adafruit na podstawie ciśnienia #timestamp ts = datetime.datetime.now() #timestamp ts0_EN ='{:%Y-% m-%d}'.format(ts) # znacznik czasu - data, format EN ts0_DE ='{:%d.%m.%Y}'.format(ts) # znacznik czasu - data, format niemiecki ts1='{: %H:%M:%S}'.format(ts) # znacznik czasu - czas 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 = "Ciśnienie: " pText_DE = "Luftdruck: " h Text_EN = "Wilgotność: " hText_DE = "rel. LF: " aText_EN = "Wysokość: " 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 english ts0 = ts0_EN aText = aText_EN pText = pText_EN hText = hText_EN # drukuj wartości do wyświetlenia print (ts) print (tText, tmp, "°C") print (pText, pre, " hPa") print (hText, hyg, " %") print (aText, alt, " m") print () # drukuj wartości do Inky pHAT t1 = 5 # tab 1, pierwsza kolumna, upraszcza optymalizację układu t2 = 110 # tab 2, druga kolumna inkyphat. clear() inkyphat.text((t1, 0), ts0, inkyphat. BLACK, font2) # data zapisu data inkyphat.text((t2, 0), ts1, inkyphat. BLACK, font2) # data zapisu inkyphat.line ((t1, 25, 207, 25), 1, 3) # narysuj linię 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. CZARNY, czcionka2) inkyphat.text ((t1, 80), hText, inkyphat. BLACK, font2) inkyphat.text((t2, 80), (hyg + " %"), inkyphat. BLACK, font2) # alternatywnie wyświetlaj obliczoną wysokość # inkyphat.text((t1, 80), aText, inkyphat. BLACK, font2) # inkyphat.text((t2, 80), (alt + " m"), inkyphat. BLACK, font2) inkyphat.show() time.sleep(51) # poczekaj kilka sekund przed kolejnymi pomiarami, +19 sekund na cykl inkyphat.clear() # pusta procedura wyświetlania Inky pHAT, inkyphat.show() # cisza dla wersji crontab

Krok 5: Skrypt BMP280

BMP280 jest bardzo podobny do czujnika BME280, ale mierzy tylko temperaturę i ciśnienie. Skrypty są bardzo podobne, ale potrzebujesz różnych bibliotek Circuit Python. Tutaj zamiast wilgotności wyświetlana jest obliczona wysokość, oparta na ciśnieniu odniesienia.

W załączeniu znajdziesz skrypt.

Zalecana: