Cuprins:

Monitorizați și înregistrați temperatura cu Bluetooth LE și RaspberryPi: 9 pași (cu imagini)
Monitorizați și înregistrați temperatura cu Bluetooth LE și RaspberryPi: 9 pași (cu imagini)

Video: Monitorizați și înregistrați temperatura cu Bluetooth LE și RaspberryPi: 9 pași (cu imagini)

Video: Monitorizați și înregistrați temperatura cu Bluetooth LE și RaspberryPi: 9 pași (cu imagini)
Video: Utilizarea termocuplei MAX6675 cu Bluetooth ESP32 2024, Noiembrie
Anonim
Monitorizați și înregistrați temperatura cu Bluetooth LE și RaspberryPi
Monitorizați și înregistrați temperatura cu Bluetooth LE și RaspberryPi
Monitorizați și înregistrați temperatura cu Bluetooth LE și RaspberryPi
Monitorizați și înregistrați temperatura cu Bluetooth LE și RaspberryPi

Această instrucțiune este despre cum să asamblați un sistem de monitorizare a temperaturii cu mai multe noduri cu un senzor Bluetooth LE bug de la Blue Radios (BLEHome) și RaspberryPi 3B Datorită dezvoltării standardului Bluetooth LE, există acum pe piață senzori wireless de mică putere pentru un cost foarte mic și poate rula pe o singură celulă monedă timp de luni la rând. Unul dintre acești senzori pe care l-am preluat este de la Blue Radio numit Sensor Bugs. Costând aproximativ 25 USD pe Amazon, este un dispozitiv Bluetooth LE cu senzor de temperatură, senzor de lumină și accerometru, toate încorporate într-o unitate mică care poate comunica fără fir. Aceasta este o potrivire perfectă pentru Raspberry Pi 3B, care are suport pentru radio Bluetooth LE.

Pasul 1: Configurați Raspberry Pi

Primul pas este să obțineți o configurare Raspberry Pi funcțională. Urmați instrucțiunile de pe site-ul web Raspberry Pi, încărcați Raspbian pe un card SD, introduceți-l în Raspberry Pi și porniți-l. Am configurat sistemul cu versiunea Raspbian Stretch Lite (Fără GUI) noiembrie 2017. Configurați WiFi dacă este necesar, prefer să reglați fus orar la fusul orar curent în loc de UTC. Puteți face acest lucru cu ajutorul comenzii: $ sudo dpkg-reconfigure tzdata Restul instrucțiunii presupune că configurarea este realizată prin interfața liniei de comandă.

Pasul 2: Configurarea MySQL pe Raspberry Pi

Este util să aveți o bază de date instalată local pentru a stoca toate datele capturate. Instalarea MySQL pe Raspberry Pi este foarte ușoară. De asemenea, nu este dificil să modificați scriptul pentru a vă conecta la un server SQL extern, puteți sări peste acest pas dacă doriți să utilizați un server SQL în rețea. Există multe instrucțiuni pe net, vă sugerez următoarele: https:// www.stewright.me/2014/06/tutorial-install-…

Odată ce serverul SQL este instalat, puteți utiliza clientul MySQL CLI pentru a crea utilizator, bază de date și tabel. Pentru a introduce MySQL CLI, utilizați comanda:

$ sudo mysql -uroot-p În primul rând, creați un utilizator local pentru a insera datele capturate:> CREATE USER 'datasrc' @ 'localhost' IDENTIFYED BY 'datasrc000'; Apoi, creați o bază de date și un tabel:> CREATE DATABASE SensorBug; Configurarea utilizatorului permisiune:> ACORDĂ TOATE PRIVILEGII PE SensorBug. * TO 'datasrc' @ 'localhost'; Acum adaugă un nou tabel în baza de date. Pentru acest exemplu, voi adăuga un tabel cu următoarele coloane: DATA, ORA, ADRESA, LOCAȚIA, TEMPERATURA și ACCEROMETRUL

  • DATA / ORA - Aceasta este data și ora la care sunt înregistrate datele
  • ADRESA - Acesta este MAC-ul SensorBug din care este capturat mesajul
  • LOCAȚIE - Un șir lizibil de către om pentru a indica unde este situat senzorul
  • TEMPERATURĂ - Aceasta este temperatura înregistrată
  • ACCELE - Aceasta este valoarea ieșirii accelerometrului, utilă pentru înregistrarea poziției senzorului (dacă este activată)

Comanda care face acest lucru este:> USE SensorBug; > CREAȚI datele TABELULUI (data DATA, ora TIME, adresa TINYTEXT, locația TINYTEXT, temperatura FLOAT, accele INT); Acum baza de date este gata, putem trece la configurarea sensorBugs.

Pasul 3: Configurarea SensorBugs

Problemele senzorului sunt dispozitive mici destul de îngrijite. Din păcate, producătorul a furnizat doar aplicația IOS pentru programarea acesteia. Cu toate acestea, este încă posibil să lucrați cu el dacă aveți doar un dispozitiv Android. În primul pas, asociați dispozitivul cu un telefon. Fără a asocia dispozitivul, SensorBug nu va face publicitate datelor. Am încercat să văd dacă pot face acest lucru direct cu RaspberryPi, din păcate, se pare că driverul Bluetooth LE de pe RaspberryPi este încă experimental și conține erori pentru a preveni asocierea cu dispozitivele Bluetooth LE. Versiunea viitoare a driverului blueZ ar putea remedia această problemă, dar, în scrierea actuală, nu există nicio modalitate de a asocia SensorBug cu RaspberryPi. Din fericire, nu este nevoie să împerechem dispozitivul pentru a captura datele publicitare. Singurul lucru de care avem nevoie este un telefon pentru a configura SensorBug. În mod implicit, SensorBug va începe să reclame datele de temperatură la interval de 1s, odată ce este asociat cu un dispozitiv. Pentru datele de captare a temperaturii, este tot ce este necesar. Dacă intenționați să vă extindeți pentru a utiliza senzorul de poziție sau de lumină, atunci va fi necesar dispozitivul. Pentru început, vom asocia dispozitivul și ne vom deconecta. Acest lucru va fi suficient de bun pentru captarea temperaturii. Începeți apăsând ambele butoane de pe SensorBug. LED-ul albastru / verde va clipi, ceea ce indică faptul că este pornit. Apăsați unul dintre butoane, LED-ul verde ar trebui să se aprindă, indicând faptul că este pornit. Dacă LED-ul verde nu este aprins, apăsați ambele butoane pentru a încerca să porniți din nou dispozitivul. Apăsați și țineți apăsat unul dintre butoane până când LED-ul albastru începe să clipească. Acest lucru va pune dispozitivul în modul de pereche. Accesați meniul de configurare Bluetooth de pe telefon și căutați dispozitivul SensorBug. Odată ce apare, selectați-l pentru a se asocia cu dispozitivul. Asta este, acum SensorBug este alimentat și publică datele de temperatură

Pasul 4: Instalarea Bluetooth LE Python Wrapper

Apoi, trebuie să instalăm biblioteca pentru python pentru a vorbi cu stiva Bluetooth LE. Instrucțiunile pot fi găsite aici: https://github.com/IanHarvey/bluepy Pentru Python 2.7, este la fel de simplu ca introducerea următoarelor comenzi:

$ sudo apt-get install python-pip libglib2.0-dev $ sudo pip install bluepy

Pasul 5: Scanați și aflați adresa SensorBug

Pentru a afla adresa MAC SensorBug, utilizați această comandă: $ sudo hcitool lescan Ar trebui să vedeți ieșire precum:

EC: FE: 7E: 10: B1: 92 (necunoscut) Dacă aveți o mulțime de dispozitive Bluetooth LE în jur, ar putea fi greu să aflați cu cine vorbiți. Puteți încerca bluetoothctl care oferă mai multe detalii:

$ sudo bluetoothctl [bluetooth] # scan on on [NOU] EC dispozitiv: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] EC dispozitiv: FE: 7E: 10: B1: 92 Cheie date producător: 0x0085 [CHG] EC dispozitiv: FE: 7E: 10: B1: 92 Valoare date producător: 0x02 [CHG] EC dispozitiv: FE: 7E: 10: B1: 92 Valoare date producător: 0x00 [CHG] EC dispozitiv: FE: 7E: 10: B1: 92 Valoare date producător: 0x3c [CHG] EC dispozitiv: FE: 7E: 10: B1: 92 Valoare date producător: 0x25 [CHG] EC dispozitiv: FE: 7E: 10: B1: 92 Valoare date producător: 0x09 [CHG] EC dispozitiv: FE: 7E: 10: B1: 92 Valoare date producător: 0x41 [CHG] EC dispozitiv: FE: 7E: 10: B1: 92 Valoare date producător: 0x02 [CHG] EC dispozitiv: FE: 7E: 10: B1: 92 Valoare date producător: 0x02 [CHG] Dispozitiv EC: FE: 7E: 10: B1: 92 Valoare date producător: 0x43 [CHG] EC dispozitiv: FE: 7E: 10: B1: 92 Valoare date producător: 0x0b [CHG] EC dispozitiv: FE: 7E: 10: B1: 92 Date producător Valoare: 0x01 [CHG] EC dispozitiv: FE: 7E: 10: B1: 92 Valoare date producător: 0x6f

Înregistrați adresa MAC, aceasta va trebui introdusă în scriptul python pentru a filtra dispozitivele Bluetooth LE nedorite

Pasul 6: Adăugați scriptul Python

O copie a scriptului Python este disponibilă de la:

drive.google.com/open?id=10vOeEAbS7mi_eXn_…

Iată același fișier, aveți grijă de liniuță când copiați:

De asemenea, actualizați adresa MAC din fișierul python pentru a se potrivi cu adresa senzorului obținută din rezultatul scanării.

# Acest program este software gratuit: îl puteți redistribui și / sau modifica

# it în condițiile licenței publice generale GNU publicate de

# Free Software Foundation, fie versiunea 3 a licenței, fie

# (la alegerea dvs.) orice versiune ulterioară.

#

# Acest program este distribuit în speranța că va fi util, # dar FĂRĂ NICI O GARANȚIE; fără măcar garanția implicită a

# VANZABILITATE sau ADECVARE PENTRU UN SCOP PARTICULAR. A se vedea

# GNU General Public License pentru mai multe detalii.

#

# Ar fi trebuit să primiți o copie a Licenței publice generale GNU

# împreună cu acest program. Dacă nu, vezi.

# bscan.py - Scanner simplu bluetooth LE și extractor de date

din bluepy.btle import Scanner, DefaultDelegate

timpul de import

import pymysql

import struct

hostname = 'localhost'

nume de utilizator = 'datasrc'

parola = 'datasrc000'

baza de date = 'SensorBug'

# Introduceți adresa MAC a senzorului din lescan

SENSOR_ADDRESS = ["ec: fe: 7e: 10: b9: 92", "ec: fe: 7e: 10: b9: 93"]

SENSOR_LOCATION = ["Garaj", "Exterior"]

clasa DecodeErrorException (Excepție):

def _init _ (sine, valoare):

self.value = valoare

def _str _ (auto):

return repr (self.value)

clasa ScanDelegate (DefaultDelegate):

def _init _ (auto):

DefaultDelegate._ init _ (auto)

def handleDiscovery (self, dev, isNewDev, isNewData):

dacă este NewDev:

print "Dispozitiv descoperit", dev.addr

elif isNewData:

print "Date noi primite de la", dev.addr

def doQueryInsert (conn, addr, loc, temp, accero):

Tabelul #blesensor este data, ora, addr, locația, temperatura, accero

cur = conn.cursor ()

dostr = 'INSERT INTO data VALUES (CURRENT_DATE (), ACUM (),% s,% s,% s,% s);'

cur.execute (dostr, (addr, loc, temp, accero))

conn.commit ()

scanner = Scanner (). withDelegate (ScanDelegate ())

myConnection = pymysql.connect (gazdă = nume gazdă, utilizator = nume utilizator, passwd = parolă, db = bază de date)

ManuDataHex =

ReadLoop = Adevărat

încerca:

while (ReadLoop):

dispozitive = scanner.scan (2.0)

ManuData = ""

pentru dev in dispozitive:

intrare = 0

AcceroData = 0

AcceroType = 0

TempData = 0

pentru saddr în SENSOR_ADDRESS:

intrare + = 1

if (dev.addr == saddr):

print "Dispozitiv% s (% s), RSSI =% d dB"% (dev.addr, dev.addrType, dev.rssi)

CurrentDevAddr = saddr

CurrentDevLoc = SENSOR_LOCATION [intrare-1]

pentru (tip ad, desc, valoare) în dev.getScanData ():

print "% s =% s"% (desc, valoare)

dacă (desc == "Producător"):

ManuData = valoare

if (ManuData == ""):

print "Nu s-au primit date, finalizează decodarea"

continua

#print ManuData

pentru i, j în zip (ManuData [:: 2], ManuData [1:: 2]):

ManuDataHex.append (int (i + j, 16))

# Începeți să decodificați datele brute ale producătorului

if ((ManuDataHex [0] == 0x85) și (ManuDataHex [1] == 0x00)):

print "S-a găsit octetul antet 0x0085"

altceva:

print "Octet antet 0x0085 nu a fost găsit, oprire decodare"

continua

#Skip Major / Minor

#Index 5 este 0x3c, indicați nivelul bateriei și configurați #

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 "Date:" + hex (ManuDataHex [idx])

if (ManuDataHex [idx] == 0x41):

#Accerometru de date

idx + = 1

AcceleroType = ManuDataHex [idx]

AcceleroData = ManuDataHex [idx + 1]

idx + = 2

elif (ManuDataHex [idx] == 0x43):

#Date de temperatură

idx + = 1

TempData = ManuDataHex [idx]

TempData + = ManuDataHex [idx + 1] * 0x100

TempData = TempData * 0,0625

idx + = 2

altceva:

idx + = 1

tipăriți "Adresă dispozitiv:" + CurrentDevAddr

tipăriți „Locația dispozitivului:” + CurrentDevLoc

tipăriți "Nivelul bateriei:" + str (BatteryLevel) + "%"

print "Config Counter:" + str (ConfigCounter)

print "Accelero Data:" + hex (AcceleroType) + "" + hex (AcceleroData)

tipăriți "Date temporare:" + str (TempData)

doQueryInsert (myConnection, CurrentDevAddr, CurrentDevLoc, TempData, AcceleroData)

ReadLoop = False

cu excepția excepției DecodeErrorException:

trece

Pasul 7: Testați scriptul Python

Scriptul trebuie rulat în root, deci:

$ sudo python bscan.py Dispozitiv descoperit ec: 6e: 7e: 10: b1: 92 Dispozitiv ec: 6e: 7e: 10: b1: 92 (public), RSSI = -80 dB Steaguri = 06 Incomplete 16b Servicii = 0a18 Producător = 850002003c25094102024309016f Octet antet 0x0085 găsit Adresă dispozitiv: ec: 6e: 7e: 10: b1: 92 Locație dispozitiv: Garaj Nivel baterie: 37% Contor configurare: 9 Date Accero: 0x2 0x2 Date temp: 16.5625

Pasul 8: Adăugați Python Scrip în Crontab

Scriptul python trebuie rulat în root, deci dacă doriți să capturați datele automat, va trebui adăugat la crontab-ul rădăcinii. Pentru acest exemplu, rulez scriptul la fiecare 20 de minute Utilizați comanda:

$ sudo crontab -e

# Editați acest fișier pentru a introduce sarcini care trebuie rulate de cron.

# # Fiecare sarcină de rulat trebuie definită printr-o singură linie # indicând cu câmpuri diferite când se va executa sarcina # și ce comandă se execută pentru sarcina # # Pentru a defini timpul în care puteți furniza valori concrete pentru # minut (m), ora (h), ziua lunii (dom), luna (lun), # și ziua săptămânii (dow) sau utilizați „*” în aceste câmpuri (pentru „orice”). # # Observați că sarcinile vor fi începute bazat pe noțiunea de timp și fusuri orare a sistemului cron #. # # Ieșirea lucrărilor crontab (inclusiv erorile) este trimisă prin # e-mail utilizatorului căruia îi aparține fișierul crontab (cu excepția cazului în care este redirecționat). # # De exemplu, puteți rula o copie de rezervă a tuturor conturilor dvs. de utilizator # la 5 dimineața în fiecare săptămână cu: # 0 5 * * 1 tar -zcf /var/backups/home.tgz / home / # # Pentru mai multe informații, consultați pagini manuale ale comenzii crontab (5) și cron (8) # # mh dom mon dow command 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * python /home/pi/bscan.py

Asta e. Scriptul python va fi rulat la intervale regulate și va recoda ieșirea în baza de date SQL

Pasul 9: Extra: configurați SensorBug pentru ieșirea de detectare a poziției

Extra: configurați SensorBug pentru ieșirea de detectare a poziției
Extra: configurați SensorBug pentru ieșirea de detectare a poziției
Extra: configurați SensorBug pentru ieșirea de detectare a poziției
Extra: configurați SensorBug pentru ieșirea de detectare a poziției

Este posibil să configurați SensorBug pe Android pentru ieșirea de detectare a poziției Pentru detectarea schimbării poziției, așa-numita Garage door.sensing, SensorBug va detecta dacă dispozitivul stă în poziție verticală sau se așează plat. Când dispozitivul este plat, valoarea înregistrată este 0x20 în timp ce dacă dispozitivul stă în poziție verticală, valoarea este 0x02 Nu diferențiază dacă poziția X sau Y este sus, atâta timp cât axa Z nu este sus sau jos. Cel mai simplu mod de a face acest lucru este să folosiți aplicația LightBlue. SensorBug ar trebui să apară în meniul de scanare. Selectați dispozitivul pe care doriți să îl configurați, accesați caracteristicile GATT pentru configurarea accelerometrului UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11

Vedeți imaginea: Scrieți un nou șir de configurare:

010d3f02020000002d00000002 Citiți înapoi șirul de configurare pentru a confirma scrierea. Aceasta permite accelerometrului pentru detectarea poziției.

Recomandat: