2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Ta instrukcja opisuje podejście do odczytywania danych temperatury i wilgotności z RuuviTag za pomocą Bluetooth z Raspberry Pi Zero W i wyświetlania wartości w liczbach binarnych na migawce Pimoroni! pHAT. Albo w skrócie: jak zbudować najnowocześniejszy i trochę nerdowy termometr.
RuuviTag to sygnalizator bluetooth typu open source, który jest wyposażony w czujniki temperatury/wilgotności/ciśnienia i przyspieszenia, ale może również działać jako standardowy sygnalizator zbliżeniowy Eddystone™ / iBeacon. To był bardzo udany projekt na Kickstarterze, który dostałem kilka tygodni temu. Istnieje Github z oprogramowaniem Pythona do odczytywania RuuviTag za pomocą maliny, a ja użyłem jednego z ich przykładów z kilkoma dodatkami.
Raspberry Pi Zero W to najnowszy członek rodziny RPi, w zasadzie Pi Zero z dodanym Bluetooth i WLAN.
Błysk! pHAT od Pimoroni to w zasadzie pasek ośmiu diod LED RBG skonfigurowanych jako HAT dla Raspberry Pi. Jest bardzo łatwy w użyciu i zawiera bibliotekę Pythona. Pomysł polegał na odczytaniu danych z RuuviTag i wyświetleniu ich za pomocą blinkt! KAPELUSZ. Wartości są wyświetlane jako liczby binarne za pomocą 7 diod LED, podczas gdy ósma służy do wskazania, czy wyświetlane są wartości wilgotności lub temperatury (+/-/0).
Krok 1: Konfiguracja systemu
Konfiguracja systemu jest prosta:- Włącz RuuviTag (wersja z czujnikiem temperatury RuuviTag).
- Skonfiguruj swój RPi Zero W, RPi3 lub dowolny inny RPi z dodaną pojemnością Bluetooth, postępując zgodnie z instrukcjami na www.raspberrypi.org.
- Umieść migacz! Czapka na RPi (gdy wyłączona).
- Zainstaluj migacz! i oprogramowanie RuuviTag, jak wskazano na odpowiednich stronach GitHub.
- Teraz musisz zidentyfikować adres MAC swojego RuuviTag
- skopiuj załączony program Pythona, otwórz go za pomocą IDLE for Python 3
- zmień adres MAC RuuviTag na swój, a następnie zapisz i uruchom program.
- możesz dowolnie modyfikować i optymalizować program. Program jest taki, jaki jest, z którego korzystasz na własne ryzyko, nie ponosisz żadnej odpowiedzialności za jakiekolwiek szkody.
Krok 2: Urządzenie i program
Jak wspomniano powyżej, pomysł polegał na zbudowaniu prostego i niedrogiego systemu do odczytywania danych z beacona i wyświetlania wartości liczbowych na blinkt! HAT lub podobny pasek LED.
Zakres wartości temperatury mierzonej za pomocą systemu opartego na RPi będzie w większości przypadków mieścił się w przedziale od -50°C do +80°C, przy wilgotności od 0 do 100%. Tak więc wyświetlacz, który może podawać wartości od -100 do +100, będzie wystarczający dla większości zastosowań. Liczby dziesiętne mniejsze niż 128 mogą być wyświetlane jako liczby binarne z 7 bitami (lub diodami LED). Tak więc program pobiera wartości temperatury i wilgotności z RuuviTag jako liczby „float” i przekształca je na liczby binarne, które następnie są wyświetlane na ekranie blinkt!.
W pierwszym kroku liczba jest zaokrąglana, analizowana, czy jest dodatnia, ujemna lub zero, a następnie przekształcana w liczbę dodatnią za pomocą „abs”. Następnie liczba dziesiętna jest konwertowana na 7-cyfrową liczbę binarną, w zasadzie ciąg zer i jedynek, który jest analizowany i wyświetlany na ostatnich 7 pikselach blinkt!.
W przypadku wartości temperatury pierwszy piksel wskazuje, czy wartość jest dodatnia (czerwona), zerowa (magenta) czy ujemna (niebieska). Wyświetlając wartości wilgotności jest ustawiony na zielony. Aby uprościć rozróżnianie wartości temperatury i wilgotności, piksele binarne są ustawiane na kolor biały dla temperatury i żółty dla wilgotności. Aby zwiększyć czytelność liczb binarnych, piksele „0” nie są całkowicie wyłączane, ale są ustawiane znacznie słabiej niż w stanie „1”. Jak mrugnięcie! piksele są bardzo jasne, można ustawić ogólną jasność zmieniając parametr „jasny”
Program wyświetla wartości i części procesu również na ekranie. Dodatkowo znajdziesz kilka wyciszonych (#) instrukcji drukowania. Zostawiłem je, ponieważ mogą być pomocne w zrozumieniu procesu, jeśli nie są wyciszone.
Wartości mogą być również przechowywane w pliku dziennika.
Krok 3: Kod programu
Kod został nieco odpluskwiony i zoptymalizowany. Możesz teraz znaleźć wersję 3 (20_03_2017).
' Ten program jest przeznaczony do odczytywania wartości temperatury, wilgotności i ciśnienia z RuuviTag '' oraz do wyświetlania wartości temperatury i wilgotności w postaci liczb binarnych na migawce Pimorini! KAPELUSZ. ' '' ' Jest oparty na przykładzie print_to_screen.py z biblioteki ruuvitag na github. ' ' Wymaga Pi Zero W, Pi 3 lub innego RPi wyposażonego w Bluetooth i zainstalowanych wszystkich niezbędnych bibliotek.'
czas importu
importuj system operacyjny z datetime importuj datetime
z ruuvitag_sensor.ruuvi importuj RuuviTagSensor
from blinkt import set_clear_on_exit, set_pixel, clear, show
def temp_blinkt(bt):
# ta procedura pobiera wartość temperatury i wyświetla ją jako liczbę binarną na blinkt!
jasne ()
# kolor i intensywność "1" pikseli: biały
r1 = 64 g1 = 64 b1 = 64
#kolor i intensywność pikseli „0”: biały
r0 = 5 g0 = 5 b0 = 5
# Zaokrąglaj i konwertuj na liczbę całkowitą
r = okrągły (bt)
# vz reprezentuje znak algebraiczny dla piksela wskaźnika
if (r>0): vz = 1 # dodatni elif (r<0): vz= 2 # ujemny else: vz= 0 # zero # drukuj (vz) i = abs(r) #drukuj (i)
# przekształć na bezwzględną, 7-cyfrową liczbę binarną
i1 = i + 128 # dla i daje 8-cyfrową liczbę binarną zaczynającą się od 1 # drukuj (i1)
b = "{0:b}".format(i1) # konwertuj na binarny
# druk (b)
b0 = str (b) # zamień na ciąg
b1 = b0[1:8] #obcina pierwszy bit
print ("liczba binarna:", b1)
# Ustaw piksele na blinkt!
# ustaw liczbę binarną
dla h w zakresie (0, 7): f = (h+1) if (b1[h] == "1"): set_pixel (f, r1, g1, b1) # print ("bit", h, " wynosi 1, piksel ", f) else: set_pixel (f, r0, g0, b0) # print("nil")
# Ustaw piksel wskaźnika
if (vz==1): set_pixel (0, 64, 0, 0) # czerwony dla wartości dodatnich elif (vz==2): set_pixel (0, 0, 0, 64) # niebieski dla wartości ujemnych else: set_pixel (0, 64, 0, 64) # magenta jeśli zero
pokazać()
# koniec temp_blinkt()
def hum_blinkt(bh):
# pobiera wartość wilgotności i wyświetla ją jako liczbę binarną na blinkt!
jasne()
# kolor i intensywność "1" pikseli: żółty
r1 = 64 g1 = 64 b1 = 0
#kolor i intensywność pikseli „0”:
r0 = 5 g0 = 5 b0 = 0
# Zaokrąglaj i przekształcaj w liczbę całkowitą
r = okrągły (bh)
# przekształć na bezwzględną, 7-cyfrową liczbę binarną i = abs(r) #print (i)
i1 = i + 128 # dla i daje 8-cyfrową liczbę binarną zaczynającą się od 1
# druk (i1)
b = "{0:b}".format(i1)
# druk (b)
b0 = str (b)
b1 = b0[1:8] #obcina pierwszy bit
print ("liczba binarna:", b1)
# Ustaw piksele na blinkt!
# ustaw liczbę binarną na piksele
dla h w zakresie (0, 7): f = (h+1) if (b1[h] == "1"): set_pixel (f, r1, g1, b1) else: # mute to puste diody set_pixel (f, r0, g0, b0) # wyciszenie do pustych diod
# Ustaw piksel wskaźnika
set_pixel (0, 0, 64, 0) # zielony dla wilgotności
pokazać()
# koniec hum_blinkt()
set_clear_on_exit()
# Odczytywanie danych z RuuviTag
mac = 'EC:6D:59:6D:01:1C' # Zmień na adres mac własnego urządzenia
print('Uruchamianie')
czujnik = RuuviTagSensor (mac)
podczas gdy prawda:
dane = czujnik.aktualizacja()
line_sen = str.format('Czujnik - {0}', mac)
line_tem = str.format('Temperatura: {0} C', data['temperatura']) line_hum = str.format('Wilgotność: {0} %', data['wilgotność']) line_pre = str.format('Ciśnienie: {0}', dane['ciśnienie'])
wydrukować()
# wyświetlaj temperaturę na blinkt! ba = str.format('{0}', data['temperatura']) bt = float (ba) print (bt, " °C") temp_blinkt (bt) print()
czas.snu (10) # wyświetlaj temperaturę przez 10 sekund
# wyświetlaj wilgotność na blinkt!
bg = str.format('{0}', data['wilgotność']) bh = float (bg) print (bh, " %") hum_blinkt (bh) print ()
# Wyczyść ekran i wydrukuj dane czujnika na ekranie
os.system('clear') print('Naciśnij Ctrl+C, aby wyjść.\n\n') print(str(datetime.now())) print(line_sen) print(line_tem) print(line_hum) print(line_pre) print('\n\n\r…….')
# Poczekaj kilka sekund i zacznij od nowa
try: time.sleep(8) z wyjątkiem KeyboardInterrupt: # Po naciśnięciu Ctrl+C wykonanie pętli podczas zatrzymania print('Exit') clear() show() break