Kazalo:

RuuviTag in PiZero W ter Blinkt! termometer na osnovi svetilnika Bluetooth: 3 koraki (s slikami)
RuuviTag in PiZero W ter Blinkt! termometer na osnovi svetilnika Bluetooth: 3 koraki (s slikami)

Video: RuuviTag in PiZero W ter Blinkt! termometer na osnovi svetilnika Bluetooth: 3 koraki (s slikami)

Video: RuuviTag in PiZero W ter Blinkt! termometer na osnovi svetilnika Bluetooth: 3 koraki (s slikami)
Video: IoT solution using Thingsboard, Raspberry Pi and RuuviTag 2024, November
Anonim
RuuviTag in PiZero W ter Blinkt! termometer na osnovi svetilnika Bluetooth
RuuviTag in PiZero W ter Blinkt! termometer na osnovi svetilnika Bluetooth
RuuviTag in PiZero W ter Blinkt! termometer na osnovi svetilnika Bluetooth
RuuviTag in PiZero W ter Blinkt! termometer na osnovi svetilnika Bluetooth
RuuviTag in PiZero W ter Blinkt! termometer na osnovi svetilnika Bluetooth
RuuviTag in PiZero W ter Blinkt! termometer na osnovi svetilnika Bluetooth

Ta navodila opisujejo pristop za branje podatkov o temperaturi in vlažnosti iz RuuviTaga z uporabo Bluetootha z Raspberry Pi Zero W in za prikaz vrednosti v binarnih številkah na Pimoronijevem utripanju! pHAT. Ali skratka: kako zgraditi najsodobnejšo tehnologijo in nekoliko nergač termometer.

RuuviTag je odprtokodni senzor bluetooth svetilnik, ki je opremljen s senzorji temperature/vlažnosti/tlaka in pospeška, lahko pa deluje tudi kot standardni svetilnik bližine Eddystone ™/iBeacon. To je bil zelo uspešen projekt Kickstarter in pred nekaj tedni sem ga dobil. Obstaja Github s programsko opremo python za branje RuuviTaga z malino in uporabil sem enega od njihovih primerov z nekaj dodatki.

Raspberry Pi Zero W je najnovejši član družine RPi, v bistvu Pi Zero z dodanimi Bluetooth in WLAN.

Trepetanje! pHAT iz Pimoronija je v bistvu trak osmih LED RBG, nastavljenih kot HAT za Raspberry Pi. Je zelo enostaven za uporabo in ima knjižnico python. Ideja je bila prebrati podatke iz RuuviTaga in jih prikazati z bliskavico! KOP. Vrednosti so prikazane kot binarne številke s pomočjo 7 LED, medtem ko se ena osem uporablja za prikaz, ali so prikazane vrednosti vlažnosti ali temperature (+/-/0).

1. korak: Nastavitev sistema

Nastavitev sistema je preprosta:- Vklopite RuuviTag (različica temperaturnega senzorja RuuviTag).

- Nastavite svoj RPi Zero W, RPi3 ali kateri koli drug RPi z dodano zmogljivostjo bluetooth, po navodilih na www.raspberrypi.org.

- Utripi! HAT na RPi (medtem ko je izklopljen).

- Namestite utripalec! in programsko opremo RuuviTag, kot je navedeno na ustreznih straneh GitHub.

- Zdaj morate identificirati naslov MAC svoje oznake RuuviTag

- kopirajte priloženi program Python, ga odprite z IDLE za Python 3

- spremenite naslov MAC oznake RuuviTag v svojega, nato shranite in zaženite program.

- program lahko spremenite in optimizirate. Program je tak, kakršen je, za uporabo na lastno odgovornost, ne prevzemamo odgovornosti za morebitno škodo.

2. korak: Naprava in program

Naprava in program
Naprava in program
Naprava in program
Naprava in program
Naprava in program
Naprava in program
Naprava in program
Naprava in program

Kot je bilo že omenjeno, je bila ideja zgraditi preprost in poceni sistem za branje podatkov iz svetilnika in prikaz številskih vrednosti na utripu! HAT ali podoben LED trak.

Območje vrednosti temperature za merjenje s sistemom, ki temelji na RPi, bo v večini primerov nekje med - 50 ° C in +80 ° C, za vlažnost med 0 in 100%. Tako bo zaslon, ki lahko daje vrednosti od -100 do +100, dovolj za večino aplikacij. Decimalna števila, manjša kot 128, se lahko prikažejo kot binarna števila s 7 bitovi (ali LED). Tako program vzame vrednosti temperature in vlažnosti iz RuuviTaga kot "plavajoče" številke in jih pretvori v binarne številke, ki se nato prikažejo na utripanju !.

Kot prvi korak se število zaokroži, analizira, če je pozitivno, negativno ali nič, nato pa se z "abs" pretvori v pozitivno število. Nato se decimalno število pretvori v 7-mestno binarno število, v bistvu niz 0 in 1, ki se analizira in prikaže na zadnjih 7 pikslih utripa !.

Za temperaturne vrednosti prva slikovna pika označuje, ali je vrednost pozitivna (rdeča), nič (magenta) ali negativna (modra). Prikaz vrednosti vlažnosti je nastavljen na zeleno. Za poenostavitev razlikovanja med vrednostmi temperature in vlažnosti so binarni piksli nastavljeni na belo za temperaturo in rumeno za vlažnost. Da bi izboljšali čitljivost binarnih števil, se piksla "0" ne izklopijo popolnoma, temveč so nastavljene precej šibkeje kot v stanju "1". Kot utripanje! slikovne pike so zelo svetle, lahko nastavite splošno svetlost s spreminjanjem parametra "svetlo"

Program prikaže vrednosti in dele procesa tudi na zaslonu. Poleg tega boste našli več utišanih (#) navodil za tiskanje. Pustil sem jih, saj vam bodo morda v pomoč pri razumevanju postopka, če ni vklopljen.

Vrednosti so lahko shranjene tudi v dnevniški datoteki.

3. korak: programska koda

Koda je bila nekoliko odpravljena in optimizirana. Zdaj lahko najdete različico 3 (20_03_2017).

"Ta program je namenjen branju vrednosti temperature, vlažnosti in tlaka iz RuuviTaga" "in prikaz vrednosti temperature in vlažnosti kot binarnih številk na utripu Pimorini! KOP. '' '' Temelji na primeru print_to_screen.py iz knjižnice ruuvitag v githubu. '' Zahteva Pi Zero W, Pi 3 ali kateri koli drug RPi, opremljen z bluetoothom in vsemi potrebnimi knjižnicami. '

čas uvoza

uvoz OS iz datetime uvoz datetime

iz ruuvitag_sensor.ruuvi uvoz RuuviTagSensor

from blinkt import set_clear_on_exit, set_pixel, clear, show

def temp_blinkt (bt):

# ta rutina vzame vrednost temperature in jo prikaže kot binarno številko na blinkt!

jasno ()

# barva in intenzivnost slikovnih pik "1": bela

r1 = 64 g1 = 64 b1 = 64

#barva in intenzivnost "0" slikovnih pik: bela

r0 = 5 g0 = 5 b0 = 5

# Zaokroži in pretvori v celo število

r = okroglo (bt)

# vz predstavlja algebrski znak za slikovno piko indikatorja

if (r> 0): vz = 1 # pozitiven elif (r <0): vz = 2 # negativen else: vz = 0 # zero # print (vz) i = abs (r) #print (i)

# pretvori v absolutno, 7-mestno binarno število

i1 = i + 128 # za i povzroči 8-mestno binarno število, ki se začne z 1 # print (i1)

b = "{0: b}". format (i1) # pretvori v binarno datoteko

# natisni (b)

b0 = str (b) # pretvori v niz

b1 = b0 [1: 8] #skrajšaj prvi bit

print ("binarna številka:", b1)

# Nastavite slikovne pike na blinkt!

# nastavite binarno številko

za h v razponu (0, 7): f = (h+1) if (b1 [h] == "1"): set_pixel (f, r1, g1, b1) # print ("bit", h, " je 1, pixel ", f) else: set_pixel (f, r0, g0, b0) # print (" nič ")

# Nastavite slikovno piko indikatorja

if (vz == 1): set_pixel (0, 64, 0, 0) # rdeča za pozitivne vrednosti elif (vz == 2): set_pixel (0, 0, 0, 64) # modra za negativne vrednosti else: set_pixel (0, 64, 0, 64) # magenta, če je nič

show ()

# konec temp_blinkt ()

def hum_blinkt (bh):

# to vzame vrednost vlažnosti in jo prikaže kot binarno številko na blinkt!

jasno ()

# barva in intenzivnost slikovnih pik "1": rumena

r1 = 64 g1 = 64 b1 = 0

#barva in intenzivnost "0" slikovnih pik:

r0 = 5 g0 = 5 b0 = 0

# Zaokrožite in preoblikujte v celo število

r = okroglo (bh)

# pretvori v absolutno, 7-mestno binarno število i = abs (r) #print (i)

i1 = i + 128 # za i poda 8-mestno binarno število, ki se začne z 1

# natisni (i1)

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

# natisni (b)

b0 = str (b)

b1 = b0 [1: 8] #obrežite prvi bit

print ("binarna številka:", b1)

# Nastavite slikovne pike na blinkt!

# nastavite binarno število na slikovne pike

za h v območju (0, 7): f = (h+1) if (b1 [h] == "1"): set_pixel (f, r1, g1, b1) else: # utišanje na prazne LED set_pixel (f, r0, g0, b0) # utišanje na prazne LED

# Nastavite slikovno piko indikatorja

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

pokaži ()

# konec hum_blinkt ()

set_clear_on_exit ()

# Branje podatkov iz oznake RuuviTag

mac = 'EC: 6D: 59: 6D: 01: 1C' # Spremenite mac-naslov svoje naprave

print ('Začetek')

sensor = RuuviTagSensor (mac)

medtem ko je res:

data = sensor.update ()

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

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

print ()

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

time.sleep (10) # temperatura prikaza 10 sekund

# prikaz vlažnosti pri utripanju!

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

# Počistite zaslon in natisnite podatke senzorja na zaslon

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

# Počakajte nekaj sekund in začnite znova

poskusite: time.sleep (8) razen KeyboardInterrupt: # Ko pritisnete Ctrl+C, se izvedba zanke while ustavi. print ('Exit') clear () show () break

Priporočena: