Obsah:

RuuviTag a PiZero W a Blinkt! teploměr na bázi Bluetooth majáku: 3 kroky (s obrázky)
RuuviTag a PiZero W a Blinkt! teploměr na bázi Bluetooth majáku: 3 kroky (s obrázky)

Video: RuuviTag a PiZero W a Blinkt! teploměr na bázi Bluetooth majáku: 3 kroky (s obrázky)

Video: RuuviTag a PiZero W a Blinkt! teploměr na bázi Bluetooth majáku: 3 kroky (s obrázky)
Video: Arduino project 😎^ Arduino #arduino #2022 #2021 #2023 #dc #arduinoproject #diy #foryou 2024, Červenec
Anonim
RuuviTag a PiZero W a Blinkt! teploměr na bázi Bluetooth majáku
RuuviTag a PiZero W a Blinkt! teploměr na bázi Bluetooth majáku
RuuviTag a PiZero W a Blinkt! teploměr na bázi Bluetooth majáku
RuuviTag a PiZero W a Blinkt! teploměr na bázi Bluetooth majáku
RuuviTag a PiZero W a Blinkt! teploměr na bázi Bluetooth majáku
RuuviTag a PiZero W a Blinkt! teploměr na bázi Bluetooth majáku

Tento návod popisuje přístup ke čtení údajů o teplotě a vlhkosti z RuuviTag pomocí Bluetooth s Raspberry Pi Zero W a zobrazení hodnot v binárních číslech na Pimoroni blinkt! pHAT. Nebo zkrátka: jak vybudovat nejmodernější a trochu nerdový teploměr.

RuuviTag je bluetooth maják s otevřeným zdrojovým senzorem, který je dodáván se senzory teploty/vlhkosti/tlaku a zrychlení, ale může také fungovat jako standardní bezkontaktní maják Eddystone ™/iBeacon. Byl to velmi úspěšný projekt Kickstarter a ten svůj jsem dostal před několika týdny. Existuje Github se softwarem python pro čtení RuuviTag pomocí maliny a já jsem použil jeden z jejich příkladů, s některými dodatky.

Raspberry Pi Zero W je nejnovějším členem rodiny RPi, v podstatě Pi Zero s přidanou technologií Bluetooth a WLAN.

Blinkt! pHAT od Pimoroni je v podstatě pás osmi LED RBG konfigurovaných jako HAT pro Raspberry Pi. Je velmi snadné použití a je dodáván s knihovnou pythonu. Cílem bylo přečíst data z RuuviTag a zobrazit je pomocí blinkt! ČEPICE. Hodnoty jsou zobrazeny jako binární čísla pomocí 7 diod LED, zatímco osmička ukazuje, zda jsou zobrazeny hodnoty vlhkosti nebo teploty (+/-/0).

Krok 1: Nastavení systému

Nastavení systému je snadné:- Zapněte RuuviTag (verze teplotního senzoru RuuviTag).

- Nastavte svůj RPi Zero W, RPi3 nebo jakýkoli jiný RPi s přidanou kapacitou bluetooth podle pokynů na www.raspberrypi.org.

- Umístěte blinkt! Klobouk na RPi (když je vypnutý).

- Nainstalujte si blinkt! a software RuuviTag, jak je uvedeno na příslušných stránkách GitHub.

- Nyní musíte identifikovat MAC adresu vašeho RuuviTag

- zkopírujte připojený program Python, otevřete jej pomocí IDLE pro Python 3

- změňte MAC adresu RuuviTag na vaši, poté uložte a spusťte program.

- neváhejte program upravit a optimalizovat. Program přichází tak, jak je, je používán na vlastní riziko, za případné škody nepřebíráme žádnou odpovědnost.

Krok 2: Zařízení a program

Zařízení a program
Zařízení a program
Zařízení a program
Zařízení a program
Zařízení a program
Zařízení a program
Zařízení a program
Zařízení a program

Jak již bylo zmíněno výše, myšlenkou bylo zkonstruovat jednoduchý a levný systém pro čtení dat z majáku a zobrazování číselných hodnot na blinktu! HAT, nebo podobný LED pásek.

Rozsah hodnot teploty, které mají být měřeny systémem založeným na RPi, bude ve většině případů někde mezi - 50 ° C a +80 ° C, pro vlhkost mezi 0 a 100%. Takže displej, který může dávat hodnoty od -100 do +100, bude pro většinu aplikací dostačující. Desetinná čísla menší než 128 lze zobrazit jako binární čísla se 7 bity (nebo LED). Program tedy vezme hodnoty teploty a vlhkosti z RuuviTag jako „float“čísla a převede je na binární čísla, která se poté zobrazí na blinkt !.

Jako první krok je číslo zaokrouhleno, analyzováno, zda je kladné, záporné nebo nulové, a poté se pomocí „abs“transformuje na kladné číslo. Poté je desítkové číslo převedeno na 7místné binární číslo, v podstatě řetězec 0s a 1s, který je analyzován a zobrazen na posledních 7 pixelech blinkt !.

U teplotních hodnot první pixel indikuje, zda je hodnota kladná (červená), nula (purpurová) nebo záporná (modrá). Zobrazuje hodnoty vlhkosti a je nastaven na zelenou. Pro zjednodušení rozlišení mezi hodnotami teploty a vlhkosti jsou binární pixely nastaveny na bílou teplotu a žlutou na vlhkost. Pro zlepšení čitelnosti binárních čísel nejsou pixely „0“zcela vypnuty, ale jsou nastaveny mnohem slabší než ve stavu „1“. Jako blinkt! pixely jsou velmi jasné, obecný jas můžete nastavit změnou parametru „jasný“

Program zobrazuje hodnoty a části procesu také na obrazovce. Kromě toho najdete několik ztlumených (#) pokynů k tisku. Nechal jsem je, protože je můžete považovat za užitečné pro pochopení procesu, pokud nebudou ignorováni.

Hodnoty mohou být také uloženy v souboru protokolu.

Krok 3: Programový kód

Kód byl trochu odladěn a optimalizován. Nyní můžete najít verzi 3 (20_03_2017).

„Tento program je určen ke čtení hodnot teploty, vlhkosti a tlaku z RuuviTag“a k zobrazení hodnot teploty a vlhkosti jako binárních čísel na Pimorini blinkt! ČEPICE. '' '' Je založen na příkladu print_to_screen.py z knihovny ruuvitag na github. '' Vyžaduje Pi Zero W, Pi 3 nebo jakýkoli jiný RPi vybavený bluetooth a nainstalovány všechny potřebné knihovny. '

čas importu

import os from datetime import datetime

z ruuvitag_sensor.ruuvi importovat RuuviTagSensor

z blinkt import set_clear_on_exit, set_pixel, clear, show

def temp_blinkt (bt):

# tato rutina vezme hodnotu teploty a zobrazí ji jako binární číslo na blinkt!

Průhledná ()

# barva a intenzita „1“pixelů: bílá

r1 = 64 g1 = 64 b1 = 64

#barva a intenzita „0“pixelů: bílá

r0 = 5 g0 = 5 b0 = 5

# Zaokrouhlete a převeďte na celé číslo

r = kulatý (bt)

# vz představuje algebraický znak pro indikátorový pixel

if (r> 0): vz = 1 # positive elif (r <0): vz = 2 # negative else: vz = 0 # zero # print (vz) i = abs (r) #print (i)

# transformovat na absolutní, 7místné binární číslo

i1 = i + 128 # pro i má za následek 8místné binární číslo začínající 1 # tisk (i1)

b = "{0: b}". formát (i1) # převést na binární

# tisk (b)

b0 = str (b) # převést na řetězec

b1 = b0 [1: 8] #zkrátit první bit

tisk ("binární číslo:", b1)

# Nastavte pixely na blinkt!

# nastavit binární číslo

pro h v rozsahu (0, 7): f = (h+1) if (b1 [h] == "1"): set_pixel (f, r1, g1, b1) # print ("bit", h, " je 1, pixel ", f) else: set_pixel (f, r0, g0, b0) # print (" nula ")

# Nastavte indikátorový pixel

if (vz == 1): set_pixel (0, 64, 0, 0) # red for positive values elif (vz == 2): set_pixel (0, 0, 0, 64) # blue for negative values else: set_pixel (0, 64, 0, 64) # purpurová, pokud je nula

ukázat()

# konec temp_blinkt ()

def hum_blinkt (bh):

# toto vezme hodnotu vlhkosti a zobrazí ji jako binární číslo na blinkt!

Průhledná()

# barva a intenzita „1“pixelů: žlutá

r1 = 64 g1 = 64 b1 = 0

#barva a intenzita „0“pixelů:

r0 = 5 g0 = 5 b0 = 0

# Zaokrouhlete a transformujte na celé číslo

r = kulatý (bh)

# transformace na absolutní, 7místné binární číslo i = abs (r) #print (i)

i1 = i + 128 # pro i dává 8místné binární číslo začínající 1

# tisk (i1)

b = "{0: b}". formát (i1)

# tisk (b)

b0 = str (b)

b1 = b0 [1: 8] #zkrátit první bit

tisk ("binární číslo:", b1)

# Nastavte pixely na blinkt!

# nastavit binární číslo na pixely

pro h v rozsahu (0, 7): f = (h+1) if (b1 [h] == "1"): set_pixel (f, r1, g1, b1) else: # mute to blank LEDs set_pixel (f, r0, g0, b0) # ztlumení na prázdné LED diody

# Nastavte indikátorový pixel

set_pixel (0, 0, 64, 0) # zelená pro vlhkost

ukázat()

# konec hum_blinkt ()

set_clear_on_exit ()

# Čtení dat z RuuviTag

mac = 'EC: 6D: 59: 6D: 01: 1C' # Změnit mac adresu vašeho vlastního zařízení

tisk ('Spouštění')

senzor = RuuviTagSensor (mac)

zatímco pravda:

data = sensor.update ()

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

line_tem = str.format ('Teplota: {0} C', data ['teplota']) line_hum = str.format ('Vlhkost: {0} %', data ['vlhkost']) line_pre = str.format ('Tlak: {0}', data ['tlak'])

tisk()

# zobrazení teploty na blinkt! ba = str.format ('{0}', data ['teplota']) bt = float (ba) print (bt, "Â ° C") temp_blinkt (bt) print ()

time.sleep (10) # zobrazuje teplotu po dobu 10 sekund

# zobrazit vlhkost na blinkt!

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

# Vymažte obrazovku a vytiskněte data senzoru na obrazovku

os.system ('clear') print ('Press Ctrl+C to quit. / n / n') print (str (datetime.now ())) print (line_sen) print (line_tem) print (line_hum) print (line_pre) tisk ('\ n / n / r …….')

# Počkejte několik sekund a začněte znovu

zkus: time.sleep (8) kromě KeyboardInterrupt: # Když je stisknuto Ctrl+C provedení cyklu while je zastaveno tisk ('Exit') clear () show () break

Doporučuje: