Sommario:
- Passaggio 1: imposta Raspberry Pi
- Passaggio 2: configurazione di MySQL su Raspberry Pi
- Passaggio 3: configurazione dei SensorBugs
- Passaggio 4: installazione di Bluetooth LE Python Wrapper
- Passaggio 5: scansiona e scopri l'indirizzo del SensorBug
- Passaggio 6: aggiungi lo script Python
- Passaggio 7: prova lo script Python
- Passaggio 8: aggiungi lo script Python al Crontab
- Passaggio 9: Extra: configurare il SensorBug per l'uscita di rilevamento della posizione
Video: Monitora e registra la temperatura con Bluetooth LE e RaspberryPi: 9 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:02
Questa istruzione riguarda come mettere insieme un sistema di monitoraggio della temperatura multi-nodo con bug del sensore Bluetooth LE di Blue Radios (BLEHome) e RaspberryPi 3BGrazie allo sviluppo dello standard Bluetooth LE, ora sul mercato sono facilmente disponibili sensori wireless a bassa potenza per un costo molto basso e può funzionare su una singola pila a bottone per mesi alla volta. Uno di questi sensori che ho preso è di Blue Radio chiamato Sensor Bugs. Con un costo di circa $ 25 su Amazon, è un dispositivo Bluetooth LE con sensore di temperatura, sensore di luce e accemetro, tutti integrati in una piccola unità in grado di comunicare in modalità wireless. Si tratta di un abbinamento perfetto per Raspberry Pi 3B, che ha il supporto integrato per la radio Bluetooth LE.
Passaggio 1: imposta Raspberry Pi
Il primo passo è ottenere una configurazione funzionante di Raspberry Pi. Segui le istruzioni dal sito Web di Raspberry Pi, carica Raspbian su una scheda SD, inseriscilo in Raspberry Pi e avvialo. Ho configurato il mio sistema con Raspbian Stretch Lite (senza GUI) versione novembre 2017. Imposta il WiFi se necessario, preferisco regolare il fuso orario al fuso orario corrente anziché UTC. Puoi farlo tramite il comando: $ sudo dpkg-reconfigure tzdata Il resto dell'istruzione presuppone che l'installazione venga eseguita tramite l'interfaccia della riga di comando.
Passaggio 2: configurazione di MySQL su Raspberry Pi
È utile avere un database installato localmente per memorizzare tutti i dati acquisiti. Installare MySQL su Raspberry Pi è semplicissimo. Inoltre non è difficile modificare lo script per connettersi a un server SQL esternamente, puoi saltare questo passaggio se desideri utilizzare un server SQL in rete. Ci sono molte istruzioni in rete, suggerisco questo: https:// www.stewright.me/2014/06/tutorial-install-…
Una volta installato il server SQL, è possibile utilizzare il client MySQL CLI per creare utente, database e tabella. Per accedere a MySQL CLI, utilizzare il comando:
$ sudo mysql -uroot-pPrima crea un utente locale per inserire i dati acquisiti: > CREATE USER 'datasrc'@'localhost' IDENTIFICATO DA 'datasrc000';Quindi, crea un database e una tabella: > CREATE DATABASE SensorBug;Impostazione dell'utente permesso: > CONCEDERE TUTTI I PRIVILEGI SU SensorBug.* A 'datasrc'@'localhost';Ora aggiungi una nuova tabella al database. Per questo esempio, aggiungerò una tabella con le seguenti colonne: DATA, ORA, INDIRIZZO, LUOGO, TEMPERATURA e ACCEROMETRO
- DATA/ORA - Questa è la data e l'ora in cui i dati vengono registrati
- INDIRIZZO - Questo è il MAC del SensorBug da cui viene catturato il messaggio
- POSIZIONE - Una stringa leggibile dall'uomo per indicare dove si trova il sensore
- TEMPERATURA - Questa è la temperatura registrata
- ACCELE - E' il valore dell'uscita dell'accelerometro, utile per registrare la posizione del sensore (se abilitato)
Il comando che fa questo è: > USE SensorBug; > CREATE TABLE data (data DATE, time TIME, indirizzo TINYTEXT, location TINYTEXT, temperatura FLOAT, accele INT);Ora il database è pronto, possiamo passare alla configurazione dei sensorBugs.
Passaggio 3: configurazione dei SensorBugs
I bug del sensore sono piccoli dispositivi piuttosto carini. Sfortunatamente, il produttore ha fornito solo l'app IOS per programmarlo. Tuttavia, è ancora possibile utilizzarlo se si dispone solo di un dispositivo Android. Primo passo, associare il dispositivo a un telefono. Senza associare il dispositivo, SensorBug non pubblicizzerà i dati. Ho provato a vedere se posso farlo direttamente con RaspberryPi, sfortunatamente, sembra che il driver Bluetooth LE su RaspberryPi sia ancora sperimentale e contenga bug per impedirne l'associazione con i dispositivi Bluetooth LE. La versione futura del driver blueZ potrebbe risolvere questo problema, ma come la scrittura attuale, non c'è modo di accoppiare SensorBug con RaspberryPi. Fortunatamente, non abbiamo bisogno di accoppiare il dispositivo per acquisire i suoi dati pubblicizzati. L'unica cosa di cui abbiamo bisogno è un telefono per configurare il SensorBug. Per impostazione predefinita, SensorBug inizierà a pubblicizzare i dati sulla temperatura a intervalli di 1 secondo una volta che è stato associato a un dispositivo. Per acquisire i dati sulla temperatura, è tutto ciò che serve. Se si prevede di espandere per utilizzare il sensore di posizione o di luce, sarà necessaria la configurazione del dispositivo. Per cominciare, accoppieremo il dispositivo e disconnetteremo. Questo sarà abbastanza buono per l'acquisizione della temperatura. Inizia premendo entrambi i pulsanti sul SensorBug. Il LED blu/verde lampeggerà, indicando che è acceso. Premere uno dei pulsanti, il LED verde dovrebbe accendersi, indicare che l'alimentazione è attiva. Se il LED verde non è acceso, premere entrambi i pulsanti per provare a riaccendere il dispositivo. Tenere premuto uno dei pulsanti finché il LED blu non inizia a lampeggiare. Questo metterà il dispositivo in modalità di associazione. Vai nel menu di configurazione Bluetooth sul telefono e cerca il dispositivo SensorBug. Una volta visualizzato, selezionalo per accoppiarlo con il dispositivo. Ecco fatto, ora il SensorBug è alimentato e pubblicizza i dati sulla temperatura
Passaggio 4: installazione di Bluetooth LE Python Wrapper
Successivamente abbiamo bisogno di installare la libreria affinché Python parli con lo stack Bluetooth LE. Le istruzioni possono essere trovate qui: https://github.com/IanHarvey/bluepy Per Python 2.7, è semplice come inserire i seguenti comandi:
$ sudo apt-get install python-pip libglib2.0-dev $ sudo pip install bluepy
Passaggio 5: scansiona e scopri l'indirizzo del SensorBug
Per scoprire l'indirizzo MAC di SensorBug, usa questo comando: $ sudo hcitool lescan Dovresti vedere un output come:
EC:FE:7E:10:B1:92 (sconosciuto)Se hai molti dispositivi Bluetooth LE in giro, potrebbe essere difficile scoprire con quale stai parlando. Puoi provare bluetoothctl che fornisce maggiori dettagli:
$ sudo bluetoothctl[bluetooth]# scan on [NEW] Device EC:FE:7E:10:B1:92 SensorBug10B192 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Key: 0x0085 [CHG] Device EC: FE:7E:10:B1:92 ManufacturerData Value: 0x02 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Value: 0x00 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Value: 0x3c [CHG] Dispositivo EC:FE:7E:10:B1:92 Valore ManufacturerData: 0x25 [CHG] Dispositivo EC:FE:7E:10:B1:92 Valore ManufacturerData: 0x09 [CHG] Dispositivo EC:FE:7E:10:B1:92 ManufacturerData Value: 0x41 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Value: 0x02 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Value: 0x02 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Value: 0x43 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Value: 0x0b [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Valore: 0x01 [CHG] Dispositivo EC:FE:7E:10:B1:92 Valore ManufacturerData: 0x6f
Registra l'indirizzo MAC, questo dovrà essere inserito nello script Python per filtrare i dispositivi Bluetooth LE indesiderati
Passaggio 6: aggiungi lo script Python
Una copia dello script Python è disponibile da:
drive.google.com/open?id=10vOeEAbS7mi_eXn_…
Ecco lo stesso file, prenditi cura del rientro durante la copia:
Inoltre, aggiorna l'indirizzo MAC nel file python in modo che corrisponda all'indirizzo del sensore ottenuto dal risultato della scansione.
# Questo programma è un software gratuito: puoi ridistribuirlo e/o modificarlo
# secondo i termini della GNU General Public License come pubblicata da
# la Free Software Foundation, versione 3 della licenza, oppure
# (a tua scelta) qualsiasi versione successiva.
#
# Questo programma è distribuito nella speranza che possa essere utile, # ma SENZA ALCUNA GARANZIA; senza nemmeno la garanzia implicita di
# COMMERCIABILITÀ o IDONEITÀ PER UN PARTICOLARE SCOPO. Vedi il
# GNU General Public License per maggiori dettagli.
#
# Dovresti aver ricevuto una copia della GNU General Public License
# insieme a questo programma. Se no, vedi.
# bscan.py - Semplice scanner LE bluetooth ed estrattore di dati
da bluepy.btle import Scanner, DefaultDelegate
tempo di importazione
import pymysql
struttura di importazione
hostname = 'localhost'
nome utente = 'datasrc'
password = 'datasrc000'
database = 'SensorBug'
#Inserisci l'indirizzo MAC del sensore dal lescan
SENSOR_ADDRESS = ["ec:fe:7e:10:b9:92", "ec:fe:7e:10:b9:93"]
SENSOR_LOCATION = ["Garage", "Esterno"]
class DecodeErrorException (eccezione):
def _init_(self, valore):
self.value = valore
def _str_(self):
return repr(self.value)
class ScanDelegate(DefaultDelegate):
def _init_(self):
DefaultDelegate._init_(self)
def handleDiscovery(self, dev, isNewDev, isNewData):
se èNewDev:
print "Dispositivo rilevato", dev.addr
elif isNewData:
print "Nuovi dati ricevuti da", dev.addr
def doQueryInsert (conn, addr, loc, temp, accero):
La tabella #blesensor è data, ora, indirizzo, posizione, temperatura, accero
cur = conn.cursor()
dostr = 'INSERIRE NEI VALORI dati (CURRENT_DATE(), NOW(), %s, %s, %s, %s);'
cur.execute (dostr, (addr, loc, temp, accero))
conn.commit()
scanner = Scanner().withDelegate(ScanDelegate())
myConnection = pymysql.connect (host=hostname, user=username, passwd=password, db=database)
ManuDataHex =
ReadLoop = True
Tentativo:
mentre (ReadLoop):
dispositivi = scanner.scan(2.0)
Dati manu = ""
per lo sviluppo nei dispositivi:
entrata = 0
AcceroData = 0
AcceroType = 0
TempData = 0
per saddr in SENSOR_ADDRESS:
entrata += 1
if (dev.addr == saddr):
print "Dispositivo %s (%s), RSSI=%d dB" % (dev.addr, dev.addrType, dev.rssi)
CurrentDevAddr = saddr
CurrentDevLoc = SENSOR_LOCATION[voce-1]
for (adtype, desc, value) in dev.getScanData():
print " %s = %s" % (desc, valore)
if (desc == "Produttore"):
ManuData = valore
if (ManuData == ""):
print "Nessun dato ricevuto, fine decodifica"
Continua
#print ManuData
per i, j in zip (ManuData[::2], ManuData[1::2]):
ManuDataHex.append(int(i+j, 16))
#Inizia a decodificare i dati grezzi del produttore
if ((ManuDataHex[0] == 0x85) e (ManuDataHex[1] == 0x00)):
print "Intestazione byte 0x0085 trovato"
altro:
print "Intestazione byte 0x0085 non trovato, decodifica interrotta"
Continua
#Salta maggiore/minore
#L'indice 5 è 0x3c, indica il livello della batteria e la configurazione #
if (ManuDataHex[4] == 0x3c):
BatteryLevel = ManuDataHex[5]
ConfigCounter = ManuDataHex[6]
idx = 7
#print "TotalLen: " + str(len(ManuDataHex))
while (idx < len(ManuDataHex)):
#print "Idx: " + str(idx)
#print "Dati: " + hex(ManuDataHex[idx])
if (ManuDataHex[idx] == 0x41):
#Dati dell'accerometro
idx += 1
AcceleroType = ManuDataHex[idx]
AcceleroData = ManuDataHex[idx+1]
idx += 2
elif (ManuDataHex[idx] == 0x43):
#Dati di temperatura
idx += 1
TempData = ManuDataHex[idx]
TempData += ManuDataHex[idx+1] * 0x100
TempData = TempData * 0,0625
idx += 2
altro:
idx += 1
print "Indirizzo dispositivo: " + CurrentDevAddr
print "Posizione dispositivo: " + CurrentDevLoc
print "Livello batteria: " + str(Livello batteria) + "%"
print "Contatore configurazione: " + str(Contaconfig)
print "Dati Accelero: " + hex(TipoAccelero) + " " + hex(DatiAccelero)
print "Temp Data: " + str(TempData)
doQueryInsert(myConnection, CurrentDevAddr, CurrentDevLoc, TempData, AcceleroData)
ReadLoop = False
tranne DecodeErrorException:
passaggio
Passaggio 7: prova lo script Python
Lo script deve essere eseguito in root, quindi:
$ sudo python bscan.pyDispositivo rilevato ec:6e:7e:10:b1:92 Dispositivo ec:6e:7e:10:b1:92 (pubblico), RSSI=-80 dB Flag = 06 Incompleto 16b Servizi = 0a18 Produttore = 850002003c25094102024309016f Byte intestazione 0x0085 trovato Indirizzo dispositivo: ec:6e:7e:10:b1:92 Posizione dispositivo: Garage Livello batteria: 37% Contatore configurazione: 9 Dati Accero: 0x2 0x2 Dati temperatura: 16.5625
Passaggio 8: aggiungi lo script Python al Crontab
Lo script python deve essere eseguito in root, quindi se si desidera acquisire i dati automaticamente, sarà necessario aggiungerlo al crontab di root. Per questo esempio, eseguo lo script ogni 20 minuti Usa il comando:
$ sudo crontab -e
# Modifica questo file per introdurre le attività che devono essere eseguite da cron.
# # Ogni attività da eseguire deve essere definita attraverso una singola riga # indicando con campi diversi quando l'attività verrà eseguita # e quale comando eseguire per l'attività # # Per definire il tempo puoi fornire valori concreti per # minuto (m), ora (h), giorno del mese (dom), mese (mon), # e giorno della settimana (dow) o usa '*' in questi campi (per 'any').# # Nota che le attività verranno avviate basato sulla nozione di tempo e fusi orari del demone di sistema di cron. # # L'output dei lavori crontab (inclusi gli errori) viene inviato tramite # email all'utente a cui appartiene il file crontab (a meno che non venga reindirizzato). # # Ad esempio, puoi eseguire un backup di tutti i tuoi account utente # alle 5 del mattino ogni settimana con: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # Per maggiori informazioni consulta il pagine di manuale di crontab(5) e cron(8) # # mh dom mon dow comando 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * python /home/pi/bscan.py
Questo è tutto. Lo script Python verrà eseguito a intervalli regolari e ricodifica l'output nel database SQL
Passaggio 9: Extra: configurare il SensorBug per l'uscita di rilevamento della posizione
È possibile configurare il SensorBug su Android per l'uscita di rilevamento della posizione Per il rilevamento del cambiamento di posizione, il cosiddetto Garage door.sensing, il SensorBug rileverà se il dispositivo è in posizione verticale o disteso. Quando il dispositivo è piatto, il valore registrato è 0x20 mentre se il dispositivo è in posizione verticale, il valore è 0x02 Non fa differenza se la posizione X o Y è in alto, purché l'asse Z non sia in alto o in basso. Il modo più semplice per farlo è utilizzare l'app LightBlue. Il SensorBug dovrebbe apparire nel menu di scansione. Seleziona il dispositivo che desideri configurare, vai alle caratteristiche GATT per la configurazione dell'accelerometro UUID:9DC84838-7619-4F09-A1CE-DDCF63225B11
Vedi immagine: Scrivi una nuova stringa di configurazione:
010d3f02020000002d00000002Rileggere la stringa di configurazione per confermare la scrittura. Ciò abilita l'accelerometro per il rilevamento della posizione.
Consigliato:
Monitora la temperatura e l'umidità con AM2301 su NodeMCU e Blynk: 3 passaggi
Monitora temperatura e umidità con AM2301 su NodeMCU e Blynk: è un fatto molto noto che nella maggior parte dei verticali del settore, temperatura, umidità, pressione, qualità dell'aria, qualità dell'acqua, ecc., giocano fattori importanti da monitorare continuamente e necessari i sistemi di allerta devono essere in atto quando il valore
Registra lo schermo del computer su Windows: 5 passaggi
Registra lo schermo del computer su Windows: in questo tutorial, vorrei mostrarti come registrare lo schermo del computer su un PC Windows. Uno screencast vale più di mille parole e immagini per dimostrare un problema o un processo su un computer, soprattutto se vuoi realizzare un video tutorial, d
Registra ECG ad alta velocità o altri dati, continuamente per oltre un mese: 6 passaggi
Registra ECG ad alta velocità o altri dati, continuamente per oltre un mese: questo progetto è stato sviluppato per supportare un team di ricerca medica universitaria, che aveva bisogno di un dispositivo indossabile in grado di registrare 2 segnali ECG a 1000 campioni/sec ciascuno (2K campioni/sec in totale) ininterrottamente per 30 giorni, al fine di rilevare aritmie. Il progetto presenta
Monitor meteo M5Stack M5stick C basato su ESP32 con DHT11 - Monitora l'umidità della temperatura e l'indice di calore su M5stick-C con DHT11: 6 passaggi
Monitor meteo M5Stack M5stick C basato su ESP32 con DHT11 | Monitora l'umidità della temperatura e l'indice di calore su M5stick-C con DHT11: Ciao ragazzi, in questo tutorial impareremo come interfacciare il sensore di temperatura DHT11 con m5stick-C (una scheda di sviluppo di m5stack) e visualizzarlo sul display di m5stick-C. Quindi in questo tutorial leggeremo la temperatura, l'umidità & calore io
Termometro da cucina con sonda di temperatura NTP ESP32 con correzione Steinhart-Hart e allarme temperatura.: 7 passaggi (con immagini)
Termometro da cucina con sonda di temperatura NTP ESP32 con correzione Steinhart-Hart e allarme di temperatura. è un Instructable che mostra come aggiungo una sonda di temperatura NTP, piezo b