Innholdsfortegnelse:

RuuviTag og PiZero W og Blinkt! et Bluetooth Beacon -basert termometer: 3 trinn (med bilder)
RuuviTag og PiZero W og Blinkt! et Bluetooth Beacon -basert termometer: 3 trinn (med bilder)

Video: RuuviTag og PiZero W og Blinkt! et Bluetooth Beacon -basert termometer: 3 trinn (med bilder)

Video: RuuviTag og PiZero W og Blinkt! et Bluetooth Beacon -basert termometer: 3 trinn (med bilder)
Video: Использование прогрессивных веб-приложений для управления Интернетом вещей Использование приложения PWA для управления устройством Интернета вещей с помощью JS frameworkwo… 2024, November
Anonim
RuuviTag og PiZero W og Blinkt! et Bluetooth Beacon -basert termometer
RuuviTag og PiZero W og Blinkt! et Bluetooth Beacon -basert termometer
RuuviTag og PiZero W og Blinkt! et Bluetooth Beacon -basert termometer
RuuviTag og PiZero W og Blinkt! et Bluetooth Beacon -basert termometer
RuuviTag og PiZero W og Blinkt! et Bluetooth Beacon -basert termometer
RuuviTag og PiZero W og Blinkt! et Bluetooth Beacon -basert termometer

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

Enheten og programmet
Enheten og programmet
Enheten og programmet
Enheten og programmet
Enheten og programmet
Enheten og programmet
Enheten og programmet
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: