Sisukord:

Temperatuuri jälgimine ja salvestamine Bluetooth LE ja RaspberryPi abil: 9 sammu (piltidega)
Temperatuuri jälgimine ja salvestamine Bluetooth LE ja RaspberryPi abil: 9 sammu (piltidega)

Video: Temperatuuri jälgimine ja salvestamine Bluetooth LE ja RaspberryPi abil: 9 sammu (piltidega)

Video: Temperatuuri jälgimine ja salvestamine Bluetooth LE ja RaspberryPi abil: 9 sammu (piltidega)
Video: 30 ülimat Windows 10 näpunäidet aastaks 2020 2024, Detsember
Anonim
Jälgige ja salvestage temperatuuri Bluetooth LE ja RaspberryPi abil
Jälgige ja salvestage temperatuuri Bluetooth LE ja RaspberryPi abil
Jälgige ja salvestage temperatuuri Bluetooth LE ja RaspberryPi abil
Jälgige ja salvestage temperatuuri Bluetooth LE ja RaspberryPi abil

See juhend annab teavet selle kohta, kuidas Blue Radios (BLEHome) ja RaspberryPi 3B Bluetooth LE anduriprobleemiga mitme sõlme temperatuuri jälgimissüsteem kokku panna. Tänu Bluetooth LE standardi väljatöötamisele on nüüd turul saadaval väikese võimsusega traadita andurid väga madalate kuludega ja võib töötada ühe mündielemendiga mitu kuud korraga. Üks neist anduritest, mille ma noppisin, on Blue Radio'st nimega Sensor Bugs. See maksab Amazonis umbes 25 dollarit, see on temperatuurianduri, valgusanduri ja akkeromeetriga Bluetooth LE seade, mis on ehitatud väikeseks seadmeks, mis saab juhtmevabalt suhelda. See sobib ideaalselt Raspberry Pi 3B -le, millel on Bluetooth LE raadio tugi.

Samm: seadistage Raspberry Pi

Esimene samm on hankida toimiv Raspberry Pi seadistus. Järgige Raspberry Pi veebisaidi juhiseid, laadige Raspbian SD -kaardile, sisestage see Raspberry Pi -sse ja käivitage see. Ma seadistan oma süsteemi Raspbian Stretch Lite (nr GUI) versiooniga 2017. aasta novembris. WiFi seadistamine, kui vaja, eelistan reguleerida ajavöönd UTC asemel praegusele ajavööndile. Seda saate teha käsuga: $ sudo dpkg-reconfigure tzdataRest käsust eeldab, et seadistamine on tehtud käsurealiidese kaudu.

Samm: MySQL -i seadistamine Raspberry Pi -le

Kogu salvestatud andmete salvestamiseks on kasulik paigaldada kohalikult andmebaas. MySQL -i installimine Raspberry Pi -le on ülilihtne. Samuti ei ole keeruline SQL -serveriga väliselt ühenduse loomiseks skripti muuta, võite selle sammu vahele jätta, kui soovite võrgus SQL -serverit kasutada. Võrgus on palju juhiseid, soovitan seda: https:// www.stewright.me/2014/06/tutorial-install-…

Kui SQL server on installitud, saate kasutaja, andmebaasi ja tabeli loomiseks kasutada MySQL CLI klienti. MySQL CLI sisestamiseks kasutage käsku:

$ sudo mysql -uroot -pEsiteks looge jäädvustatud andmete sisestamiseks kohalik kasutaja:> CREATE USER 'datasrc'@'localhost' IDENTIFYED by 'datasrc000'; Seejärel looge andmebaas ja tabel:> CREATE DATABASE SensorBug; Kasutaja seadistamine luba:> ANNE SensorBugile kõik privileegid.* TO 'datasrc'@'localhost'; Nüüd lisage andmebaasi uus tabel. Selle näite jaoks lisan tabeli järgmiste veergudega: DATE, TIME, ADDRESS, LOCATION, TEMPERATURE ja ACCEROMETER

  • DATE/TIME - see on andmete salvestamise kuupäev ja kellaaeg
  • AADRESS - see on SensorBugi MAC, kust sõnum on jäädvustatud
  • ASUKOHT - inimesele loetav string, mis näitab anduri asukohta
  • TEMPERATURE - See on salvestatud temperatuur
  • ACCELE - see on kiirendusmõõturi väljundi väärtus, mis on kasulik anduri asukoha salvestamiseks (kui see on lubatud)

Käsk, mis seda teeb, on järgmine:> USE SensorBug; > LOO TABELI andmed (kuupäev DATE, kellaaeg TIME, aadress TINYTEXT, asukoht TINYTEXT, temperatuur FLOAT, kiire INT); Nüüd on andmebaas valmis, saame liikuda sensorBugs seadistamise juurde.

3. samm: SensorBugs seadistamine

Andurivead on üsna korralikud väikesed seadmed. Kahjuks pakkus tootja selle programmeerimiseks ainult IOS -i rakenduse. Sellegipoolest on võimalik sellega töötada, kui teil on ainult Android -seade. Esimese sammuna ühendage seade telefoniga. Ilma seadme sidumiseta ei reklaami SensorBug andmeid. Proovisin näha, kas saan seda teha otse RaspberryPi abil, kahjuks tundub, et RaspberryPi Bluetooth LE draiver on endiselt eksperimentaalne ja sisaldab vigu, mis takistavad selle sidumist Bluetooth LE seadmetega. BlueZ draiveri tulevane versioon võib selle parandada, kuid praeguse kirjutise kohaselt pole SensorBugi ja RaspberryPi sidumiseks mingit võimalust. Õnneks ei pea me reklaamitud andmete jäädvustamiseks seadet siduma. Ainus, mida vajame, on telefon SensorBugi konfigureerimiseks. Vaikimisi hakkab SensorBug pärast seadmega paaristamist temperatuuriandmeid reklaamima 1 -sekundilise intervalliga. Temperatuuri andmete kogumiseks on see kõik, mida vaja. Kui kavatsete asendit või valgusandurit kasutada, on seadet vaja konfigureerida. Alustuseks sidume seadme ja katkestame ühenduse. See on temperatuuri kogumiseks piisavalt hea. Alustamiseks vajutage SensorBugi mõlemat nuppu. Sinine/roheline LED hakkab vilkuma, mis näitab, et see on sisse lülitatud. Vajutage ühte nuppu, roheline LED peaks süttima, mis näitab, et toide on sisse lülitatud. Kui roheline LED ei sütti, vajutage seadme uuesti sisselülitamiseks mõlemat nuppu. Vajutage ja hoidke all ühte nuppu, kuni sinine LED hakkab vilkuma. See viib seadme paarisrežiimi. Minge telefoni Bluetoothi konfiguratsioonimenüüsse ja otsige seadet SensorBug. Kui see ilmub, valige see seadmega sidumiseks. See on nii, nüüd on SensorBug toitega ja reklaamib temperatuuri andmeid

Samm: Bluetooth LE Python Wrapper'i installimine

Järgmisena peame installima pythoni teegi, et rääkida Bluetooth LE stackiga. Juhendi leiate siit:

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

Samm: skaneerige ja leidke SensorBugi aadress

SensorBug MAC -aadressi leidmiseks kasutage seda käsku: $ sudo hcitool lescan Te peaksite nägema väljundit nagu:

EC: FE: 7E: 10: B1: 92 (teadmata) Kui teie ümber on palju Bluetooth -LE -seadmeid, võib olla raske välja selgitada, kellega te räägite. Võite proovida bluetoothctl, mis annab rohkem teavet:

$ sudo bluetoothctl [bluetooth]# skaneerimine [UUS] Seadme EC: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] Seadme EC: FE: 7E: 10: B1: 92 Tootjaandmete võti: 0x0085 [CHG] Seadme 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] Seade EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x25 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x09 [CHG] Device 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 Väärtus: 0x01 [CHG] Seade EC: FE: 7E: 10: B1: 92 Tootjaandmete väärtus: 0x6f

Salvestage MAC -aadress, see tuleb sisestada pythoni skripti, et filtreerida soovimatud Bluetooth LE -seadmed

Samm: lisage Pythoni skript

Pythoni skripti koopia on saadaval aadressil:

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

Siin on sama fail, hoolitsege kopeerimisel taande eest:

Samuti värskendage python -faili MAC -aadressi, et see vastaks skannimistulemusest saadud anduri aadressile.

# See programm on tasuta tarkvara: saate seda ümber levitada ja/või muuta

# see vastavalt GNU üldise avaliku litsentsi tingimustele, mille avaldas

# Free Software Foundation, kas litsentsi versioon 3 või

# (teie valikul) mis tahes hilisem versioon.

#

# Seda programmi levitatakse lootuses, et sellest on kasu, # aga MITTE MINGI GARANTIITA; isegi ilma kaudse garantiita

# MÜÜGILIKKUS või KOHALDUMINE TEATUD EESMÄRGIL. Vaadake

# GNU üldine avalik litsents lisateabe saamiseks.

#

# Te oleksite pidanud saama GNU üldise avaliku litsentsi koopia

# koos selle programmiga. Kui ei, siis vaadake.

# bscan.py - Lihtne Bluetooth LE skanner ja andmete väljavõtja

from bluepy.btle Import Scanner, DefaultDelegate

impordi aeg

import pymysql

impordistruktuur

hostname = 'localhost'

kasutajanimi = 'datasrc'

parool = 'datasrc000'

andmebaas = 'SensorBug'

#Sisestage andurilt MAC -aadress

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

SENSOR_LOCATION = ["Garaaž", "Välimus"]

klass DecodeErrorException (erand):

def _init _ (ise, väärtus):

ise.väärtus = väärtus

def _str _ (ise):

tagasipöördumine (eneseväärtus)

klass ScanDelegate (vaikeseade):

def _init _ (ise):

DefaultDelegate._ init _ (ise)

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

if isNewDev:

print "Avastatud seade", dev.addr

elif onUued andmed:

print "Uued andmed said", dev.addr

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

#ensensor tabel on kuupäev, kellaaeg, addr, asukoht, temp, accero

cur = kursor ()

dostr = 'INSERT INTO VÄÄRTUSED (CURRENT_DATE (), NOW (), %s, %s, %s, %s);'

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

conn.commit ()

skanner = skanner (). koos kustutamisega (ScanDelegate ())

myConnection = pymysql.connect (host = hostinimi, kasutaja = kasutajanimi, passwd = parool, db = andmebaas)

ManuDataHex =

ReadLoop = Tõsi

proovige:

samas (ReadLoop):

seadmed = skanner.scan (2.0)

ManuData = ""

seadmete arendajatele:

kanne = 0

AcceroData = 0

AcceroType = 0

TempData = 0

saddrile SENSOR_ADDRESS:

kirje += 1

kui (dev.addr == saddr):

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

CurrentDevAddr = saddr

CurrentDevLoc = SENSOR_LOCATION [kirje-1]

(adtype, desc, value) jaoks dev.getScanData ():

prindi " %s = %s" %(kirjeldus, väärtus)

kui (desc == "Tootja"):

ManuData = väärtus

kui (ManuData == ""):

print "Andmeid ei saadud, dekodeerimine lõpetatakse"

jätkata

#print ManuData

i, j jaoks zip (ManuData [:: 2], ManuData [1:: 2]):

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

#Alustage tooreste tootjaandmete dekodeerimist

kui ((ManuDataHex [0] == 0x85) ja (ManuDataHex [1] == 0x00)):

prindi "Leiti päisebait 0x0085"

muidu:

prindi "Päisebaiti 0x0085 ei leitud, dekodeerimise peatus"

jätkata

#Jäta vahele suurem/väiksem

#Indeks 5 on 0x3c, näitab aku taset ja konfiguratsiooni #

kui (ManuDataHex [4] == 0x3c):

BatteryLevel = ManuDataHex [5]

ConfigCounter = ManuDataHex [6]

idx = 7

#print "TotalLen:" + str (len (ManuDataHex))

samas (idx <len (ManuDataHex)):

#print "Idx:" + str (idx)

#print "Andmed:" + kuusnurk (ManuDataHex [idx])

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

#Accerometer andmed

idx += 1

AcceleroType = ManuDataHex [idx]

AcceleroData = ManuDataHex [idx+1]

idx += 2

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

#Temperatuuri andmed

idx += 1

TempData = ManuDataHex [idx]

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

TempData = TempData * 0,0625

idx += 2

muidu:

idx += 1

print "Seadme aadress:" + CurrentDevAddr

print "Seadme asukoht:" + CurrentDevLoc

print "Aku tase:" + str (BatteryLevel) + "%"

print "Config Counter:" + str (ConfigCounter)

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

print "Temp Data:" + str (TempData)

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

ReadLoop = vale

välja arvatud DecodeErrorException:

üle andma

Samm: proovige Pythoni skripti

Skript tuleb käivitada root, nii et:

$ sudo python bscan.py Avastatud seade ec: 6e: 7e: 10: b1: 92 Seade ec: 6e: 7e: 10: b1: 92 (avalik), RSSI = -80 dB Lipud = 06 Mittetäielik 16b Teenused = 0a18 Tootja = 850002003c25094102024309016f Päisebait 0x0085 leitud Seadme aadress: ec: 6e: 7e: 10: b1: 92 Seadme asukoht: Garaaži aku tase: 37% Konfiguratsiooniloendur: 9 Accero andmed: 0x2 0x2 Temp Andmed: 16.5625

Samm: lisage Crontabile Pythoni skript

Pythoni skript tuleb käivitada juurest, nii et kui soovite andmeid automaatselt jäädvustada, tuleb see lisada juure crontab -i. Selle näite puhul käivitan skripti iga 20 minuti järel. Kasutage käsku:

$ sudo crontab -e

# Muutke seda faili, et tutvustada ülesandeid, mida cron käivitab.

# # Iga käivitatav ülesanne tuleb määratleda ühe rea kaudu #, mis näitab erinevate väljadega, millal ülesanne käivitatakse # ja millist käsku ülesande jaoks käivitada # # Aja määramiseks saate esitada # minuti (m), tund (h), kuupäev (dom), kuu (esmaspäev), # ja nädalapäev (dow) või kasutage nendes väljades tähte "*" ("ükskõik"). # # Pange tähele, et ülesandeid alustatakse põhineb croni süsteemil # deemoni arusaam ajast ja ajavöönditest. # # Crontab -tööde väljund (sh vead) saadetakse # meili teel kasutajale, kellele crontab -fail kuulub (kui seda ei suunata ümber). # # Näiteks saate igal nädalal kell 5 hommikul varundada kõik oma kasutajakontod #: 5 0 * * 1 tar -zcf /var/backups/home.tgz/home/ # # Lisateabe saamiseks vaadake crontab (5) ja cron (8) manuaalleheküljed # # mh dom mon dow käsk 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * python /home/pi/bscan.py

See on kõik. Pythoni skript käivitatakse regulaarselt ja kodeerib väljundi SQL -andmebaasi

Samm 9: ekstra: konfigureerige SensorBug asenditundliku väljundi jaoks

Lisa: konfigureerige SensorBug positsioonitundliku väljundi jaoks
Lisa: konfigureerige SensorBug positsioonitundliku väljundi jaoks
Lisa: konfigureerige SensorBug positsioonitundliku väljundi jaoks
Lisa: konfigureerige SensorBug positsioonitundliku väljundi jaoks

Asukoha muutmise, nn garaažiukse. Sensori jaoks tuvastab SensorBug, kas seade seisab püsti või lamab. Kui seade on tasane, on salvestatud väärtus 0x20 kui seade seisab püsti, on väärtus 0x02. See ei tee vahet, kas X- või Y -asend on ülespoole, kui Z -telg ei ole üles või alla. Lihtsaim viis seda teha on kasutada rakendust LightBlue. SensorBug peaks ilmuma skannimismenüüsse. Valige seade, mida soovite konfigureerida, minge kiirendusmõõturi konfiguratsiooni UUID GATT-i omaduste juurde: 9DC84838-7619-4F09-A1CE-DDCF63225B11

Vaata pilti: Kirjutage uus konfiguratsioonistring:

Kirjutamise kinnitamiseks lugege konfiguratsioonistring tagasi. See võimaldab kiirendusmõõturit asukoha tuvastamiseks.

Soovitan: