Sommario:

RuuviTag e PiZero W e Blinkt! un termometro Bluetooth basato su beacon: 3 passaggi (con immagini)
RuuviTag e PiZero W e Blinkt! un termometro Bluetooth basato su beacon: 3 passaggi (con immagini)

Video: RuuviTag e PiZero W e Blinkt! un termometro Bluetooth basato su beacon: 3 passaggi (con immagini)

Video: RuuviTag e PiZero W e Blinkt! un termometro Bluetooth basato su beacon: 3 passaggi (con immagini)
Video: NEU Pi Zero 2 W Test + Tipps & gratis Raspberry Pi Zero 2W Gewinnspiel! 2024, Luglio
Anonim
RuuviTag e PiZero W e Blinkt! un termometro Bluetooth basato su beacon
RuuviTag e PiZero W e Blinkt! un termometro Bluetooth basato su beacon
RuuviTag e PiZero W e Blinkt! un termometro Bluetooth basato su beacon
RuuviTag e PiZero W e Blinkt! un termometro Bluetooth basato su beacon
RuuviTag e PiZero W e Blinkt! un termometro Bluetooth basato su beacon
RuuviTag e PiZero W e Blinkt! un termometro Bluetooth basato su beacon

Questa istruzione descrive un approccio per leggere i dati di temperatura e umidità da un RuuviTag utilizzando il Bluetooth con un Raspberry Pi Zero W e per visualizzare i valori in numeri binari su un Pimoroni blinkt! pHAT. O per farla breve: come costruire un termometro all'avanguardia e un po' nerd.

Il RuuviTag è un beacon bluetooth con sensore open source che viene fornito con sensori di temperatura/umidità/pressione e accelerazione, ma può anche fungere da beacon di prossimità Eddystone™ / iBeacon standard. È stato un progetto Kickstarter di grande successo e ho ricevuto il mio poche settimane fa. C'è un Github con software Python per leggere il RuuviTag usando un lampone, e ho usato uno dei loro esempi, con alcune aggiunte.

Il Raspberry Pi Zero W è l'ultimo membro della famiglia RPi, fondamentalmente un Pi Zero con Bluetooth e WLAN aggiunti.

Il battito di ciglia! pHAT di Pimoroni è fondamentalmente una striscia di otto LED RBG configurati come HAT per Raspberry Pi. È molto facile da usare e viene fornito con una libreria Python. L'idea era di leggere i dati dal RuuviTag e visualizzarli usando il blinkt! CAPPELLO. I valori vengono visualizzati come numeri binari utilizzando 7 dei LED, mentre l'ottavo viene utilizzato per indicare se vengono visualizzati i valori di umidità o temperatura (+/-/0).

Passaggio 1: configurazione del sistema

La configurazione del sistema è semplice: - Accendi il RuuviTag (versione con sensore di temperatura RuuviTag).

- Configura il tuo RPi Zero W, RPi3 o qualsiasi altro RPi con capacità bluetooth aggiunta, seguendo le istruzioni su www.raspberrypi.org.

- Posiziona il blinkt! HAT sull'RPi (da spento).

- Installa il blinkt! e il software RuuviTag, come indicato nelle pagine GitHub corrispondenti.

- Ora devi identificare l'indirizzo MAC del tuo RuuviTag

- copia il programma Python allegato, aprilo con IDLE per Python 3

- cambia l'indirizzo MAC del RuuviTag con il tuo, quindi salva ed esegui il programma.

- Sentiti libero di modificare e ottimizzare il programma. Il programma viene fornito così com'è, da utilizzare a proprio rischio, non si assume alcuna responsabilità per eventuali danni.

Passaggio 2: il dispositivo e il programma

Il dispositivo e il programma
Il dispositivo e il programma
Il dispositivo e il programma
Il dispositivo e il programma
Il dispositivo e il programma
Il dispositivo e il programma
Il dispositivo e il programma
Il dispositivo e il programma

Come accennato in precedenza, l'idea era quella di costruire un sistema semplice ed economico per leggere i dati dal beacon e visualizzare i valori numerici sul blinkt! HAT, o una striscia LED simile.

L'intervallo di valori per la temperatura da misurare con un sistema basato su RPi sarà nella maggior parte dei casi tra - 50°C e +80°C, per umidità tra 0 e 100%. Quindi un display che può dare valori da -100 a +100 sarà sufficiente per la maggior parte delle applicazioni. I numeri decimali inferiori a 128 possono essere visualizzati come numeri binari con 7 bit (o LED). Quindi il programma prende i valori di temperatura e umidità dal RuuviTag come numeri "float" e li trasforma in numeri binari, che poi vengono visualizzati sul blinkt!.

Come primo passo, il numero viene arrotondato, analizzato se positivo, negativo o zero, quindi trasformato in un numero positivo utilizzando "abs". Quindi il numero decimale viene convertito in un numero binario a 7 cifre, fondamentalmente una stringa di 0 e 1, che viene analizzato e visualizzato sugli ultimi 7 pixel del blinkt!.

Per i valori di temperatura il primo pixel indica se il valore è positivo (rosso), zero (magenta) o negativo (blu). Visualizzando i valori di umidità è impostato su verde. Per semplificare la discriminazione tra i valori di temperatura e umidità i pixel binari sono impostati bianchi per la temperatura e gialli per l'umidità. Per migliorare la leggibilità dei numeri binari, i pixel "0" non sono completamente spenti, ma sono impostati molto più deboli rispetto allo stato "1". Come lampeggiare! i pixel sono molto luminosi, puoi impostare la luminosità generale modificando il parametro "luminoso"

Il programma visualizza i valori e le parti del processo anche sullo schermo. Inoltre, troverai diverse istruzioni per la stampa con audio disattivato (#). Li ho lasciati, poiché potresti trovarli utili per capire il processo se non sono stati attivati.

I valori potrebbero anche essere archiviati in un file di registro.

Passaggio 3: codice programma

Il codice è stato un po' debuggato e ottimizzato. Ora potresti trovare la versione 3 (20_03_2017).

' Questo programma ha lo scopo di leggere i valori di temperatura, umidità e pressione da un RuuviTag '' e di visualizzare i valori di temperatura e umidità come numeri binari su un lampeggiante Pimorini! CAPPELLO. ' '' 'Si basa sull'esempio print_to_screen.py dalla libreria ruuvitag su github. ' 'Richiede un Pi Zero W, Pi 3 o qualsiasi altro RPi dotato di bluetooth e tutte le librerie necessarie installate.'

tempo di importazione

import os da datetime import datetime

da ruuvitag_sensor.ruuvi import RuuviTagSensor

da blinkt import set_clear_on_exit, set_pixel, clear, show

def temp_blinkt(bt):

# questa routine prende il valore della temperatura e lo visualizza come numero binario su blinkt!

chiaro ()

# colore e intensità di "1" pixel: bianco

r1 = 64 g1 = 64 b1 = 64

#colore e intensità dei pixel "0": bianco

r0 = 5 g0 = 5 b0 = 5

# Arrotonda e converti in intero

r = rotondo (bt)

# vz rappresenta il segno algebrico per il pixel indicatore

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

# trasforma in numero binario assoluto a 7 cifre

i1 = i + 128 # per i risulta in un numero binario di 8 cifre che inizia con 1 # print (i1)

b = "{0:b}".format(i1) # converti in binario

# stampa (b)

b0 = str (b) # converti in stringa

b1 = b0[1:8] #tronca il primo bit

print ("numero binario: ", b1)

# Imposta i pixel su blinkt!

# imposta il numero binario

for h nell'intervallo (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")

# Imposta pixel indicatore

if (vz==1): set_pixel (0, 64, 0, 0) # rosso per valori positivi elif (vz==2): set_pixel (0, 0, 0, 64) # blu per valori negativi else: set_pixel (0, 64, 0, 64) # magenta se zero

mostrare()

# fine di temp_blinkt()

def hum_blinkt(bh):

# questo prende il valore dell'umidità e lo visualizza come un numero binario su blinkt!

chiaro()

# colore e intensità dei pixel "1": giallo

r1 = 64 g1 = 64 b1 = 0

#colore e intensità dei pixel "0":

r0 = 5 g0 = 5 b0 = 0

# Arrotonda e trasforma in intero

r = rotondo (bh)

# trasforma in numero binario assoluto a 7 cifre i = abs(r) #print (i)

i1 = i + 128 # per i fornisce un numero binario di 8 cifre che inizia con 1

# stampa (i1)

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

# stampa (b)

b0 = forza (b)

b1 = b0[1:8] #tronca il primo bit

print ("numero binario: ", b1)

# Imposta i pixel su blinkt!

# imposta il numero binario su pixel

for h nell'intervallo (0, 7): f = (h+1) if (b1[h] == "1"): set_pixel (f, r1, g1, b1) else: # spegne i LED set_pixel (f, r0, g0, b0) # mute per spegnere i LED

# Imposta pixel indicatore

set_pixel (0, 0, 64, 0) # verde per l'umidità

mostrare()

# fine di hum_blinkt()

set_clear_on_exit()

# Lettura dei dati dal RuuviTag

mac = 'EC:6D:59:6D:01:1C' # Passa all'indirizzo mac del tuo dispositivo

print('Inizio')

sensore = RuuviTagSensor(mac)

mentre vero:

dati = sensore.aggiornamento()

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

line_tem = str.format('Temperature: {0} C', data['temperature']) line_hum = str.format('Humidity: {0} %', data['humidity']) line_pre = str.format('Pressione: {0}', data['pressione'])

Stampa()

# visualizza la temperatura sul lampeggio! ba = str.format('{0}', data['temperature']) bt = float (ba) print (bt, " °C") temp_blinkt (bt) print()

time.sleep (10) # visualizza la temperatura per 10 secondi

# visualizza l'umidità su blinkt!

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

# Cancella lo schermo e stampa i dati del sensore sullo schermo

os.system('clear') print('Premi Ctrl+C per uscire.\n\n') print(str(datetime.now())) print(line_sen) print(line_tem) print(line_hum) print(line_pre) print('\n\n\r…….')

# Attendi qualche secondo e ricomincia da capo

try: time.sleep(8) tranne KeyboardInterrupt: # Quando si preme Ctrl+C l'esecuzione del ciclo while viene interrotta print('Exit') clear() show() break

Consigliato: