Obsah:

RuuviTag a PiZero W a Blinkt! teplomer na báze majáku Bluetooth: 3 kroky (s obrázkami)
RuuviTag a PiZero W a Blinkt! teplomer na báze majáku Bluetooth: 3 kroky (s obrázkami)

Video: RuuviTag a PiZero W a Blinkt! teplomer na báze majáku Bluetooth: 3 kroky (s obrázkami)

Video: RuuviTag a PiZero W a Blinkt! teplomer na báze majáku Bluetooth: 3 kroky (s obrázkami)
Video: Как управлять серводвигателем с помощью Arduino с потенциометром и без него 2024, Júl
Anonim
RuuviTag a PiZero W a Blinkt! teplomer na báze majáku Bluetooth
RuuviTag a PiZero W a Blinkt! teplomer na báze majáku Bluetooth
RuuviTag a PiZero W a Blinkt! teplomer založený na majáku Bluetooth
RuuviTag a PiZero W a Blinkt! teplomer založený na majáku Bluetooth
RuuviTag a PiZero W a Blinkt! teplomer na báze majáku Bluetooth
RuuviTag a PiZero W a Blinkt! teplomer na báze majáku Bluetooth

Tento návod popisuje prístup k čítaniu údajov o teplote a vlhkosti z RuuviTag pomocou Bluetooth s Raspberry Pi Zero W a k zobrazeniu hodnôt v binárnych číslach na Pimoroni blinkt! pHAT. Alebo stručne povedané: ako vytvoriť najmodernejší a trochu nerdový teplomer.

RuuviTag je bluetooth maják s otvoreným zdrojovým senzorom, ktorý je dodávaný so snímačmi teploty/vlhkosti/tlaku a akcelerácie, ale môže fungovať aj ako štandardný bezdotykový maják Eddystone ™/iBeacon. Bol to veľmi úspešný projekt Kickstarter a ja som ten svoj dostal pred niekoľkými týždňami. Existuje Github so softvérom python na čítanie RuuviTag pomocou maliny a ja som použil jeden z ich príkladov s niekoľkými dodatkami.

Raspberry Pi Zero W je najnovším členom rodiny RPi, v zásade ide o Pi Zero s pripojením Bluetooth a WLAN.

Blinkt! pHAT od Pimoroni je v podstate pásom ôsmich LED diód RBG nakonfigurovaných ako HAT pre Raspberry Pi. Jeho použitie je veľmi jednoduché a je dodávaný s knižnicou python. Cieľom bolo prečítať údaje z RuuviTag a zobraziť ich pomocou blinkt! Klobúk. Hodnoty sa zobrazujú ako binárne čísla pomocou 7 diód LED, zatiaľ čo osem číslic sa používa na označenie, či sú zobrazené hodnoty vlhkosti alebo teploty (+/-/0).

Krok 1: Nastavenie systému

Nastavenie systému je jednoduché:- Zapnite RuuviTag (verzia snímača teploty RuuviTag).

- Nastavte RPi Zero W, RPi3 alebo akékoľvek iné RPi s pridanou kapacitou bluetooth podľa pokynov na www.raspberrypi.org.

- Umiestnite blinkt! Klobúk na RPi (keď je vypnutý).

- Nainštalujte si blinkt! a softvér RuuviTag, ako je uvedené na príslušných stránkach GitHub.

- Teraz musíte identifikovať MAC adresu vášho RuuviTag

- skopírujte priložený program Python, otvorte ho pomocou IDLE pre Python 3

- zmeňte MAC adresu RuuviTag na svoju, potom uložte a spustite program.

- neváhajte program upraviť a optimalizovať. Program prichádza tak, ako je, je používaný na vlastné riziko, nepreberáme žiadnu zodpovednosť za žiadne škody.

Krok 2: Zariadenie a program

Zariadenie a program
Zariadenie a program
Zariadenie a program
Zariadenie a program
Zariadenie a program
Zariadenie a program
Zariadenie a program
Zariadenie a program

Ako bolo uvedené vyššie, myšlienkou bolo vytvoriť jednoduchý a lacný systém na čítanie údajov z majáku a zobrazovanie číselných hodnôt na zariadení blinkt! HAT, alebo podobný LED pásik.

Rozsah hodnôt teploty, ktoré sa majú merať systémom založeným na RPi, bude vo väčšine prípadov niekde medzi - 50 ° C a +80 ° C, pre vlhkosť medzi 0 a 100%. Displej, ktorý môže dávať hodnoty od -100 do +100, bude teda postačovať pre väčšinu aplikácií. Desatinné čísla menšie ako 128 je možné zobraziť ako binárne čísla so 7 bitmi (alebo diódami LED). Program teda vezme hodnoty teploty a vlhkosti z RuuviTag ako „plávajúce“čísla a transformuje ich na binárne čísla, ktoré sa potom zobrazia na blinkt !.

V prvom kroku sa číslo zaokrúhli, analyzuje sa, či je kladné, záporné alebo nulové, a potom sa pomocou „abs“transformuje na kladné číslo. Potom sa desatinné číslo prevedie na 7-miestne binárne číslo, v zásade na reťazec 0 s a 1 s, ktoré sa analyzuje a zobrazí na posledných 7 pixeloch blinkt !.

Pri hodnotách teploty prvý pixel označuje, či je hodnota kladná (červená), nula (purpurová) alebo záporná (modrá). Po zobrazení hodnôt vlhkosti je nastavený na zelenú. Na zjednodušenie rozlíšenia hodnôt teploty a vlhkosti sú binárne pixely nastavené na teplotu bielu a žltú na vlhkosť. Na zvýšenie čitateľnosti binárnych čísel nie sú pixely „0“úplne vypnuté, ale naopak sú nastavené oveľa slabšie ako v stave „1“. Ako blinkt! pixely sú veľmi svetlé, všeobecný jas môžete nastaviť zmenou parametra „jasný“

Program zobrazí hodnoty a časti procesu aj na obrazovke. Okrem toho nájdete niekoľko tlmených (#) pokynov na tlač. Nechal som ich tam, pretože vám môžu pomôcť pri porozumení postupu, ak nie sú ignorovaní.

Hodnoty môžu byť tiež uložené v protokolovom súbore.

Krok 3: Programový kód

Kód bol trochu odladený a optimalizovaný. Teraz môžete nájsť verziu 3 (20_03_2017).

„Tento program je určený na čítanie hodnôt teploty, vlhkosti a tlaku z RuuviTag“a na zobrazenie hodnôt teploty a vlhkosti ako binárnych čísel na blinkri Pimorini! Klobúk. '' '' Je založená na príklade print_to_screen.py z knižnice ruuvitag na github. '' Vyžaduje Pi Zero W, Pi 3 alebo akékoľvek iné RPi vybavené bluetooth a nainštalované všetky potrebné knižnice. '

čas importu

import os from datetime import datetime

z ruuvitag_sensor.ruuvi importovať RuuviTagSensor

z blinkt import set_clear_on_exit, set_pixel, clear, show

def temp_blinkt (bt):

# táto rutina zoberie hodnotu teploty a zobrazí ju ako binárne číslo na blinkt!

jasný ()

# farba a intenzita „1“pixelov: biela

r1 = 64 g1 = 64 b1 = 64

#farba a intenzita „0“pixelov: biela

r0 = 5 g0 = 5 b0 = 5

# Zaokrúhľujte a konvertujte na celé číslo

r = kolo (bt)

# vz predstavuje algebraický znak pre indikátorový pixel

ak (r> 0): vz = 1 # pozitívny elif (r <0): vz = 2 # negatívny ostatné: vz = 0 # nula # tlač (vz) i = abs (r) # tlač (i)

# transformovať na absolútne, 7-miestne binárne číslo

i1 = i + 128 # pre i má za následok 8-miestne binárne číslo začínajúce 1 # tlačou (i1)

b = "{0: b}". formát (i1) # previesť na binárne

# tlač (b)

b0 = str (b) # previesť na reťazec

b1 = b0 [1: 8] #skrátiť prvý bit

tlač ("binárne číslo:", b1)

# Nastavte pixely na blinkt!

# nastaviť binárne číslo

pre 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á, ak je nula

šou()

# end of temp_blinkt ()

def hum_blinkt (bh):

# toto zoberie hodnotu vlhkosti a zobrazí ju ako binárne číslo na blinkt!

jasný()

# farba a intenzita „1“pixelov: žltá

r1 = 64 g1 = 64 b1 = 0

#farba a intenzita „0“pixelov:

r0 = 5 g0 = 5 b0 = 0

# Zaokrúhľujte a transformujte na celé číslo

r = kolo (bh)

# transformácia na absolútne, 7-miestne binárne číslo i = abs (r) #print (i)

i1 = i + 128 # pre i dáva 8-miestne binárne číslo začínajúce sa 1

# print (i1)

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

# tlač (b)

b0 = str (b)

b1 = b0 [1: 8] #skrátiť prvý bit

tlač ("binárne číslo:", b1)

# Nastavte pixely na blinkt!

# nastaviť binárne číslo na pixely

pre 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) # stlmenie na prázdne diódy LED

# Nastavte indikátorový pixel

set_pixel (0, 0, 64, 0) # zelená pre vlhkosť

šou()

# koniec hum_blinkt ()

set_clear_on_exit ()

# Čítanie údajov z RuuviTag

mac = 'EC: 6D: 59: 6D: 01: 1C' # Zmeňte adresu mac svojho zariadenia

tlač („Začína“)

senzor = RuuviTagSensor (mac)

kým je pravda:

data = sensor.update ()

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

line_tem = str.format ('Teplota: {0} C', údaje ['teplota']) line_hum = str.format ('Vlhkosť: {0} %', údaje ['vlhkosť']) line_pre = str.format ('Tlak: {0}', údaje ['tlak'])

vytlačiť ()

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

time.sleep (10) # teplota displeja na 10 sekúnd

# zobrazte vlhkosť na blinkt!

bg = str.format ('{0}', údaje ['vlhkosť']) bh = float (bg) print (bh, " %") hum_blinkt (bh) print ()

# Vymažte obrazovku a vytlačte údaje senzora na obrazovku

os.system ('clear') print ('Ukončite stlačením Ctrl+C. / n / n') print (str (datetime.now ())) print (line_sen) print (line_tem) print (line_hum) print (line_pre) vytlačiť ('\ n / n / r …….')

# Počkajte niekoľko sekúnd a začnite znova

skúste: time.sleep (8) okrem KeyboardInterrupt: # Keď stlačíte Ctrl+C, vykonanie cyklu while sa zastaví tlač ('Exit') clear () show () break

Odporúča: