Sadržaj:

RuuviTag i PiZero W i Blinkt! termometar na bazi Bluetooth beacon -a: 3 koraka (sa slikama)
RuuviTag i PiZero W i Blinkt! termometar na bazi Bluetooth beacon -a: 3 koraka (sa slikama)

Video: RuuviTag i PiZero W i Blinkt! termometar na bazi Bluetooth beacon -a: 3 koraka (sa slikama)

Video: RuuviTag i PiZero W i Blinkt! termometar na bazi Bluetooth beacon -a: 3 koraka (sa slikama)
Video: Аудиокнига «Зов предков» Джека Лондона 2024, Srpanj
Anonim
RuuviTag i PiZero W i Blinkt! termometar temeljen na Bluetooth beacon -u
RuuviTag i PiZero W i Blinkt! termometar temeljen na Bluetooth beacon -u
RuuviTag i PiZero W i Blinkt! termometar temeljen na Bluetooth beacon -u
RuuviTag i PiZero W i Blinkt! termometar temeljen na Bluetooth beacon -u
RuuviTag i PiZero W i Blinkt! termometar temeljen na Bluetooth beacon -u
RuuviTag i PiZero W i Blinkt! termometar temeljen na Bluetooth beacon -u

Ova instrukcija opisuje pristup čitanju podataka o temperaturi i vlažnosti iz RuuviTaga pomoću Bluetootha s Raspberry Pi Zero W i za prikaz vrijednosti u binarnim brojevima na Pimoronijevom svjetlucanju! pHAT. Ili da skratim: kako izgraditi vrhunsko stanje i pomalo štreberski termometar.

RuuviTag je bluetooth svjetionik senzora otvorenog koda koji dolazi sa senzorima temperature/vlažnosti/tlaka i ubrzanja, ali može djelovati i kao standardni Eddystone ™/iBeacon svjetionik za blizinu. Bio je to vrlo uspješan Kickstarter projekt i ja sam svoj dobio prije nekoliko tjedana. Postoji Github s python softverom za čitanje RuuviTaga pomoću maline, a ja sam upotrijebio jedan od njihovih primjera, s nekim dodacima.

Raspberry Pi Zero W najnoviji je član obitelji RPi, u osnovi Pi Zero s dodanim Bluetoothom i WLAN -om.

Treptaj! pHAT iz Pimoronija u osnovi je traka od osam RBG LED dioda konfiguriranih kao HAT za Raspberry Pi. Vrlo je jednostavan za korištenje i dolazi s python bibliotekom. Ideja je bila pročitati podatke iz RuuviTaga i prikazati ih pomoću treptaja! ŠEŠIR. Vrijednosti se prikazuju kao binarni brojevi pomoću 7 LED dioda, dok se osam koristi za označavanje jesu li prikazane vlažnosti ili temperature (+/-/0).

Korak 1: Postavljanje sustava

Postavljanje sustava je jednostavno:- Uključite RuuviTag (verzija osjetnika temperature RuuviTag).

- Postavite svoj RPi Zero W, RPi3 ili bilo koji drugi RPi s dodatnim bluetoothom, slijedeći upute na www.raspberrypi.org.

- Stavi treptaj! ŠEŠIR na RPi (dok je isključen).

- Instalirajte blinkt! i RuuviTag softver, kako je naznačeno na odgovarajućim stranicama GitHub -a.

- Sada morate identificirati MAC adresu vašeg RuuviTaga

- kopirajte priloženi program Python, otvorite ga pomoću IDLE za Python 3

- promijenite MAC adresu RuuviTaga u svoju, a zatim spremite i pokrenite program.

- slobodno izmijenite i optimizirajte program. Program dolazi takav kakav jest, ako ga želite koristiti na vlastitu odgovornost, ne preuzimate odgovornost za bilo kakvu štetu.

Korak 2: Uređaj i program

Uređaj i program
Uređaj i program
Uređaj i program
Uređaj i program
Uređaj i program
Uređaj i program
Uređaj i program
Uređaj i program

Kao što je gore spomenuto, ideja je bila izgraditi jednostavan i jeftin sustav za čitanje podataka sa svjetionika i prikaz numeričkih vrijednosti na treptaju! ŠEŠIR, ili sličnu LED traku.

Raspon vrijednosti temperature za mjerenje sustavom zasnovanim na RPi u većini će slučajeva biti negdje između - 50 ° C i +80 ° C, za vlažnost između 0 i 100%. Dakle, zaslon koji može dati vrijednosti od -100 do +100 bit će dovoljan za većinu aplikacija. Decimalni brojevi manji od 128 mogu se prikazati kao binarni brojevi sa 7 bitova (ili LED dioda). Tako program uzima vrijednosti temperature i vlažnosti iz RuuviTaga kao "plutajuće" brojeve i pretvara ih u binarne brojeve, koji se zatim prikazuju na treptaju !.

Kao prvi korak, broj se zaokružuje, analizira je li pozitivan, negativan ili nula, a zatim se pomoću "ABS" pretvara u pozitivan broj. Zatim se decimalni broj pretvara u 7-znamenkasti binarni broj, u osnovi niz od 0 i 1, koji se analizira i prikazuje na posljednjih 7 piksela treptaja !.

Za vrijednosti temperature prvi piksel označava je li vrijednost pozitivna (crvena), nula (magenta) ili negativna (plava). Prikaz vrijednosti vlažnosti postavljen je na zeleno. Kako bi se pojednostavila razlika između vrijednosti temperature i vlažnosti, binarni pikseli postavljeni su bijeli za temperaturu i žuti za vlažnost. Kako bi se poboljšala čitljivost binarnih brojeva, pikseli "0" nisu potpuno isključeni, već su postavljeni mnogo slabije nego u stanju "1". Kao treptaj! pikseli su jako svijetli, možete postaviti opću svjetlinu mijenjajući parametar "svijetlo"

Program prikazuje vrijednosti i dijelove procesa također na ekranu. Osim toga, pronaći ćete nekoliko prigušenih (#) uputa za ispis. Ostavio sam ih unutra jer će vam možda pomoći da razumijete proces ako nema zvuka.

Vrijednosti se također mogu pohraniti u datoteku dnevnika.

Korak 3: Programski kod

Kod je pomalo otklonjen i optimiziran. Sada možete pronaći verziju 3 (20_03_2017).

'Ovaj je program namijenjen čitanju vrijednosti temperature, vlažnosti i tlaka iz RuuviTaga' 'te za prikaz temperature i vlažnosti kao binarnih brojeva na Pimorinijevom svjetlucanju! ŠEŠIR. '' '' Temelji se na primjeru print_to_screen.py iz biblioteke ruuvitag na githubu. '' Zahtijeva Pi Zero W, Pi 3 ili bilo koji drugi RPi opremljen bluetoothom i instaliranim svim potrebnim knjižnicama. '

vrijeme uvoza

uvoz OS iz datetime uvoz datetime

s ruuvitag_sensor.ruuvi uvoz RuuviTagSensor

from blinkt import set_clear_on_exit, set_pixel, clear, show

def temp_blinkt (bt):

# ova rutina uzima vrijednost temperature i prikazuje je kao binarni broj na blinkt!

čisto ()

# boja i intenzitet "1" piksela: bijela

r1 = 64 g1 = 64 b1 = 64

#boja i intenzitet "0" piksela: bijela

r0 = 5 g0 = 5 b0 = 5

# Zaokružite i pretvorite u cijeli broj

r = okruglo (bt)

# vz predstavlja algebarski znak za piksel indikatora

if (r> 0): vz = 1 # pozitivan elif (r <0): vz = 2 # negativan else: vz = 0 # nula # print (vz) i = abs (r) #print (i)

# pretvori u apsolutni, 7-znamenkasti binarni broj

i1 = i + 128 # za i rezultira 8-znamenkasti binarni broj koji počinje s 1 # print (i1)

b = "{0: b}". format (i1) # pretvori u binarni

# ispis (b)

b0 = str (b) # pretvori u niz

b1 = b0 [1: 8] #skraći prvi bit

print ("binarni broj:", b1)

# Postavite piksele na blinkt!

# postavljen binarni broj

za h u rasponu (0, 7): f = (h+1) if (b1 [h] == "1"): set_pixel (f, r1, g1, b1) # print ("bit", h, " je 1, piksel ", f) else: set_pixel (f, r0, g0, b0) # print (" nil ")

# Postavite piksel indikatora

if (vz == 1): set_pixel (0, 64, 0, 0) # crveno za pozitivne vrijednosti elif (vz == 2): set_pixel (0, 0, 0, 64) # plavo za negativne vrijednosti else: set_pixel (0, 64, 0, 64) # magenta ako je nula

pokazati()

# kraj temp_blinkt ()

def hum_blinkt (bh):

# ovo uzima vrijednost vlažnosti i prikazuje je kao binarni broj na blinktu!

čisto()

# boja i intenzitet "1" piksela: žuta

r1 = 64 g1 = 64 b1 = 0

#boja i intenzitet "0" piksela:

r0 = 5 g0 = 5 b0 = 0

# Zaokruži i pretvori u cijeli broj

r = okruglo (bh)

# pretvori u apsolutni, 7-znamenkasti binarni broj i = abs (r) #print (i)

i1 = i + 128 # jer i daje 8-znamenkasti binarni broj koji počinje s 1

# ispis (i1)

b = "{0: b}". format (i1)

# ispis (b)

b0 = str (b)

b1 = b0 [1: 8] #skraći prvi bit

print ("binarni broj:", b1)

# Postavite piksele na blinkt!

# postavite binarni broj u piksele

za h u rasponu (0, 7): f = (h+1) if (b1 [h] == "1"): set_pixel (f, r1, g1, b1) else: # isključivanje zvuka u prazne LED diode set_pixel (f, r0, g0, b0) # isključivanje zvuka na prazne LED diode

# Postavite piksel indikatora

set_pixel (0, 0, 64, 0) # zeleno za vlažnost

pokazati()

# kraj hum_blinkt ()

set_clear_on_exit ()

# Čitanje podataka iz RuuviTaga

mac = 'EC: 6D: 59: 6D: 01: 1C' # Promijenite se na mac adresu svog uređaja

print ('Pokretanje')

senzor = RuuviTagSensor (mac)

dok je istina:

data = sensor.update ()

line_sen = str.format ('Senzor - {0}', mac)

line_tem = str.format ('Temperatura: {0} C', podaci ['temperatura']) line_hum = str.format ('Vlažnost: {0} %', podaci ['vlažnost']) line_pre = str.format ('Tlak: {0}', podaci ['tlak'])

ispis ()

# temperatura prikaza na treptaju! ba = str.format ('{0}', data ['temperature']) bt = float (ba) ispis (bt, "Â ° C") temp_blinkt (bt) print ()

time.sleep (10) # temperatura prikaza 10 sekundi

# vlažnost zaslona na treptaju!

bg = str.format ('{0}', data ['vlažnost']) bh = float (bg) ispis (bh, " %") hum_blinkt (bh) print ()

# Očistite zaslon i ispišite podatke senzora na zaslon

os.system ('clear') print ('Pritisnite Ctrl+C za izlaz. / n / n') print (str (datetime.now ())) print (line_sen) print (line_tem) print (line_hum) print (line_pre) print ('\ n / n / r …….')

# Pričekajte nekoliko sekundi i počnite ispočetka

try: time.sleep (8) osim KeyboardInterrupt: # Kada se pritisne Ctrl+C, izvršavanje while petlje je zaustavljeno print ('Exit') clear () show () break

Preporučeni: