Spisu treści:
Wideo: RuuviTag i PiZero W i Blinkt! termometr Bluetooth Beacon: 3 kroki (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:30
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
Zalecana:
Arduino Termometr na podczerwień Pistolet MDF Obudowa: 4 kroki (ze zdjęciami)
Arduino Infrared Thermometer Gun Obudowa MDF: Ten projekt służy do wykonania termometru na podczerwień z Arduino, obwód jest umieszczony w obudowie MDF, która wygląda jak medyczny termometr na podczerwień na rynku. Czujnik termometru na podczerwień GY-906 służy do bezdotykowego pomiaru temperatury obiektu, to może znaczyć
Beacon prognozy pogody: 4 kroki (ze zdjęciami)
Weather Forecast Beacon: W tym projekcie prezentuję model z lokalnego radiolatarni, który wykonałem za pomocą druku 3D, pasków LED, zasilacza i płytki Arduino z połączeniem Wi-Fi, aby uzyskać dostęp do prognozy pogody na następny dzień. Głównym celem
Termometr rejestrujący DIY z 2 czujnikami: 3 kroki (ze zdjęciami)
Termometr rejestrujący DIY z 2 czujnikami: Ten projekt jest rozwinięciem mojego poprzedniego projektu „Termometr rejestrujący DIY”. Rejestruje pomiary temperatury na kartę micro SD. Zmiany sprzętowe Do modułu zegara czasu rzeczywistego dodałem czujnik temperatury DS18B20, gdzie znajduje się pr
Bezdotykowy termometr na podczerwień na bazie Arduino - Termometr na podczerwień z Arduino: 4 kroki
Bezdotykowy termometr na podczerwień na bazie Arduino | Termometr na podczerwień za pomocą Arduino: Cześć, w tej instrukcji zrobimy bezkontaktowy termometr za pomocą arduino. Ponieważ czasami temperatura cieczy / ciała stałego jest zbyt wysoka lub zbyt niska, a następnie trudno jest nawiązać z nią kontakt i odczytać jej temperatura wtedy w tej scenie
Termometr wewnętrzny/zewnętrzny USB (lub „Moje pierwsze urządzenie USB”): 4 kroki (ze zdjęciami)
Wewnętrzny/zewnętrzny termometr USB (lub „Moje pierwsze urządzenie USB”): Jest to prosty projekt, który demonstruje urządzenie peryferyjne USB w PIC 18Fs. Istnieje kilka przykładów 40-pinowych chipów 18F4550 online, ten projekt demonstruje mniejszą wersję 28-pinową 18F2550. Płytka PCB wykorzystuje części do montażu powierzchniowego, ale wszystkie c