Inhoudsopgave:

RuuviTag en PiZero W en Blinkt! een Bluetooth Beacon-gebaseerde thermometer - Ajarnpa
RuuviTag en PiZero W en Blinkt! een Bluetooth Beacon-gebaseerde thermometer - Ajarnpa

Video: RuuviTag en PiZero W en Blinkt! een Bluetooth Beacon-gebaseerde thermometer - Ajarnpa

Video: RuuviTag en PiZero W en Blinkt! een Bluetooth Beacon-gebaseerde thermometer - Ajarnpa
Video: How to build an air quality monitor using Raspberry Pi Zero W + ANAVI Infrared pHAT 2024, November
Anonim
RuuviTag en PiZero W en Blinkt! een op Bluetooth Beacon gebaseerde thermometer
RuuviTag en PiZero W en Blinkt! een op Bluetooth Beacon gebaseerde thermometer
RuuviTag en PiZero W en Blinkt! een op Bluetooth Beacon gebaseerde thermometer
RuuviTag en PiZero W en Blinkt! een op Bluetooth Beacon gebaseerde thermometer
RuuviTag en PiZero W en Blinkt! een op Bluetooth Beacon gebaseerde thermometer
RuuviTag en PiZero W en Blinkt! een op Bluetooth Beacon gebaseerde thermometer

Deze instructable beschrijft een benadering om temperatuur- en vochtigheidsgegevens van een RuuviTag te lezen met behulp van Bluetooth met een Raspberry Pi Zero W en om de waarden in binaire getallen weer te geven op een Pimoroni-knippert! pHAT. Of om het kort te zeggen: hoe bouw je een ultramoderne en een beetje nerdy thermometer.

De RuuviTag is een open source sensor bluetooth baken dat wordt geleverd met een temperatuur/vochtigheid/druk en versnellingssensoren, maar kan ook fungeren als een standaard Eddystone™ / iBeacon naderingsbaken. Het was een zeer succesvol Kickstarter-project en ik kreeg het mijne een paar weken geleden. Er is een Github met python-software om de RuuviTag te lezen met een framboos, en ik heb een van hun voorbeelden gebruikt, met enkele toevoegingen.

De Raspberry Pi Zero W is het nieuwste lid van de RPi-familie, in feite een Pi Zero met Bluetooth en WLAN toegevoegd.

De blinkt! pHAT van Pimoroni is in feite een strip van acht RBG-LED's die zijn geconfigureerd als een HAT voor de Raspberry Pi. Het is heel gemakkelijk te gebruiken en wordt geleverd met een python-bibliotheek. Het idee was om de gegevens van de RuuviTag te lezen en weer te geven met de blinkt! HOED. De waarden worden weergegeven als binaire getallen met behulp van 7 van de LED's, terwijl de acht wordt gebruikt om aan te geven of vochtigheid of temperatuur (+/-/0) waarden worden weergegeven.

Stap 1: Het systeem instellen

Het instellen van het systeem is eenvoudig:- Schakel de RuuviTag in (RuuviTag-temperatuursensorversie).

- Stel uw RPi Zero W, RPi3 of een andere RPi met toegevoegde Bluetooth-capaciteit in volgens de instructies op www.raspberrypi.org.

- Plaats de blinkt! HAT op de RPi (wanneer uitgeschakeld).

- Installeer de blinkt! en RuuviTag-software, zoals aangegeven op de bijbehorende GitHub-pagina's.

- U moet nu het MAC-adres van uw RuuviTag. identificeren

- kopieer het bijgevoegde Python-programma, open het met IDLE voor Python 3

- verander het MAC-adres van de RuuviTag in het jouwe, sla het programma op en voer het uit.

- voel je vrij om het programma aan te passen en te optimaliseren. Het programma wordt geleverd zoals het is, te gebruiken op eigen risico, er wordt geen aansprakelijkheid aanvaard voor enige schade.

Stap 2: Het apparaat en het programma

Het apparaat en het programma
Het apparaat en het programma
Het apparaat en het programma
Het apparaat en het programma
Het apparaat en het programma
Het apparaat en het programma
Het apparaat en het programma
Het apparaat en het programma

Zoals hierboven vermeld, was het idee om een eenvoudig en goedkoop systeem te bouwen om gegevens van het baken te lezen en numerieke waarden weer te geven op de blinkt! HAT, of een vergelijkbare ledstrip.

Het bereik van de te meten temperatuurwaarden met een op RPi gebaseerd systeem zal in de meeste gevallen ergens tussen - 50°C en +80°C liggen, voor vochtigheid tussen 0 en 100%. Dus een display dat waarden van -100 tot +100 kan geven, zal voor de meeste toepassingen voldoende zijn. Decimale getallen kleiner dan 128 kunnen worden weergegeven als binaire getallen met 7 bits (of LED's). Het programma neemt dus de temperatuur- en vochtigheidswaarden van de RuuviTag als "float"-getallen en zet ze om in binaire getallen, die vervolgens op de blinkt! worden weergegeven.

Als eerste stap wordt het getal afgerond, geanalyseerd als positief, negatief of nul, en vervolgens omgezet in een positief getal met behulp van "abs". Vervolgens wordt het decimale getal omgezet in een 7-cijferig binair getal, in feite een reeks van nullen en enen, die wordt geanalyseerd en weergegeven op de laatste 7 pixels van de blinkt!.

Voor temperatuurwaarden geeft de eerste pixel aan of de waarde positief (rood), nul (magenta) of negatief (blauw) is. Als de vochtigheidswaarden worden weergegeven, is deze groen ingesteld. Om het onderscheid tussen temperatuur- en vochtigheidswaarden te vereenvoudigen, zijn de binaire pixels wit ingesteld voor temperatuur en geel voor vochtigheid. Om de leesbaarheid van de binaire getallen te verbeteren, zijn "0"-pixels niet volledig uitgeschakeld, maar veel zwakker ingesteld dan in de "1"-status. Als blinkt! pixels zijn erg helder, u kunt de algemene helderheid instellen door de parameter "helder" te wijzigen

Het programma toont de waarden en delen van het proces ook op het scherm. Daarnaast vindt u enkele gedempte (#) afdrukinstructies. Ik heb ze erin gelaten, omdat je ze misschien nuttig vindt om het proces te begrijpen als ze niet zijn gedempt.

De waarden kunnen ook worden opgeslagen in een logbestand.

Stap 3: Programmacode

De code is een beetje gedebugd en geoptimaliseerd. Mogelijk vindt u nu versie 3 (20_03_2017).

' Dit programma is bedoeld om de temperatuur-, vochtigheids- en drukwaarden van een RuuviTag'' af te lezen en de temperatuur- en vochtigheidswaarden als binaire getallen op een Pimorini-knippert weer te geven! HOED. ' '' ' Het is gebaseerd op het voorbeeld print_to_screen.py uit de ruuvitag-bibliotheek op github. ' ' Vereist een Pi Zero W, Pi 3 of een andere RPi uitgerust met bluetooth en alle benodigde bibliotheken geïnstalleerd.'

import tijd

importeer os van datetime importeer datetime

van ruuvitag_sensor.ruuvi import RuuviTagSensor

van blinkt import set_clear_on_exit, set_pixel, clear, show

def temp_blinkt(bt):

# deze routine neemt de temperatuurwaarde en geeft deze weer als een binair getal op blinkt!

Doorzichtig ()

# kleur en intensiteit van "1" pixels: wit

r1 = 64 g1 = 64 b1 = 64

#kleur en intensiteit van "0" pixels: wit

r0 = 5 g0 = 5 b0 = 5

# Rond af en converteer naar geheel getal

r = rond (bt)

# vz staat voor algebraïsch teken voor indicatorpixel

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

# transformeren naar absoluut 7-cijferig binair getal

i1 = i + 128 # voor i resulteert in een 8-cijferig binair getal dat begint met 1 # print (i1)

b = "{0:b}".format(i1) # converteren naar binair

# afdrukken (b)

b0 = str (b) # converteren naar string

b1 = b0[1:8] #eerste bit afkappen

print ("binair getal:", b1)

# Zet pixels op blinkt!

# stel binair getal in

voor h binnen bereik (0, 7): f = (h+1) if (b1[h] == "1"): set_pixel (f, r1, g1, b1) # print ("bit", h, " is 1, pixel ", f) else: set_pixel (f, r0, g0, b0) # print("nil")

# Stel indicatorpixel in

if (vz==1): set_pixel (0, 64, 0, 0) # rood voor positieve waarden elif (vz==2): set_pixel (0, 0, 0, 64) # blauw voor negatieve waarden else: set_pixel (0, 64, 0, 64) # magenta indien nul

laten zien()

# einde van temp_blinkt()

def hum_blinkt(bh):

# dit neemt de vochtigheidswaarde en geeft deze weer als een binair getal op blinkt!

Doorzichtig()

# kleur en intensiteit van "1" pixels: geel

r1 = 64 g1 = 64 b1 = 0

#kleur en intensiteit van "0" pixels:

r0 = 5 g0 = 5 b0 = 0

# Rond af en transformeer in geheel getal

r = rond (bh)

# transformeren naar absoluut, 7-cijferig binair getal i = abs(r) #print (i)

i1 = i + 128 # voor i geeft een 8-cijferig binair getal dat begint met 1

# afdrukken (i1)

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

# afdrukken (b)

b0 = str (b)

b1 = b0[1:8] #eerste bit afkappen

print ("binair getal:", b1)

# Zet pixels op blinkt!

# stel binair getal in op pixels

voor h binnen bereik (0, 7): f = (h+1) if (b1[h] == "1"): set_pixel (f, r1, g1, b1) else: # mute naar lege LED's set_pixel (f, r0, g0, b0) # dempen naar lege LED's

# Stel indicatorpixel in

set_pixel (0, 0, 64, 0) # groen voor vochtigheid

laten zien()

# einde van hum_blinkt()

set_clear_on_exit()

# Gegevens lezen van de RuuviTag

mac = 'EC:6D:59:6D:01:1C' # Wijzig naar het mac-adres van uw eigen apparaat

print('Begin')

sensor = RuuviTagSensor(mac)

terwijl waar:

data = sensor.update()

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

line_tem = str.format('Temperatuur: {0} C', data['temperatuur']) line_hum = str.format('Vochtigheid: {0} %', data['vochtigheid']) line_pre = str.format('Druk: {0}', gegevens['druk'])

afdrukken()

# display temperatuur op blinkt! ba = str.format('{0}', data['temperatuur']) bt = float (ba) print (bt, " °C") temp_blinkt (bt) print()

time.sleep (10) # temperatuur gedurende 10 seconden weergeven

# display vochtigheid op blinkt!

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

# Wis het scherm en print sensorgegevens naar het scherm

os.system('clear') print('Druk op Ctrl+C om te stoppen.\n\n') print(str(datetime.now())) print(line_sen) print(line_tem) print(line_hum) print(line_pre) print('\n\n\r…….')

# Wacht een paar seconden en begin opnieuw

probeer: time.sleep(8) behalve KeyboardInterrupt: # Wanneer Ctrl+C wordt ingedrukt, wordt de while-lus gestopt print('Exit') clear() show () break

Aanbevolen: