INHOUDSOPGAWE:
Video: RuuviTag en PiZero W en Blinkt! 'n Bluetooth -baken -gebaseerde termometer: 3 stappe (met foto's)
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:26
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
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:
Kontaktlose IR-termometer: 8 stappe (met foto's)
Kontaktlose IR-termometer: My plaaslike departement van gesondheid het met my in aanraking gekom omdat hulle daagliks 'n manier nodig gehad het om die liggaamstemperatuur van die gesondheid van hul werknemer op te spoor tydens die Covid-19-krisis in 2020. Normaalweg begin die IR -termometers van die rak af skaars wees
Arduino laser infrarooi termometer: 7 stappe (met foto's)
Arduino laser infrarooi termometer: in hierdie projek sal ek u wys hoe u 'n digitale laser infrarooi termometer bou met 'n pasgemaakte 3D -gedrukte omhulsel
Arduino infrarooi termometer geweer MDF -koffer: 4 stappe (met foto's)
Arduino infrarooi termometer geweer MDF-omhulsel: hierdie projek is vir die maak van infrarooi termometer met Arduino, die kring word in 'n MDF-koffer geplaas, soos 'n mediese infrarooi termometer op die mark. Die sensor infrarooi termometer GY-906 word gebruik om voorwerptemperatuur te meet sonder kontak dit kan beteken
Skild vir Arduino van ou Russiese VFD -buise: klok, termometer, voltmeter : 21 stappe (met foto's)
Skild vir Arduino van ou Russiese VFD -buise: klok, termometer, voltmeter …: Hierdie projek het amper 'n half jaar geneem. Ek kan nie beskryf hoeveel werk daaraan bestee is nie. Dit sou my vir ewig neem om hierdie projek alleen te doen, en ek het hulp van my vriende gekry. Hier kan u ons werk sien saamgestel in 'n baie lang instruksie
Elektromagnetiese slingerlaser Nixie -klok, met termometer: 5 stappe (met foto's)
Elektromagnetiese slingerlaser Nixie-klok, met termometer: ek het voorheen 'n paar Nixie Tube-horlosies gebou met 'n Arduino Nixie-skild wat ek hier op eBay gekoop het: https://www.ebay.co.uk/itm/Nixie-Tubes-Clock -IN-14 … Hierdie borde het 'n ingeboude RTC (Real Time Clock) en maak dit baie eenvoudig