Spisu treści:

RuuviTag i PiZero W i Blinkt! termometr Bluetooth Beacon: 3 kroki (ze zdjęciami)
RuuviTag i PiZero W i Blinkt! termometr Bluetooth Beacon: 3 kroki (ze zdjęciami)

Wideo: RuuviTag i PiZero W i Blinkt! termometr Bluetooth Beacon: 3 kroki (ze zdjęciami)

Wideo: RuuviTag i PiZero W i Blinkt! termometr Bluetooth Beacon: 3 kroki (ze zdjęciami)
Wideo: Playing With Blinkt 2024, Listopad
Anonim
RuuviTag i PiZero W i Blinkt! termometr Bluetooth Beacon
RuuviTag i PiZero W i Blinkt! termometr Bluetooth Beacon
RuuviTag i PiZero W i Blinkt! termometr Bluetooth Beacon
RuuviTag i PiZero W i Blinkt! termometr Bluetooth Beacon
RuuviTag i PiZero W i Blinkt! termometr Bluetooth Beacon
RuuviTag i PiZero W i Blinkt! termometr Bluetooth Beacon

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

Urządzenie i program
Urządzenie i program
Urządzenie i program
Urządzenie i program
Urządzenie i program
Urządzenie i program
Urządzenie i program
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

Zalecana: