Sisällysluettelo:
2025 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2025-01-13 06:57
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
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ö