Sisukord:
- Samm: seadistage Raspberry Pi
- Samm: MySQL -i seadistamine Raspberry Pi -le
- 3. samm: SensorBugs seadistamine
- Samm: Bluetooth LE Python Wrapper'i installimine
- Samm: skaneerige ja leidke SensorBugi aadress
- Samm: lisage Pythoni skript
- Samm: proovige Pythoni skripti
- Samm: lisage Crontabile Pythoni skript
- Samm 9: ekstra: konfigureerige SensorBug asenditundliku väljundi jaoks
Video: Temperatuuri jälgimine ja salvestamine Bluetooth LE ja RaspberryPi abil: 9 sammu (piltidega)
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:48
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
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:
Temperatuuri ja niiskuse jälgimine AM2301 abil NodeMCU & Blynk'is: 3 sammu
Temperatuuri ja niiskuse jälgimine AM2301 abil NodeMCU -l ja Blynkil: On väga hästi teada tõsiasi, et enamikus tööstuse vertikaalides mängivad temperatuur, niiskus, rõhk, õhukvaliteet, veekvaliteet jne olulisi tegureid, mida tuleb pidevalt jälgida häiresüsteemid peavad olema paigas, kui väärtus
Temperatuuri ja niiskuse jälgimine NODE MCU ja BLYNK abil: 5 sammu
Temperatuuri ja niiskuse jälgimine NODE MCU ja BLYNK abil: Tere poisid! Selles juhendis saate teada, kuidas saada atmosfääri temperatuuri ja niiskust, kasutades DHT11-temperatuuri ja niiskuse andurit, kasutades rakendust Node MCU ja BLYNK
Ruumi temperatuuri ja niiskuse jälgimine ESP32 ja AskSensors Cloud abil: 6 sammu
Ruumi temperatuuri ja niiskuse jälgimine ESP32 ja AskSensors Cloud abil: sellest õpetusest saate teada, kuidas jälgida oma toa või laua temperatuuri ja niiskust, kasutades DHT11 ja pilvega ühendatud ESP32. Meie õpetuste värskendused leiate siit. Spetsifikatsioonid: DHT11 andur suudab mõõta temperatuuri
Temperatuuri jälgimine MCP9808 ja Raspberry Pi abil: 4 sammu
Temperatuuri jälgimine MCP9808 ja Raspberry Pi abil: MCP9808 on ülitäpne digitaalne temperatuuriandur ± 0,5 ° C I2C minimoodul. Need on varustatud kasutaja poolt programmeeritavate registritega, mis hõlbustavad temperatuuri andmise rakendusi. MCP9808 ülitäpsest temperatuuriandurist on saanud tööstusharu
Temperatuuri ja niiskuse jälgimine Raspberry Pi abil: 6 sammu (koos piltidega)
Temperatuuri ja niiskuse jälgimine Raspberry Pi abil: Suvi on tulemas ja need, kellel pole konditsioneeri, peaksid olema valmis siseruumides käsitsi atmosfääri juhtima. Selles postituses kirjeldan tänapäevast viisi inimese mugavuse jaoks kõige olulisemate parameetrite mõõtmiseks: temperatuur ja niiskus. T