Sisällysluettelo:

RuuviTag ja PiZero W ja Blinkt! Bluetooth -majakkapohjainen lämpömittari: 3 vaihetta (kuvilla)
RuuviTag ja PiZero W ja Blinkt! Bluetooth -majakkapohjainen lämpömittari: 3 vaihetta (kuvilla)

Video: RuuviTag ja PiZero W ja Blinkt! Bluetooth -majakkapohjainen lämpömittari: 3 vaihetta (kuvilla)

Video: RuuviTag ja PiZero W ja Blinkt! Bluetooth -majakkapohjainen lämpömittari: 3 vaihetta (kuvilla)
Video: RuuviTag on langaton lämpömittari jääkaappiin 2024, Marraskuu
Anonim
RuuviTag ja PiZero W ja Blinkt! Bluetooth -majakoihin perustuva lämpömittari
RuuviTag ja PiZero W ja Blinkt! Bluetooth -majakoihin perustuva lämpömittari
RuuviTag ja PiZero W ja Blinkt! Bluetooth -majakoihin perustuva lämpömittari
RuuviTag ja PiZero W ja Blinkt! Bluetooth -majakoihin perustuva lämpömittari
RuuviTag ja PiZero W ja Blinkt! Bluetooth -majakoihin perustuva lämpömittari
RuuviTag ja PiZero W ja Blinkt! Bluetooth -majakoihin perustuva lämpömittari

Tässä ohjeessa kuvataan lähestymistapa lämpö- ja kosteustietojen lukemiseen RuuviTagista Bluetooth -yhteydellä Raspberry Pi Zero W -laitteella ja arvojen näyttäminen binäärilukuna Pimoroni -vilkkumalla! pHAT tai lyhyesti sanottuna: kuinka rakentaa uusinta tekniikkaa ja vähän nörtti lämpömittari.

RuuviTag on avoimen lähdekoodin Bluetooth -majakka, jossa on lämpötila-/kosteus-/paine- ja kiihtyvyysanturit, mutta se voi toimia myös vakiona Eddystone ™/iBeacon -läheisyysmajakkana. Se oli erittäin onnistunut Kickstarter -projekti ja sain omani muutama viikko sitten. Siellä on python -ohjelmistolla varustettu Github, joka lukee RuuviTagin vadelmalla, ja olen käyttänyt yhtä heidän esimerkeistään, joitain lisäyksiä.

Raspberry Pi Zero W on RPi -perheen viimeisin jäsen, pohjimmiltaan Pi Zero, jossa on Bluetooth ja WLAN.

Vilkkuu! Pimoronin pHAT on pohjimmiltaan kahdeksan RBG -LED -valon nauha, jotka on konfiguroitu HAT: ksi Raspberry Pi: lle. Se on erittäin helppokäyttöinen ja sisältää python -kirjaston. Ajatuksena oli lukea RuuviTagin tiedot ja näyttää ne käyttämällä blinktiä! HATTU. Arvot näytetään binäärilukuina käyttämällä seitsemää LEDiä, kun taas kahdeksaa arvoa käytetään ilmaisemaan, näytetäänkö kosteus- tai lämpötilaarvot (+/-/0).

Vaihe 1: Järjestelmän asennus

Järjestelmän käyttöönotto on helppoa:- Kytke RuuviTag (RuuviTag-lämpötila-anturiversio) päälle.

- Määritä RPi Zero W, RPi3 tai muu RPi, johon on lisätty Bluetooth -kapasiteetti, noudattamalla ohjeita osoitteessa www.raspberrypi.org.

- Aseta blinkt! HAT RPi: ssä (pois päältä).

- Asenna blinkt! ja RuuviTag -ohjelmisto, kuten vastaavilla GitHub -sivuilla on ilmoitettu.

- Sinun on nyt tunnistettava RuuviTagin MAC -osoite

- kopioi liitteenä oleva Python -ohjelma, avaa se IDLE for Python 3 -ohjelmalla

- muuta RuuviTagin MAC -osoite omaksi, tallenna ja suorita ohjelma.

- voit vapaasti muokata ja optimoida ohjelmaa. Ohjelma tulee sellaisenaan, ja sitä käytetään omalla vastuullasi, eikä vastuuta mistään vahingoista.

Vaihe 2: Laite ja ohjelma

Laite ja ohjelma
Laite ja ohjelma
Laite ja ohjelma
Laite ja ohjelma
Laite ja ohjelma
Laite ja ohjelma
Laite ja ohjelma
Laite ja ohjelma

Kuten edellä mainittiin, ajatuksena oli rakentaa yksinkertainen ja edullinen järjestelmä tietojen lukemiseksi majakalta ja numeeristen arvojen näyttämiseksi vilkkumassa! HAT tai vastaava LED -nauha.

RPi -pohjaisella järjestelmällä mitattavan lämpötilan arvoalue on useimmissa tapauksissa välillä - 50 ° C ja +80 ° C, kosteuden ollessa 0 - 100%. Näyttö, joka voi antaa arvoja -100 -+100, riittää useimpiin sovelluksiin. Desimaaliluvut, jotka ovat pienempiä kuin 128, voidaan näyttää binäärilukuina, joissa on 7 bittiä (tai LED -valoja). Joten ohjelma ottaa RuuviTagin lämpötila- ja kosteusarvot "kelluviksi" numeroiksi ja muuntaa ne binääriluvuiksi, jotka näytetään sitten vilkkuvaksi !.

Ensimmäisessä vaiheessa luku pyöristetään, analysoidaan, onko positiivinen, negatiivinen tai nolla, ja muunnetaan sitten positiiviseksi lukuun käyttämällä "abs". Sitten desimaaliluku muunnetaan 7-numeroiseksi binääriluvuksi, joka on pohjimmiltaan 0s ja 1s merkkijono, joka analysoidaan ja näytetään blinktin viimeisillä 7 pikselillä !.

Lämpötila -arvojen ensimmäinen pikseli osoittaa, onko arvo positiivinen (punainen), nolla (magenta) vai negatiivinen (sininen). Kosteusarvot näytetään vihreänä. Lämpötila- ja kosteusarvojen erottamisen yksinkertaistamiseksi binaariset pikselit on asetettu valkoisiksi lämpötilalle ja keltaisille kosteudelle. Binaarilukujen luettavuuden parantamiseksi "0" pikseliä ei sammuteta kokonaan, vaan sen sijaan asetetaan paljon heikommaksi kuin "1" -tilassa. Kuten vilkkuva! pikselit ovat erittäin kirkkaita, voit asettaa yleisen kirkkauden muuttamalla parametria "kirkas"

Ohjelma näyttää arvot ja prosessin osat myös näytöllä. Lisäksi löydät useita mykistettyjä (#) tulostusohjeita. Jätin ne sisään, koska niistä saattaa olla apua prosessin ymmärtämisessä, jos mykistys on poistettu.

Arvot voidaan myös tallentaa lokitiedostoon.

Vaihe 3: Ohjelmakoodi

Koodia on hieman virheenkorjattu ja optimoitu. Löydät nyt version 3 (20_03_2017).

'' Tämä ohjelma on tarkoitettu lukemaan RuuviTagin lämpötila-, kosteus- ja painearvot '' ja näyttämään lämpötila- ja kosteusarvot binäärilukuina Pimorini -vilkkumassa! HATTU. '' '' Se perustuu githubin ruuvitag -kirjaston print_to_screen.py esimerkkiin. '' Vaatii Pi Zero W: n, Pi 3: n tai minkä tahansa muun Bluetoothilla varustetun RPi: n ja kaikki tarvittavat kirjastot asennettuna. ''

tuonnin aika

tuoda osia päivämäärästä tuoda päivämäärä

ruuvitag_sensor.ruuvi tuoda RuuviTagSensor

alkaen blinkt tuonti set_clear_on_exit, set_pixel, clear, show

def temp_blinkt (bt):

# tämä rutiini ottaa lämpötila -arvon ja näyttää sen binäärilukuna blinktissä!

asia selvä ()

# "1" pikselin väri ja voimakkuus: valkoinen

r1 = 64 g1 = 64 b1 = 64

#0 pikselin väri ja voimakkuus: valkoinen

r0 = 5 g0 = 5 b0 = 5

# Pyöristä ja muunna kokonaislukuksi

r = pyöreä (bt)

# vz edustaa indikaattoripikselin algebrallista merkkiä

jos (r> 0): vz = 1 # positiivinen elif (r <0): vz = 2 # negatiivinen muu: vz = 0 # nolla # tulosta (vz) i = abs (r) #print (i)

# muuntaa absoluuttiseksi, 7-numeroiseksi binääriluvuksi

i1 = i + 128 # for i johtaa 8-numeroiseen binaarilukuun, joka alkaa 1 # printillä (i1)

b = "{0: b}". format (i1) # muuntaa binääriseksi

# print (b)

b0 = str (b) # muuntaa merkkijonoksi

b1 = b0 [1: 8] #kierrä ensimmäinen bitti

tulosta ("binääriluku:", b1)

# Aseta pikselit blinktiin!

# aseta binääriluku

h: lle alueella (0, 7): f = (h+1) jos (b1 [h] == "1"): set_pixel (f, r1, g1, b1) # print ("bit", h, " on 1, pikseli ", f) else: set_pixel (f, r0, g0, b0) # print (" nolla ")

# Aseta ilmaisinpikseli

if (vz == 1): set_pixel (0, 64, 0, 0) # red positiivisille arvoille elif (vz == 2): set_pixel (0, 0, 0, 64) # blue negatiivisille arvoille else: set_pixel (0, 64, 0, 64) # magenta, jos nolla

näytä()

# end_tem_blinkt ()

def hum_blinkt (bh):

# tämä ottaa kosteusarvon ja näyttää sen binäärilukuna blinktissä!

asia selvä()

# väri ja 1 pikselin voimakkuus: keltainen

r1 = 64 g1 = 64 b1 = 0

#0 pikselin väri ja voimakkuus:

r0 = 5 g0 = 5 b0 = 0

# Pyöristä ja muunna kokonaislukuksi

r = pyöreä (bh)

# muunnos absoluuttiseksi, 7-numeroiseksi binääriluvuksi i = abs (r) #print (i)

i1 = i + 128 # for i antaa 8-numeroisen binaariluvun, joka alkaa yhdellä

# print (i1)

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

# print (b)

b0 = str (b)

b1 = b0 [1: 8] #kierrä ensimmäinen bitti

tulosta ("binääriluku:", b1)

# Aseta pikselit blinktiin!

# aseta binääriluku pikseliksi

h alueella (0, 7): f = (h+1) jos (b1 [h] == "1"): set_pixel (f, r1, g1, b1) else: # mykistys tyhjiin LEDeihin set_pixel (f, r0, g0, b0) # mykistää tyhjät LEDit

# Aseta ilmaisinpikseli

set_pixel (0, 0, 64, 0) # vihreä kosteuden vuoksi

näytä()

# hum_blinktin loppu ()

set_clear_on_exit ()

# Tietojen lukeminen RuuviTagista

mac = 'EC: 6D: 59: 6D: 01: 1C' # Vaihda laitteen mac-osoitteeseen

tulosta ('Aloitus')

anturi = RuuviTagSensor (mac)

vaikka totta:

data = sensor.update ()

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

line_tem = str.format ('Lämpötila: {0} C', data ['lämpötila']) line_hum = str.format ('Kosteus: {0} %', data ['kosteus']) line_pre = str.format ('Paine: {0}', tiedot ['paine'])

Tulosta()

# näytön lämpötila vilkkuu! ba = str.format ('{0}', data ['lämpötila']) bt = float (ba) print (bt, "° C") temp_blinkt (bt) print ()

time.sleep (10) # näytön lämpötila 10 sekunnin ajan

# näytön kosteus vilkkuu!

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

# Tyhjennä näyttö ja tulosta anturitiedot näytölle

os.system ('clear') print ('Lopeta painamalla Ctrl+C. / n / n') print (str (datetime.now ())) print (line_sen) print (line_tem) print (line_hum) print (line_pre) tulosta ('\ n / n / r …….')

# Odota muutama sekunti ja aloita alusta

try: time.sleep (8) paitsi näppäimistö

Suositeltava: