Sadržaj:

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

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

Video: RuuviTag i PiZero W i Blinkt! termometar zasnovan na Bluetooth beacon -u: 3 koraka (sa slikama)
Video: Bilge Tank 045 - Stuff and things. 2024, Novembar
Anonim
RuuviTag i PiZero W i Blinkt! termometar zasnovan na Bluetooth beacon tehnologiji
RuuviTag i PiZero W i Blinkt! termometar zasnovan na Bluetooth beacon tehnologiji
RuuviTag i PiZero W i Blinkt! termometar zasnovan na Bluetooth beacon tehnologiji
RuuviTag i PiZero W i Blinkt! termometar zasnovan na Bluetooth beacon tehnologiji
RuuviTag i PiZero W i Blinkt! termometar zasnovan na Bluetooth beacon tehnologiji
RuuviTag i PiZero W i Blinkt! termometar zasnovan na Bluetooth beacon tehnologiji

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 skratimo: kako izgraditi najnovija dostignuća i pomalo štreberski termometar.

RuuviTag je bluetooth svjetionik sa senzorom otvorenog koda koji dolazi sa senzorima temperature/vlažnosti/pritiska 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 ga dobio prije nekoliko sedmica. Postoji Github sa python softverom za čitanje RuuviTaga pomoću maline, a ja sam koristio jedan od njihovih primjera, s nekim dodacima.

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

Treptaj! pHAT iz Pimoronija je u osnovi 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 da li su prikazane vrijednosti vlažnosti ili temperature (+/-/0).

Korak 1: Postavljanje sistema

Postavljanje sistema je jednostavno:- Uključite RuuviTag (verzija senzora 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 treptaj! i RuuviTag softver, kako je navedeno na odgovarajućim GitHub stranicama.

- Sada morate identificirati MAC adresu vašeg RuuviTaga

- kopirajte priloženi Python program, 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 je, 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 sistem za čitanje podataka sa svjetionika i prikaz numeričkih vrijednosti na treptaju! ŠEŠIR, ili sličnu LED traku.

Opseg vrijednosti temperature za mjerenje sa RPi sistemom će u većini slučajeva biti negdje između - 50 ° C i +80 ° C, za vlažnost između 0 i 100%. Dakle, prikaz 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 pretvara u pozitivan broj pomoću "abs". Zatim se decimalni broj pretvara u sedmoznamenkasti 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. Da bi se pojednostavila razlika između vrijednosti temperature i vlažnosti, binarni pikseli su bijeli za temperaturu i žuti za vlažnost. Da bi se poboljšala čitljivost binarnih brojeva, piksel "0" nije potpuno isključen, već je postavljen mnogo slabije nego u stanju "1". As blinkt! pikseli su jako svijetli, možete postaviti opću svjetlinu mijenjajući parametar "sjajno"

Program prikazuje vrijednosti i dijelove procesa i na ekranu. Osim toga, pronaći ćete nekoliko prigušenih (#) uputstava za štampanje. Ostavio sam ih unutra jer će vam možda pomoći da razumijete proces ako se ne uključi zvuk.

Vrijednosti se također mogu pohraniti u datoteku dnevnika.

Korak 3: Programski kod

Kod je malo otklonjen i optimiziran. Možda ćete sada pronaći verziju 3 (20_03_2017).

'Ovaj program ima za cilj očitavanje vrijednosti temperature, vlažnosti i pritiska iz RuuviTaga' 'te prikaz temperature i vlažnosti kao binarne brojeve na Pimorinijevom treptaju! ŠEŠIR. '' '' Zasnovano je 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 bibliotekama. '

vreme uvoza

uvoz OS iz datetime uvoz datetime

od 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!

jasno ()

# boja i intenzitet piksela "1": 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)

# transformirati u apsolutni, sedmoznamenkasti binarni broj

i1 = i + 128 # za i rezultira osmocifrenim binarnim brojem koji počinje sa 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 ")

# Podesite 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 ostalo: 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!

jasno ()

# 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)

# transformirati u apsolutni, sedmoznamenkasti binarni broj i = abs (r) #print (i)

i1 = i + 128 # jer i daje osmocifreni 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 na 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

# Podesite 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 na mac adresu svog uređaja

print ('Pokretanje')

senzor = RuuviTagSensor (mac)

dok je True:

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 ('Pritisak: {0}', podaci ['pritisak'])

print ()

# 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

# prikaz vlažnosti na treptaju!

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

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

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 …….')

# Sač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čuje se: