INHOUDSOPGAWE:

RuuviTag en PiZero W en Blinkt! 'n Bluetooth -baken -gebaseerde termometer: 3 stappe (met foto's)
RuuviTag en PiZero W en Blinkt! 'n Bluetooth -baken -gebaseerde termometer: 3 stappe (met foto's)

Video: RuuviTag en PiZero W en Blinkt! 'n Bluetooth -baken -gebaseerde termometer: 3 stappe (met foto's)

Video: RuuviTag en PiZero W en Blinkt! 'n Bluetooth -baken -gebaseerde termometer: 3 stappe (met foto's)
Video: Bilge Tank 045 - Stuff and things. 2024, Julie
Anonim
RuuviTag en PiZero W en Blinkt! 'n Bluetooth -baken -gebaseerde termometer
RuuviTag en PiZero W en Blinkt! 'n Bluetooth -baken -gebaseerde termometer
RuuviTag en PiZero W en Blinkt! 'n Bluetooth -baken -gebaseerde termometer
RuuviTag en PiZero W en Blinkt! 'n Bluetooth -baken -gebaseerde termometer
RuuviTag en PiZero W en Blinkt! 'n Bluetooth -baken -gebaseerde termometer
RuuviTag en PiZero W en Blinkt! 'n Bluetooth -baken -gebaseerde termometer

Hierdie instruksies beskryf 'n benadering om temperatuur- en humiditeitsdata van 'n RuuviTag met behulp van Bluetooth met 'n Raspberry Pi Zero W te lees en om die waardes in binêre getalle op 'n Pimoroni -blinkt weer te gee! pHAT. Of om dit kort te maak: hoe om 'n moderne toestand en 'n bietjie nerdige termometer te bou.

Die RuuviTag is 'n oopbronsensor -Bluetooth -baken met 'n temperatuur-/humiditeits-/druk- en aanpassingsensor, maar kan ook dien as 'n standaard Eddystone ™/iBeacon nabyheidsbaken. Dit was 'n baie suksesvolle Kickstarter -projek en ek het myne 'n paar weke gelede gekry. Daar is 'n Github met python -sagteware om die RuuviTag met 'n framboos te lees, en ek het een van hulle voorbeelde gebruik, met 'n paar toevoegings.

Die Raspberry Pi Zero W is die nuutste lid van die RPi -familie, basies 'n Pi Zero met Bluetooth en WLAN bygevoeg.

Die blik! pHAT van Pimoroni is basies 'n strook van agt RBG -LED's wat as 'n hoed vir die Raspberry Pi opgestel is. Dit is baie maklik om te gebruik en bevat 'n python -biblioteek. Die idee was om die data van die RuuviTag te lees en dit met die blinkt weer te gee! HOED. Die waardes word as binêre getalle vertoon met behulp van 7 van die LED's, terwyl die agt een gebruik word om aan te dui of die humiditeits- of temperatuur (+/-/0) waardes vertoon word.

Stap 1: Die opstel van die stelsel

Dit is maklik om die stelsel op te stel:- Skakel die RuuviTag (RuuviTag temperatuur sensor weergawe) aan.

- Stel u RPi Zero W, RPi3 of enige ander RPi op met bluetooth -kapasiteit bygevoeg volgens die instruksies op www.raspberrypi.org.

- Plaas die blinkt! HOED op die RPi (terwyl af).

- Installeer die blinkt! en RuuviTag -sagteware, soos aangedui op die ooreenstemmende GitHub -bladsye.

- U moet nou die MAC -adres van u RuuviTag identifiseer

- kopieer die aangehegte Python -program, maak dit oop met IDLE vir Python 3

- verander die MAC -adres van die RuuviTag na joune, stoor die program en voer dit uit.

- verander en optimaliseer die program. Die program kom soos dit is, en dit word op eie risiko gebruik; geen aanspreeklikheid word vir enige skade aangerig nie.

Stap 2: Die toestel en die program

Die toestel en die program
Die toestel en die program
Die toestel en die program
Die toestel en die program
Die toestel en die program
Die toestel en die program
Die toestel en die program
Die toestel en die program

Soos hierbo genoem, was die idee om 'n eenvoudige en goedkoop stelsel te bou om data uit die baken te lees en numeriese waardes op die blinkt weer te gee! HAT, of 'n soortgelyke LED -strook.

Die omvang van waardes vir temperatuur wat met 'n RPi -gebaseerde stelsel gemeet moet word, sal in die meeste gevalle êrens tussen - 50 ° C en +80 ° C wees, vir humiditeit tussen 0 en 100%. 'N Display wat waardes van -100 tot +100 kan gee, is dus voldoende vir die meeste toepassings. Desimale getalle kleiner as 128 kan as binêre getalle met 7 bisse (of LED's) vertoon word. Die program neem dus die temperatuur- en humiditeitswaardes van die RuuviTag as 'float' getalle en omskep dit in binêre getalle, wat dan op die blinkt vertoon word!.

As 'n eerste stap word die getal afgerond, geanaliseer as dit positief, negatief of nul is, en dan omskep in 'n positiewe getal met behulp van 'abs'. Dan word die desimale getal omgeskakel in 'n 7-syfer-binêre getal, basies 'n string van 0s en 1s, wat ontleed en vertoon word op die laaste 7 pixels van die blinkt !.

Vir temperatuurwaardes dui die eerste pixel aan of die waarde positief (rooi), nul (magenta) of negatief (blou) is. As die humiditeitswaardes vertoon word, is dit groen. Om die onderskeid tussen temperatuur- en humiditeitswaardes te vereenvoudig, word die binêre pixels wit gestel vir temperatuur en geel vir humiditeit. Om die leesbaarheid van die binêre getalle te verbeter, word die pixel "0" nie heeltemal afgeskakel nie, maar eerder baie swakker as in die "1" toestand. Soos blinkt! pixels is baie helder, u kan die algemene helderheid instel deur die parameter "helder" te verander

Die program vertoon ook die waardes en dele van die proses op die skerm. Daarbenewens vind u verskeie gedempte (#) drukinstruksies. Ek het hulle ingelaat, aangesien u dit nuttig sou vind om die proses te verstaan as dit nie gedemp is nie.

Die waardes kan ook in 'n loglêer gestoor word.

Stap 3: Programkode

Die kode is 'n bietjie ontfout en geoptimaliseer. U kan nou weergawe 3 (20_03_2017) vind.

'Hierdie program is bedoel om die temperatuur-, humiditeits- en drukwaardes van 'n RuuviTag te lees' en om die temperatuur- en humiditeitswaardes as binêre getalle op 'n Pimorini -blinkt weer te gee! HOED. '' '' Dit is gebaseer op die print_to_screen.py -voorbeeld uit die ruuvitag -biblioteek by github. '' Vereis 'n Pi Zero W, Pi 3 of enige ander RPi met bluetooth en alle nodige biblioteke geïnstalleer. '

invoer tyd

invoer os van datetime invoer datetime

vanaf ruuvitag_sensor.ruuvi voer RuuviTagSensor in

vanaf blinkt invoer set_clear_on_exit, set_pixel, duidelik, wys

def temp_blinkt (bt):

# hierdie roetine neem die temperatuurwaarde en vertoon dit as 'n binêre getal op blinkt!

duidelik ()

# kleur en intensiteit van "1" pixels: wit

r1 = 64 g1 = 64 b1 = 64

#kleur en intensiteit van "0" pixels: wit

r0 = 5 g0 = 5 b0 = 5

# Rond af en skakel om in heelgetal

r = rond (bt)

# vz verteenwoordig die algebraïese teken vir die aanwyserpiksel

as (r> 0): vz = 1 # positiewe elif (r <0): vz = 2 # negatief anders: vz = 0 # zero # druk (vz) i = abs (r) #print (i)

# verander na absolute, 7-syfer-binêre getal

i1 = i + 128 # vir i lei tot 'n 8-syfer-binêre getal wat begin met 1 # druk (i1)

b = "{0: b}". formaat (i1) # omskep in binêre

# druk (b)

b0 = str (b) # skakel om na string

b1 = b0 [1: 8] #verkort die eerste bietjie

print ("binêre getal:", b1)

# Stel pixels op blinkt!

# stel binêre nommer in

vir h in reeks (0, 7): f = (h+1) as (b1 [h] == "1"): set_pixel (f, r1, g1, b1) # print ("bit", h, " is 1, pixel ", f) anders: set_pixel (f, r0, g0, b0) # print (" nul ")

# Stel aanwyserpiksel in

as (vz == 1): set_pixel (0, 64, 0, 0) # rooi vir positiewe waardes elif (vz == 2): set_pixel (0, 0, 0, 64) # blou vir negatiewe waardes anders: set_pixel (0, 64, 0, 64) # magenta as nul

Wys()

# einde temp_blinkt ()

def hum_blinkt (bh):

# dit neem die humiditeitswaarde en vertoon dit as 'n binêre getal op blinkt!

duidelik ()

# kleur en intensiteit van "1" pixels: geel

r1 = 64 g1 = 64 b1 = 0

#kleur en intensiteit van "0" pixels:

r0 = 5 g0 = 5 b0 = 0

# Rond af en verander in 'n heelgetal

r = rond (bh)

# verander na absolute, 7-syfer-binêre getal i = abs (r) #print (i)

i1 = i + 128 # vir i gee 'n 8-syfer-binêre getal wat begin met 1

# druk (i1)

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

# druk (b)

b0 = str (b)

b1 = b0 [1: 8] #verkort die eerste bietjie

print ("binêre getal:", b1)

# Stel pixels op blinkt!

# stel die binêre getal op pixels

vir h in reeks (0, 7): f = (h+1) as (b1 [h] == "1"): set_pixel (f, r1, g1, b1) anders: # demp na leë LED's set_pixel (f, r0, g0, b0) # demp na leë LED's

# Stel aanwyserpixel in

set_pixel (0, 0, 64, 0) # groen vir humiditeit

Wys()

# einde van hum_blinkt ()

set_clear_on_exit ()

# Lees data van die RuuviTag

mac = 'EC: 6D: 59: 6D: 01: 1C' # Verander na die Mac-adres van u eie toestel

print ('Begin')

sensor = RuuviTagSensor (mac)

terwyl dit waar is:

data = sensor.update ()

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

line_tem = str.format ('Temperatuur: {0} C', data ['temperatuur']) line_hum = str.format ('Humiditeit: {0} %', data ['humiditeit']) line_pre = str.format ('Druk: {0}', data ['druk'])

druk ()

# vertoon temperatuur op blinkt! ba = str.format ('{0}', data ['temperatuur']) bt = float (ba) print (bt, "Â ° C") temp_blinkt (bt) print ()

tyd. slaap (10) # vertoon temperatuur vir 10 sekondes

# vertoon humiditeit op blinkt!

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

# Maak die skerm skoon en druk sensordata op die skerm

os.system ('duidelik') druk ('Druk Ctrl+C om af te sluit. / n / n') druk (str (datetime.now ())) druk (line_sen) druk (line_tem) druk (line_hum) druk (line_pre) druk ('\ n / n / r …….')

# Wag 'n paar sekondes en begin weer

probeer: time.sleep (8) behalwe KeyboardInterrupt: # As Ctrl+C ingedruk word, word uitvoering van die while lus gestop druk ('Exit') duidelik () wys () breek

Aanbeveel: