Përmbajtje:

RuuviTag dhe PiZero W dhe Blinkt! një termometër i bazuar në fener Bluetooth: 3 hapa (me fotografi)
RuuviTag dhe PiZero W dhe Blinkt! një termometër i bazuar në fener Bluetooth: 3 hapa (me fotografi)

Video: RuuviTag dhe PiZero W dhe Blinkt! një termometër i bazuar në fener Bluetooth: 3 hapa (me fotografi)

Video: RuuviTag dhe PiZero W dhe Blinkt! një termometër i bazuar në fener Bluetooth: 3 hapa (me fotografi)
Video: Duke e kthyer Raspberry Pi Pico-n tuaj në Mitsubishi FX1N PLC 2024, Nëntor
Anonim
RuuviTag dhe PiZero W dhe Blinkt! një termometër i bazuar në fener Bluetooth
RuuviTag dhe PiZero W dhe Blinkt! një termometër i bazuar në fener Bluetooth
RuuviTag dhe PiZero W dhe Blinkt! një termometër i bazuar në fener Bluetooth
RuuviTag dhe PiZero W dhe Blinkt! një termometër i bazuar në fener Bluetooth
RuuviTag dhe PiZero W dhe Blinkt! një termometër i bazuar në fener Bluetooth
RuuviTag dhe PiZero W dhe Blinkt! një termometër i bazuar në fener Bluetooth

Ky udhëzues përshkruan një qasje për të lexuar të dhënat e temperaturës dhe lagështisë nga një RuuviTag duke përdorur Bluetooth me një Raspberry Pi Zero W dhe për të shfaqur vlerat në numrat binarë në një ndezje Pimoroni! pHAT. Ose për ta thënë shkurt: si të ndërtoni një gjendje të artit dhe një termometër pak të çuditshëm.

RuuviTag është një fener bluetooth me burim të hapur që vjen me sensorë të temperaturës/lagështisë/presionit dhe përshpejtimit, por gjithashtu mund të veprojë si një fener standard i afërsisë Eddystone ™/iBeacon. Ishte një projekt me shumë sukses Kickstarter dhe unë e mora para disa javësh. Ekziston një Github me softuer python për të lexuar RuuviTag duke përdorur një mjedër, dhe unë kam përdorur një nga shembujt e tyre, me disa shtesa.

Raspberry Pi Zero W është anëtari më i fundit i familjes RPi, në thelb një Pi Zero me Bluetooth dhe WLAN të shtuar.

E blinkt! pHAT nga Pimoroni është në thelb një brez prej tetë LED RBG të konfiguruar si HAT për Raspberry Pi. Veryshtë shumë e lehtë për t'u përdorur dhe vjen me një bibliotekë python. Ideja ishte të lexoni të dhënat nga RuuviTag dhe t'i shfaqni ato duke përdorur dritën e blinkt! HAT. Vlerat shfaqen si numra binarë duke përdorur 7 LED, ndërsa tetë përdoret për të treguar nëse shfaqen vlerat e lagështisë ose temperaturës (+/-/0).

Hapi 1: Vendosja e sistemit

Vendosja e sistemit është e lehtë:- Ndizni RuuviTag (versioni i sensorit të temperaturës RuuviTag).

- Vendosni RPi Zero W, RPi3 ose ndonjë RPi tjetër me kapacitet bluetooth të shtuar, duke ndjekur udhëzimet në www.raspberrypi.org.

- Vendosni dritaren! HAT në RPi (ndërsa jashtë).

- Instaloni blinkt! dhe programin RuuviTag, siç tregohet në faqet përkatëse të GitHub.

- Tani duhet të identifikoni adresën MAC të RuuviTag tuaj

- kopjoni programin e bashkangjitur Python, hapeni atë me IDLE për Python 3

- ndryshoni adresën MAC të RuuviTag në tuajin, pastaj ruani dhe drejtoni programin.

- mos ngurroni të modifikoni dhe optimizoni programin. Programi vjen ashtu siç është, për t'u përdorur në rrezikun tuaj, asnjë përgjegjësi nuk merret për dëmet.

Hapi 2: Pajisja dhe Programi

Pajisja dhe Programi
Pajisja dhe Programi
Pajisja dhe Programi
Pajisja dhe Programi
Pajisja dhe Programi
Pajisja dhe Programi
Pajisja dhe Programi
Pajisja dhe Programi

Siç u përmend më lart, ideja ishte të ndërtohej një sistem i thjeshtë dhe i lirë për të lexuar të dhëna nga feneri dhe për të shfaqur vlerat numerike në blinkt! HAT, ose një shirit LED i ngjashëm.

Gama e vlerave për temperaturën që do të matet me një sistem të bazuar në RPi do të jetë në shumicën e rasteve diku midis - 50 ° C dhe +80 ° C, për lagështi midis 0 dhe 100%. Pra, një ekran që mund të japë vlera nga -100 në +100 do të jetë i mjaftueshëm për shumicën e aplikacioneve. Numrat dhjetorë më të vegjël si 128 mund të shfaqen si numra binarë me 7 bit (ose LED). Pra, programi merr vlerat e temperaturës dhe lagështisë nga RuuviTag si numra "notues" dhe i shndërron ato në numra binarë, të cilët më pas shfaqen në blinkt !.

Si hap i parë, numri rrumbullakohet, analizohet nëse është pozitiv, negativ ose zero, dhe më pas shndërrohet në një numër pozitiv duke përdorur "abs". Pastaj numri dhjetor shndërrohet në një numër binar 7-shifror, në thelb një varg 0s dhe 1s, i cili analizohet dhe shfaqet në 7 pikselët e fundit të blinkt !.

Për vlerat e temperaturës pikseli i parë tregon nëse vlera është pozitive (e kuqe), zero (magenta) ose negative (blu). Duke shfaqur vlerat e lagështisë është vendosur në të gjelbër. Për të thjeshtuar diskriminimin midis vlerave të temperaturës dhe lagështisë, pikselët binarë vendosen të bardhë për temperaturën dhe të verdhë për lagështinë. Për të rritur lexueshmërinë e numrave binarë, pikselët "0" nuk janë fikur plotësisht, por në vend të kësaj janë vendosur shumë më të dobët sesa në gjendjen "1". Si blinkt! pikselët janë shumë të ndritshëm, mund të vendosni shkëlqimin e përgjithshëm duke ndryshuar parametrin "ndritshëm"

Programi shfaq vlerat dhe pjesët e procesit gjithashtu në ekran. Përveç kësaj do të gjeni disa udhëzime të shtypura (#) të shtypura. I lashë brenda, pasi mund t'i gjeni të dobishme për të kuptuar procesin nëse nuk heshtin.

Vlerat gjithashtu mund të ruhen në një skedar regjistri.

Hapi 3: Kodi i Programit

Kodi ishte pak i korrigjuar dhe i optimizuar. Tani mund të gjeni versionin 3 (20_03_2017).

'Ky program ka për qëllim të lexojë vlerat e temperaturës, lagështisë dhe presionit nga një RuuviTag' "dhe të shfaqë vlerat e temperaturës dhe lagështisë si numra binarë në një pulsim Pimorini! HAT. '' '' Bazohet në shembullin print_to_screen.py nga biblioteka ruuvitag në github. "Kërkon një Pi Zero W, Pi 3 ose ndonjë RPi tjetër të pajisur me bluetooth dhe të gjitha bibliotekat e nevojshme të instaluara."

koha e importit

import os nga dataetime import dataetime

nga ruuvitag_sensor.ruuvi import RuuviTagSensor

nga blinkt import set_clear_on_exit, set_pixel, qartë, shfaq

def temp_blinkt (bt):

# kjo rutinë merr vlerën e temperaturës dhe e shfaq atë si një numër binar në ndezje!

qartë ()

# ngjyra dhe intensiteti i pikselave "1": e bardhë

r1 = 64 g1 = 64 b1 = 64

#ngjyra dhe intensiteti i pikselave "0": e bardhë

r0 = 5 g0 = 5 b0 = 5

# Rrumbullakos dhe konverto në numër të plotë

r = e rrumbullakët (bt)

# vz përfaqëson shenjën algjebrike për pikselin tregues

nëse (r> 0): vz = 1 # elif pozitiv (r <0): vz = 2 # negativ tjetër: vz = 0 # zero # print (vz) i = abs (r) #print (i)

# transformohet në numër binar absolut, 7-shifror

i1 = i + 128 # për i rezulton në një numër binar 8-shifror duke filluar me printimin 1 # (i1)

b = "{0: b}". format (i1) # konvertohet në binar

# print (b)

b0 = str (b) # konvertohet në varg

b1 = b0 [1: 8] #shkurtoj bitin e parë

print ("numri binar:", b1)

# Vendosni piksele në ndezje!

# vendosni numrin binar

për h në rangun (0, 7): f = (h+1) nëse (b1 [h] == "1"): set_pixel (f, r1, g1, b1) # print ("bit", h, " është 1, piksel ", f) tjetër: set_pixel (f, r0, g0, b0) # print (" zero ")

# Vendosni pikselin tregues

nëse (vz == 1): set_pixel (0, 64, 0, 0) # e kuqe për vlerat pozitive elif (vz == 2): set_pixel (0, 0, 0, 64) # blu për vlerat negative tjetër: set_pixel (0, 64, 0, 64) # magenta nëse është zero

shfaqje()

# fundi i temp_blinkt ()

def hum_blinkt (bh):

# kjo merr vlerën e lagështisë dhe e shfaq atë si një numër binar në blinkt!

qartë()

# ngjyra dhe intensiteti i pikselave "1": e verdhë

r1 = 64 g1 = 64 b1 = 0

#ngjyra dhe intensiteti i pikselave "0":

r0 = 5 g0 = 5 b0 = 0

# Rrumbullakoseni dhe shndërrohuni në numër të plotë

r = e rrumbullakët (bh)

# transformo në numrin binar absolut, 7-shifror i = abs (r) #print (i)

i1 = i + 128 # për i jep një numër binar 8-shifror duke filluar me 1

# print (i1)

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

# print (b)

b0 = str (b)

b1 = b0 [1: 8] #shkurtoj bitin e parë

print ("numri binar:", b1)

# Vendosni piksele në ndezje!

# vendos numrin binar në piksele

për h në rangun (0, 7): f = (h+1) nëse (b1 [h] == "1"): set_pixel (f, r1, g1, b1) tjetër: # hesht në LED të zbrazët set_pixel (f, r0, g0, b0) # hesht në LED të zbrazët

# Vendosni pikselin tregues

set_pixel (0, 0, 64, 0) # jeshile për lagështi

shfaqje()

# fundi i hum_blinkt ()

set_clear_on_exit ()

# Leximi i të dhënave nga RuuviTag

mac = 'EC: 6D: 59: 6D: 01: 1C' # Ndrysho në adresën mac të pajisjes tuaj

print ("Fillimi")

sensor = RuuviTagSensor (mac)

ndërsa e vërtetë:

të dhëna = sensor. përditësim ()

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

line_tem = str.format ('Temperatura: {0} C', të dhënat ['temperatura']) line_hum = str.format ('Lagështia: {0} %', të dhënat ['lagështia']) line_pre = str.format ('Presioni: {0}', të dhënat ['presioni'])

print ()

# temperatura e ekranit në dritë të hapur! ba = str.format ('{0}', të dhënat ['temperatura']) bt = notimi (ba) print (bt, "Â ° C") temp_blinkt (bt) print ()

koha.fjetja (10) # temperatura e ekranit për 10 sekonda

# shfaq lagështinë në dritë!

bg = str.format ('{0}', të dhënat ['lagështia']) bh = notimi (bg) print (bh, " %") hum_blinkt (bh) print ()

# Pastroni ekranin dhe printoni të dhënat e sensorit në ekran

os.system ('clear') print ('Shtypni Ctrl+C për ta lënë. / n / n') print (str (dataetime.now ())) print (line_sen) print (line_tem) print (line_hum) print (line_pre) print ('\ n / n / r …….')

# Prisni për disa sekonda dhe filloni përsëri

provo: time.sleep (8) përveç tastierësNdërprer: # Kur shtypet Ctrl+C ekzekutimi i lakut while është ndalur printimi ('Exit') clear () show () break () break

Recommended: