Sommario:
- Passaggio 1: configurazione del sistema
- Passaggio 2: il dispositivo e il programma
- Passaggio 3: codice programma
Video: RuuviTag e PiZero W e Blinkt! un termometro Bluetooth basato su beacon: 3 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:02
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
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:
Usa lo smartphone come termometro senza contatto/termometro portatile: 8 passaggi (con immagini)
Usa lo smartphone come termometro senza contatto / termometro portatile: misurazione della temperatura corporea senza contatto / senza contatto come una pistola termica. Ho creato questo progetto perché la pistola termica ora è molto costosa, quindi devo trovare un'alternativa per fare il fai-da-te. E lo scopo è fare con la versione a basso budget.SuppliesMLX90614Ardu
Telecomando IR automatico basato su Arduino basato sulla temperatura: 7 passaggi
Telecomando IR automatico basato su Arduino basato sulla temperatura: Ehi, come va, ragazzi! Akarsh qui da CETech. Stanco di svegliarti nel bel mezzo di un sonno profondo solo perché la temperatura della tua stanza è troppo bassa o troppo alta a causa del tuo stupido condizionatore. Allora questo progetto è per te. In questo progetto, faremo il nostro
Termometro a infrarossi senza contatto basato su Arduino - Termometro a infrarossi con Arduino: 4 passaggi
Termometro a infrarossi senza contatto basato su Arduino | Termometro a infrarossi con Arduino: Ciao ragazzi in questo tutorial faremo un termometro senza contatto usando arduino. Poiché a volte la temperatura del liquido/solido è troppo alta o troppo bassa e quindi è difficile entrare in contatto con esso e leggerlo temperatura poi in quella scena
Generatore musicale basato sulle condizioni meteorologiche (generatore MIDI basato su ESP8266): 4 passaggi (con immagini)
Generatore di musica basato sul tempo (Generatore MIDI basato su ESP8266): Ciao, oggi spiegherò come creare il tuo piccolo generatore di musica basato sul tempo. È basato su un ESP8266, che è un po' come un Arduino, e risponde alla temperatura, alla pioggia e l'intensità della luce. Non aspettarti che produca intere canzoni o programmi di accordi
Termometro digitale basato su Picaxe con max e min: 13 passaggi
Termometro digitale basato su Picaxe con max e min: (per favore lascia un messaggio, ma non essere troppo critico, questo è il mio primo istruibile!!) Questo è un termometro che ho realizzato per il nostro camper, per mostrare la temperatura esterna. Si basa su un chip Picaxe in quanto sono economici e facili da usare. Se questo è per