Innholdsfortegnelse:
Video: RuuviTag og PiZero W og Blinkt! et Bluetooth Beacon -basert termometer: 3 trinn (med bilder)
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:23
Denne instruksen beskriver en tilnærming til å lese temperatur- og fuktighetsdata fra en RuuviTag ved hjelp av Bluetooth med en Raspberry Pi Zero W og for å vise verdiene i binære tall på en Pimoroni -blinkt! pHAT. Eller for å si det kort: hvordan bygge et topp moderne og litt nerdete termometer.
RuuviTag er en åpen kildekode sensor bluetooth beacon som kommer med temperatur/fuktighet/trykk og akselerasjonssensorer, men kan også fungere som et standard Eddystone ™/iBeacon nærhetsfyr. Det var et veldig vellykket Kickstarter -prosjekt, og jeg fikk min for noen uker siden. Det er en Github med python -programvare for å lese RuuviTag ved hjelp av en bringebær, og jeg har brukt et av eksemplene deres, med noen tillegg.
Raspberry Pi Zero W er det siste medlemmet av RPi -familien, i utgangspunktet en Pi Zero med Bluetooth og WLAN lagt til.
The blinkt! pHAT fra Pimoroni er i utgangspunktet en stripe med åtte RBG -lysdioder konfigurert som en HAT for Raspberry Pi. Det er veldig enkelt å bruke og leveres med et python -bibliotek. Tanken var å lese dataene fra RuuviTag og vise dem ved hjelp av blinkt! HATT. Verdiene vises som binære tall ved å bruke 7 av lysdiodene, mens de åtte brukes for å indikere om fuktighets- eller temperatur (+/-/0) verdier vises.
Trinn 1: Konfigurere systemet
Det er enkelt å sette opp systemet:- Slå på RuuviTag (RuuviTag temperatursensorversjon).
- Sett opp RPi Zero W, RPi3 eller en annen RPi med Bluetooth -kapasitet lagt til, ved å følge instruksjonene på www.raspberrypi.org.
- Plasser blinken! HAT på RPi (mens den er av).
- Installer blinkt! og RuuviTag -programvare, som angitt på de tilsvarende GitHub -sidene.
- Du må nå identifisere MAC -adressen til RuuviTag
- kopier det vedlagte Python -programmet, åpne det med IDLE for Python 3
- endre MAC -adressen til RuuviTag til din, lagre og kjør deretter programmet.
- modifiser gjerne og optimaliser programmet. Programmet kommer som det er, for å brukes på egen risiko, påtar vi oss ikke noe ansvar for skader.
Trinn 2: Enheten og programmet
Som nevnt ovenfor var tanken å konstruere et enkelt og billig system for å lese data fra fyret og vise numeriske verdier på blinken! HAT, eller en lignende LED -stripe.
Verdiområdet for temperatur som skal måles med et RPi -basert system vil i de fleste tilfeller være et sted mellom - 50 ° C og +80 ° C, for fuktighet mellom 0 og 100%. Så en skjerm som kan gi verdier fra -100 til +100 vil være tilstrekkelig for de fleste applikasjoner. Desimaltall mindre som 128 kan vises som binære tall med 7 bits (eller lysdioder). Så programmet tar temperatur- og fuktighetsverdiene fra RuuviTag som "float" tall og omdanner dem til binære tall, som deretter vises på blinkt !.
Som et første trinn avrundes tallet, analyseres om det er positivt, negativt eller null, og transformeres deretter til et positivt tall ved å bruke "abs". Deretter konverteres desimaltallet til et 7-sifret binært tall, i utgangspunktet en streng på 0s og 1s, som blir analysert og vist på de siste 7 pikslene i blinkt !.
For temperaturverdier indikerer den første pikslen om verdien er positiv (rød), null (magenta) eller negativ (blå). Den viser fuktighetsverdier til grønt. For å forenkle forskjellen mellom temperatur- og fuktighetsverdier, settes de binære pikslene hvite for temperatur og gule for fuktighet. For å forbedre lesbarheten til de binære tallene, er ikke "0" piksler slått helt av, men i stedet satt mye svakere enn i "1" -tilstanden. Som blinkt! piksler er veldig lyse, du kan angi den generelle lysstyrken ved å endre parameteren "lys"
Programmet viser verdiene og delene av prosessen også på skjermen. I tillegg finner du flere dempede (#) utskriftsinstruksjoner. Jeg forlot dem, ettersom du kan finne dem nyttig for å forstå prosessen hvis den ikke er dempet.
Verdiene kan også lagres i en loggfil.
Trinn 3: Programkode
Koden ble litt feilsøkt og optimalisert. Du kan nå finne versjon 3 (20_03_2017).
'Dette programmet er ment å lese temperatur, fuktighet og trykkverdier fra en RuuviTag' 'og vise temperatur- og fuktighetsverdiene som binære tall på en Pimorini -blink! HATT. '' '' Den er basert på print_to_screen.py -eksemplet fra ruuvitag -biblioteket på github. '' Krever en Pi Zero W, Pi 3 eller annen RPi utstyrt med bluetooth og alle nødvendige biblioteker installert. '
importtid
import os fra datetime import datetime
fra ruuvitag_sensor.ruuvi importer RuuviTagSensor
fra blinkt import set_clear_on_exit, set_pixel, clear, show
def temp_blinkt (bt):
# denne rutinen tar temperaturverdien og viser den som et binært tall på blinkt!
klar ()
# farge og intensitet på "1" piksler: hvit
r1 = 64 g1 = 64 b1 = 64
#farge og intensitet på "0" piksler: hvit
r0 = 5 g0 = 5 b0 = 5
# Rund og konverter til heltall
r = rund (bt)
# vz representerer algebraisk tegn for indikatorpiksel
hvis (r> 0): vz = 1 # positiv elif (r <0): vz = 2 # negativ annet: vz = 0 # zero # print (vz) i = abs (r) #print (i)
# transformer til absolutt, 7-sifret binært tall
i1 = i + 128 # for i resulterer i et 8-sifret binært tall som starter med 1 # utskrift (i1)
b = "{0: b}". format (i1) # konverter til binær
# print (b)
b0 = str (b) # konverter til streng
b1 = b0 [1: 8] #avkort den første biten
print ("binært tall:", b1)
# Sett piksler på blinkt!
# sett binært tall
for h i området (0, 7): f = (h+1) hvis (b1 [h] == "1"): set_pixel (f, r1, g1, b1) # print ("bit", h, " er 1, pixel ", f) else: set_pixel (f, r0, g0, b0) # print (" null ")
# Angi indikatorpiksel
hvis (vz == 1): set_pixel (0, 64, 0, 0) # rød for positive verdier elif (vz == 2): set_pixel (0, 0, 0, 64) # blå for negative verdier ellers: set_pixel (0, 64, 0, 64) # magenta hvis null
forestilling()
# slutten av temp_blinkt ()
def hum_blinkt (bh):
# dette tar fuktighetsverdien og viser det som et binært tall på blinkt!
klar()
# farge og intensitet på "1" piksler: gul
r1 = 64 g1 = 64 b1 = 0
#farge og intensitet på "0" piksler:
r0 = 5 g0 = 5 b0 = 0
# Rund og transformer til heltall
r = rund (bh)
# transformer til absolutt, 7-sifret binært tall i = abs (r) #print (i)
i1 = i + 128 # for i gir et 8-sifret binært tall som begynner med 1
# print (i1)
b = "{0: b}". format (i1)
# print (b)
b0 = str (b)
b1 = b0 [1: 8] #avkort den første biten
print ("binært tall:", b1)
# Sett piksler på blinkt!
# sett binært tall til piksler
for h i området (0, 7): f = (h+1) hvis (b1 [h] == "1"): set_pixel (f, r1, g1, b1) else: # dempet til tomme lysdioder set_pixel (f, r0, g0, b0) # dempet til tomme lysdioder
# Angi indikatorpiksel
set_pixel (0, 0, 64, 0) # grønt for fuktighet
forestilling()
# slutten av hum_blinkt ()
set_clear_on_exit ()
# Lese data fra RuuviTag
mac = 'EC: 6D: 59: 6D: 01: 1C' # Bytt til din egen enhets mac-adresse
print ('Starter')
sensor = RuuviTagSensor (mac)
mens det er sant:
data = sensor.update ()
line_sen = str.format ('Sensor - {0}', mac)
line_tem = str.format ('Temperatur: {0} C', data ['temperatur']) line_hum = str.format ('Fuktighet: {0} %', data ['fuktighet']) line_pre = str.format ('Pressure: {0}', data ['press'])
skrive ut()
# visningstemperatur på blinkt! ba = str.format ('{0}', data ['temperatur']) bt = float (ba) print (bt, "Â ° C") temp_blinkt (bt) print ()
tid. sove (10) # visningstemperatur i 10 sekunder
# vis fuktighet på blinkt!
bg = str.format ('{0}', data ['fuktighet']) bh = float (bg) print (bh, " %") hum_blinkt (bh) print ()
# Fjern skjermen og skriv ut sensordata til skjermen
os.system ('clear') print ('Trykk Ctrl+C for å avslutte. / n / n') print (str (datetime.now ())) print (line_sen) print (line_tem) print (line_hum) print (line_pre) Skriv ut ('\ n / n / r …….')
# Vent noen sekunder og begynn på nytt
prøv: time.sleep (8) unntatt KeyboardInterrupt: # Når Ctrl+C trykkes på utførelse av mens loop er stoppet print ('Exit') clear () show () break
Anbefalt:
Kontaktfritt IR-termometer: 8 trinn (med bilder)
Ukontakt IR-termometer: Mitt lokale helsedepartement tok kontakt med meg fordi de trengte en måte å spore kroppstemperaturen til ansattes helse daglig under Covid-19-krisen 2020. Normalt begynte IR -termometre på hyllen å være knappe
Arduino laser infrarødt termometer: 7 trinn (med bilder)
Arduino laser infrarødt termometer: I dette prosjektet vil jeg vise deg hvordan du bygger et digitalt laser infrarødt termometer med et tilpasset 3D -trykt kabinett
Weather Forecast Beacon: 4 trinn (med bilder)
Weather Forecast Beacon: I dette prosjektet presenterer jeg en modell fra et lokalt værfyr som jeg laget ved hjelp av 3D -utskrift, LED -striper, en strømforsyning og et Arduino -kort med wifi -tilkobling for å få tilgang til værmeldingen for neste dag. Hovedformålet med
Skjerm for Arduino fra gamle russiske VFD -rør: Klokke, termometer, voltmåler : 21 trinn (med bilder)
Skjerm for Arduino fra gamle russiske VFD -rør: Klokke, termometer, voltmåler …: Dette prosjektet tok nesten et halvt år å fullføre. Jeg kan ikke beskrive hvor mye arbeid som er lagt ned i dette prosjektet. Å gjøre dette prosjektet alene ville ta meg evig, så jeg hadde litt hjelp fra vennene mine. Her kan du se arbeidet vårt samlet i en veldig lang instruksjon
Elektromagnetisk pendellaser Nixie -klokke, med termometer: 5 trinn (med bilder)
Elektromagnetisk pendellaser Nixie-klokke, med termometer: Jeg har bygget et par Nixie Tube-klokker tidligere, ved hjelp av et Arduino Nixie-skjold jeg kjøpte på ebay her: https://www.ebay.co.uk/itm/Nixie-Tubes-Clock -IN-14 … Disse brettene har en innebygd RTC (sanntidsklokke) og gjør den veldig grei