Indholdsfortegnelse:

RuuviTag og PiZero W og Blinkt! et Bluetooth Beacon -baseret termometer: 3 trin (med billeder)
RuuviTag og PiZero W og Blinkt! et Bluetooth Beacon -baseret termometer: 3 trin (med billeder)

Video: RuuviTag og PiZero W og Blinkt! et Bluetooth Beacon -baseret termometer: 3 trin (med billeder)

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

Denne instruktive beskriver en tilgang til at læse temperatur- og fugtighedsdata fra en RuuviTag ved hjælp af Bluetooth med en Raspberry Pi Zero W og til at vise værdierne i binære tal på en Pimoroni -blinkt! pHAT. Eller for at sige det kort: hvordan man bygger et topmoderne og lidt nørdet termometer.

RuuviTag er en open source sensor bluetooth beacon, der leveres med temperatur-/fugtigheds-/tryk- og accelationssensorer, men kan også fungere som et standard Eddystone ™/iBeacon -nærhedssignal. Det var et meget vellykket Kickstarter -projekt, og jeg fik mit for et par uger siden. Der er en Github med python -software til at læse RuuviTag ved hjælp af en hindbær, og jeg har brugt et af deres eksempler med nogle tilføjelser.

Raspberry Pi Zero W er det seneste medlem af RPi -familien, dybest set en Pi Zero med Bluetooth og WLAN tilføjet.

Blinken! pHAT fra Pimoroni er dybest set en stribe med otte RBG -lysdioder konfigureret som en hat til Raspberry Pi. Det er meget let at bruge og leveres med et python -bibliotek. Ideen var at læse dataene fra RuuviTag og vise dem ved hjælp af blinkt! HAT. Værdierne vises som binære tal ved hjælp af 7 af lysdioderne, mens den otte bruges til at angive, om værdierne fugtighed eller temperatur (+/-/0) vises.

Trin 1: Opsætning af systemet

Det er let at konfigurere systemet:- Tænd for RuuviTag (RuuviTag temperaturfølerversion).

- Konfigurer din RPi Zero W, RPi3 eller enhver anden RPi med tilføjet bluetooth -kapacitet ved at følge instruktionerne på www.raspberrypi.org.

- Placer blinkt! HAT på RPi (mens den er slukket).

- Installer blinkt! og RuuviTag -software, som angivet på de tilsvarende GitHub -sider.

- Du skal nu identificere MAC -adressen på din RuuviTag

- kopier det vedhæftede Python -program, åbn det med IDLE til Python 3

- skift MAC -adressen på RuuviTag til din, gem derefter og kør programmet.

- Du er velkommen til at ændre og optimere programmet. Programmet kommer som det er, for at blive brugt på egen risiko, påtager vi sig intet ansvar for skader.

Trin 2: Enheden og programmet

Enheden og programmet
Enheden og programmet
Enheden og programmet
Enheden og programmet
Enheden og programmet
Enheden og programmet
Enheden og programmet
Enheden og programmet

Som nævnt ovenfor var tanken at konstruere et simpelt og billigt system til at læse data fra fyret og vise numeriske værdier på blinkt! HAT eller en lignende LED -strip.

Værdiområdet for temperatur, der skal måles med et RPi -baseret system, vil i de fleste tilfælde være et sted mellem - 50 ° C og +80 ° C, for fugtighed mellem 0 og 100%. Så et display, der kan give værdier fra -100 til +100, vil være tilstrækkeligt til de fleste applikationer. Decimaltal mindre som 128 kan vises som binære tal med 7 bits (eller lysdioder). Så programmet tager temperatur- og fugtighedsværdierne fra RuuviTag som "float" -numre og omdanner dem til binære tal, som derefter vises på blinkt !.

Som et første trin afrundes tallet, analyseres hvis det er positivt, negativt eller nul, og transformeres derefter til et positivt tal ved hjælp af "abs". Derefter konverteres decimaltallet til et 7-cifret binært tal, dybest set en streng på 0s og 1s, som bliver analyseret og vist på de sidste 7 pixels af blinkt !.

For temperaturværdier angiver den første pixel, om værdien er positiv (rød), nul (magenta) eller negativ (blå). Ved at vise fugtighedsværdier er den indstillet til grøn. For at forenkle forskellen mellem temperatur- og fugtighedsværdier er de binære pixels indstillet hvide til temperatur og gule til fugtighed. For at øge læsbarheden af de binære tal slukkes "0" pixel ikke helt, men er i stedet sat meget svagere end i tilstanden "1". Som blinkt! pixels er meget lyse, du kan indstille den generelle lysstyrke ved at ændre parameteren "lys"

Programmet viser værdierne og dele af processen også på skærmen. Derudover finder du flere dæmpede (#) udskrivningsinstruktioner. Jeg efterlod dem i, da du måske finder dem nyttige til at forstå processen, hvis de ikke er slået fra.

Værdierne kan også gemmes i en logfil.

Trin 3: Programkode

Koden blev en smule fejlfindet og optimeret. Du kan nu finde version 3 (20_03_2017).

'Dette program er beregnet til at læse temperatur-, fugtigheds- og trykværdierne fra en RuuviTag' 'og vise temperatur- og fugtighedsværdierne som binære tal på en Pimorini -blinkt! HAT. '' '' Det er baseret på eksemplet print_to_screen.py fra ruuvitag -biblioteket på github. '' Kræver en Pi Zero W, Pi 3 eller enhver anden RPi udstyret med bluetooth og alle nødvendige biblioteker installeret. '

importtid

import os fra datetime import datetime

fra ruuvitag_sensor.ruuvi importerer RuuviTagSensor

fra blinkt import set_clear_on_exit, set_pixel, clear, show

def temp_blinkt (bt):

# denne rutine tager temperaturværdien og viser den som et binært tal på blinkt!

klar ()

# farve og intensitet på "1" pixels: hvid

r1 = 64 g1 = 64 b1 = 64

#farve og intensitet på "0" pixel: hvid

r0 = 5 g0 = 5 b0 = 5

# Rund og konverter til heltal

r = rund (bt)

# vz repræsenterer algebraisk tegn for indikatorpixel

hvis (r> 0): vz = 1 # positiv elif (r <0): vz = 2 # negativ ellers: vz = 0 # zero # print (vz) i = abs (r) #print (i)

# transformer til absolut, 7-cifret binært tal

i1 = i + 128 # for i resulterer i et 8-cifret binært tal, der starter med 1 # print (i1)

b = "{0: b}". format (i1) # konverter til binært

# print (b)

b0 = str (b) # konverter til streng

b1 = b0 [1: 8] #afkort den første bit

print ("binært tal:", b1)

# Indstil pixels på blinkt!

# sæt binært tal

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 (" nul ")

# Indstil indikatorpixel

hvis (vz == 1): set_pixel (0, 64, 0, 0) # rød for positive værdier elif (vz == 2): set_pixel (0, 0, 0, 64) # blå for negative værdier ellers: set_pixel (0, 64, 0, 64) # magenta hvis nul

at vise()

# slut på temp_blinkt ()

def hum_blinkt (bh):

# dette tager fugtighedsværdien og viser det som et binært tal på blinkt!

klar()

# farve og intensitet på "1" pixels: gul

r1 = 64 g1 = 64 b1 = 0

#farve og intensitet af "0" pixels:

r0 = 5 g0 = 5 b0 = 0

# Rund og transformer til heltal

r = rund (bh)

# transformer til absolut, 7-cifret binært tal i = abs (r) #print (i)

i1 = i + 128 # for i giver et 8-cifret binært tal, der starter med 1

# print (i1)

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

# print (b)

b0 = str (b)

b1 = b0 [1: 8] #afkort den første bit

print ("binært tal:", b1)

# Indstil pixels på blinkt!

# indstil binært tal til pixels

for h i området (0, 7): f = (h+1) hvis (b1 [h] == "1"): set_pixel (f, r1, g1, b1) else: # mute til tomme LED'er set_pixel (f, r0, g0, b0) # mute til tomme lysdioder

# Indstil indikatorpixel

set_pixel (0, 0, 64, 0) # grøn for fugtighed

at vise()

# slutningen af hum_blinkt ()

set_clear_on_exit ()

# Læsning af data fra RuuviTag

mac = 'EC: 6D: 59: 6D: 01: 1C' # Skift til din egen enheds mac-adresse

print ('Start')

sensor = RuuviTagSensor (mac)

mens det er sandt:

data = sensor.update ()

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

line_tem = str.format ('Temperatur: {0} C', data ['temperatur']) line_hum = str.format ('Fugtighed: {0} %', data ['luftfugtighed']) line_pre = str.format ('Tryk: {0}', data ['tryk'])

Print()

# displaytemperatur på blinkt! ba = str.format ('{0}', data ['temperatur']) bt = float (ba) print (bt, "Â ° C") temp_blinkt (bt) print ()

time.sleep (10) # displaytemperatur i 10 sekunder

# vis fugtighed på blinkt!

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

# Ryd skærm, og udskriv sensordata til skærm

os.system ('clear') print ('Tryk på Ctrl+C for at afslutte. / n / n') print (str (datetime.now ())) print (line_sen) print (line_tem) print (line_hum) print (line_pre) udskriv ('\ n / n / r …….')

# Vent et par sekunder, og start forfra

prøv: time.sleep (8) undtagen KeyboardInterrupt: # Når der trykkes på Ctrl+C udføres udførelsen af mens loop er stoppet udskriv ('Exit') clear () show () break

Anbefalede: