Turinys:

Temperatūros stebėjimas ir įrašymas naudojant „Bluetooth LE“ir „RaspberryPi“: 9 žingsniai (su nuotraukomis)
Temperatūros stebėjimas ir įrašymas naudojant „Bluetooth LE“ir „RaspberryPi“: 9 žingsniai (su nuotraukomis)

Video: Temperatūros stebėjimas ir įrašymas naudojant „Bluetooth LE“ir „RaspberryPi“: 9 žingsniai (su nuotraukomis)

Video: Temperatūros stebėjimas ir įrašymas naudojant „Bluetooth LE“ir „RaspberryPi“: 9 žingsniai (su nuotraukomis)
Video: Высокая плотность 2022 2024, Lapkritis
Anonim
Stebėkite ir įrašykite temperatūrą naudodami „Bluetooth LE“ir „RaspberryPi“
Stebėkite ir įrašykite temperatūrą naudodami „Bluetooth LE“ir „RaspberryPi“
Stebėkite ir įrašykite temperatūrą naudodami „Bluetooth LE“ir „RaspberryPi“
Stebėkite ir įrašykite temperatūrą naudodami „Bluetooth LE“ir „RaspberryPi“

Ši pamoka yra apie tai, kaip surinkti kelių mazgų temperatūros stebėjimo sistemą su „Bluetooth LE“jutiklio klaida iš „Blue Radios“(BLEHome) ir „RaspberryPi 3B“. Dėl to, kad buvo sukurtas „Bluetooth LE“standartas, dabar rinkoje yra lengvai prieinami mažos galios belaidžiai jutikliai už labai mažą kainą ir gali veikti vienu monetos elementu ištisus mėnesius. Vienas iš šių jutiklių, kuriuos pasiėmiau, yra iš „Blue Radio“, pavadinto „Sensor Bugs“. „Amazon“kainuoja apie 25 USD, tai yra „Bluetooth LE“įrenginys su temperatūros jutikliu, šviesos jutikliu ir akerometru, kurie visi yra integruoti į mažą įrenginį, kuris gali bendrauti belaidžiu būdu. Tai puikiai tinka „Raspberry Pi 3B“, palaikančiam „Bluetooth LE“radiją.

1 veiksmas: nustatykite „Raspberry Pi“

Pirmasis žingsnis yra gauti veikiančią „Raspberry Pi“sąranką. Vykdykite „Raspberry Pi“svetainės instrukcijas, įkelkite „Raspbian“į SD kortelę, įdėkite į „Raspberry Pi“ir paleiskite ją. Aš nustatiau savo sistemą naudodamas „Raspbian Stretch Lite“(Nr. GUI) 2017 m. Lapkričio mėn. Versiją. Jei reikia, nustatykite „WiFi“, norėčiau koreguoti laiko juostą į dabartinę laiko juostą, o ne UTC. Tai galite padaryti naudodami komandą: $ sudo dpkg-reconfigure tzdata

2 veiksmas: „MySQL“nustatymas „Raspberry Pi“

Naudinga turėti vietoje įdiegtą duomenų bazę, kurioje būtų saugomi visi užfiksuoti duomenys. „MySQL“įdiegimas „Raspberry Pi“yra labai lengvas. Taip pat nesunku modifikuoti scenarijų, kad išoriškai prisijungtumėte prie SQL serverio, galite praleisti šį veiksmą, jei norite naudoti SQL serverį tinkle. Tinkle yra daug instrukcijų, siūlau tai: https:// www.stewright.me/2014/06/tutorial-install-…

Įdiegę SQL serverį, galite naudoti „MySQL CLI“klientą, kad sukurtumėte naudotoją, duomenų bazę ir lentelę. Norėdami įvesti „MySQL CLI“, naudokite komandą:

$ sudo mysql -uroot -pPirmiausia sukurkite vietinį vartotoją, kad įterptumėte užfiksuotus duomenis:> CREATE USER 'datasrc'@'localhost' IDENTIFYED by 'datasrc000'; Tada sukurkite duomenų bazę ir lentelę:> CREATE DATABASE SensorBug; Vartotojo nustatymas leidimas:> SUTEIKITE VISAS „SensorBug“privilegijas.* Į „datasrc“@„localhost“; Dabar pridėkite naują lentelę prie duomenų bazės. Šiame pavyzdyje pridėsiu lentelę su šiais stulpeliais: DATE, TIME, ADDRESS, LOCATION, TEMPERATURE ir ACCEROMETER

  • DATA/TIME - tai data ir laikas, kai duomenys įrašomi
  • ADRESAS - tai yra „SensorBug“MAC, iš kurio buvo gautas pranešimas
  • VIETA - Žmogaus skaitoma eilutė, nurodanti, kur yra jutiklis
  • TEMPERATŪRA - tai užfiksuota temperatūra
  • ACCELE - tai pagreičio matuoklio išėjimo vertė, naudinga įrašant jutiklio padėtį (jei įjungta)

Tai atliekanti komanda yra:> USE SensorBug; > KURTI LENTELĖS duomenis (data DATE, laikas TIME, adresas TINYTEXT, vieta TINYTEXT, temperatūra FLOAT, greitis INT); Dabar duomenų bazė paruošta, galime pereiti prie sensorBugs nustatymo.

3 žingsnis: „SensorBugs“nustatymas

Jutiklių klaidos yra gana tvarkingi maži įrenginiai. Deja, gamintojas pateikė tik „IOS“programą, skirtą jai programuoti. Vis dėlto su juo vis dar galima dirbti, jei turite tik „Android“įrenginį. Pirmasis žingsnis - suporuoti įrenginį su telefonu. Nesuporavus įrenginio, „SensorBug“neskelbs duomenų. Bandžiau išsiaiškinti, ar galiu tai padaryti tiesiogiai su „RaspberryPi“, deja, atrodo, kad „RaspberryPi“„Bluetooth LE“tvarkyklė vis dar yra eksperimentinė ir joje yra klaidų, neleidžiančių susieti „Bluetooth LE“įrenginių. Būsimoji „blueZ“tvarkyklės versija gali tai išspręsti, tačiau, kaip rašoma šiuo metu, nėra galimybės suporuoti „SensorBug“su „RaspberryPi“. Laimei, mums nereikia suporuoti įrenginio, kad užfiksuotume jo reklamuojamus duomenis. Vienintelis dalykas, kurio mums reikia, yra telefonas, skirtas sukonfigūruoti „SensorBug“. Pagal numatytuosius nustatymus „SensorBug“pradės reklamuoti temperatūros duomenis 1 sekundės intervalu, kai bus suporuotas su įrenginiu. Norint užfiksuoti temperatūros duomenis, viskas, ko reikia. Jei planuojate išplėsti ir naudoti padėties arba šviesos jutiklį, reikės konfigūruoti įrenginį. Pradžiai suporuosime įrenginį ir atjungsime. Tai bus pakankamai gera temperatūros fiksavimui. Pradėkite paspausdami abu „SensorBug“mygtukus. Mirksės žalias šviesos diodas, kuris parodys, kad jis įjungtas. Paspauskite vieną iš mygtukų, žalias šviesos diodas turėtų užsidegti, rodantis, kad maitinimas įjungtas. Jei žalias šviesos diodas neužsidega, paspauskite abu mygtukus, kad vėl įjungtumėte įrenginį. Paspauskite ir palaikykite vieną iš mygtukų, kol pradės mirksėti mėlynas šviesos diodas. Tai įjungs įrenginį į poros režimą. Eikite į telefono „Bluetooth“konfigūracijos meniu ir ieškokite „SensorBug“įrenginio. Kai jis pasirodys, pasirinkite jį suporuoti su įrenginiu. Štai viskas, dabar „SensorBug“yra įjungtas ir reklamuoja temperatūros duomenis

4 veiksmas: įdiekite „Bluetooth LE Python Wrapper“

Toliau turime įdiegti biblioteką, skirtą „python“kalbėtis su „Bluetooth LE“kaminu. Instrukciją rasite čia:

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

5 veiksmas: nuskaitykite ir sužinokite „SensorBug“adresą

Norėdami sužinoti „SensorBug“MAC adresą, naudokite šią komandą: $ sudo hcitool lescan Turėtumėte matyti išvestį kaip:

EC: FE: 7E: 10: B1: 92 (nežinoma) Jei šalia yra daug „Bluetooth“LE įrenginių, gali būti sunku išsiaiškinti, su kuo kalbate. Galite išbandyti „Bluetooth“ryšį, kuriame pateikiama daugiau informacijos:

$ sudo bluetoothctl [bluetooth]# nuskaitymas [NAUJAS] Įrenginio EC: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] Įrenginio EC: FE: 7E: 10: B1: 92 Gamintojo duomenų raktas: 0x0085 [CHG] Įrenginio EC: FE: 7E: 10: B1: 92 Gamintojo duomenų vertė: 0x02 [CHG] Įrenginys EC: FE: 7E: 10: B1: 92 Gamintojo duomenų vertė: 0x00 [CHG] Įrenginys EC: FE: 7E: 10: B1: 92 Gamintojo duomenų vertė: 0x3c [CHG] Įrenginys 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] Įrenginys 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 Vertė: 0x01 [CHG] Įrenginys EC: FE: 7E: 10: B1: 92 Gamintojo duomenų vertė: 0x6f

Įrašykite MAC adresą, jį turėsite įvesti į „python“scenarijų, kad pašalintumėte nepageidaujamus „Bluetooth LE“įrenginius

6 veiksmas: pridėkite „Python“scenarijų

„Python“scenarijaus kopiją galima rasti:

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

Čia yra tas pats failas, kopijuodami pasirūpinkite įtraukomis:

Taip pat atnaujinkite „Python“failo MAC adresą, kad jis atitiktų jutiklio adresą, gautą iš nuskaitymo rezultato.

# Ši programa yra nemokama programinė įranga: galite ją platinti ir (arba) keisti

# pagal GNU bendrosios viešosios licencijos sąlygas, paskelbtas

# Free Software Foundation, 3 licencijos versija, arba

# (jūsų pasirinkimu) bet kokia vėlesnė versija.

#

# Ši programa platinama tikintis, kad ji bus naudinga, # bet BE JOKIOS GARANTIJOS; net ir numanomos garantijos

# PERKELBTINUMAS arba TINKAMUMAS YPATINGAM TIKSLUI. Žr

# GNU General Public License, jei norite gauti daugiau informacijos.

#

# Turėjote gauti GNU bendrosios viešosios licencijos kopiją

# kartu su šia programa. Jei ne, žr.

# bscan.py - paprastas „Bluetooth“LE skaitytuvas ir duomenų ištraukėjas

iš bluepy.btle importo skaitytuvo, DefaultDelegate

importo laikas

importuoti pymysql

importo struktūra

hostname = 'vietinis šeimininkas'

username = 'datasrc'

slaptažodis = 'datasrc000'

database = 'SensorBug'

#Įveskite jutiklio MAC adresą iš „lescan“

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

SENSOR_LOCATION = ["Garažas", "Išorė"]

klasė DecodeErrorException (išimtis):

def _init _ (aš, vertė):

self.value = vertė

def _str _ (savarankiškai):

return rep (self.value)

„ScanDelegate“klasė (numatytoji išbraukta):

def _init _ (savarankiškai):

DefaultDelegate._ init _ (savarankiškai)

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

if isNewDev:

spausdinti „Atrastas įrenginys“, dev.addr

elif isNewData:

spausdinti „Gauti nauji duomenys iš“, dev.addr

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

#blesensor lentelė yra data, laikas, addr, vieta, temp, accero

cur = conn.cursor ()

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

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

conn.commit ()

skaitytuvas = Skaitytuvas (). suDelegate (ScanDelegate ())

myConnection = pymysql.connect (pagrindinis kompiuteris = pagrindinio kompiuterio vardas, vartotojas = vartotojo vardas, slaptažodis = slaptažodis, db = duomenų bazė)

ManuDataHex =

„ReadLoop“= tiesa

bandyti:

o („ReadLoop“):

prietaisai = scanner.scan (2.0)

ManuData = ""

įrenginių kūrėjams:

įrašas = 0

„AcceroData“= 0

„AcceroType“= 0

TempData = 0

saddr SENSOR_ADDRESS:

įrašas += 1

jei (dev.addr == saddr):

spausdinti „Įrenginys %s (%s), RSSI = %d dB“%(dev.addr, dev.addrType, dev.rssi)

CurrentDevAddr = saddr

CurrentDevLoc = SENSOR_LOCATION [įrašas-1]

for (adtype, desc, value) iš dev.getScanData ():

spausdinti " %s = %s" %(aprašas, vertė)

jei (desc == "Gamintojas"):

ManuData = vertė

jei (ManuData == ""):

spausdinti „Duomenys negauti, baigti dekodavimą“

Tęsti

#print ManuData

i, j į ZIP (ManuData [:: 2], ManuData [1:: 2]):

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

#Pradėkite iššifruoti neapdorotus gamintojo duomenis

jei ((ManuDataHex [0] == 0x85) ir (ManuDataHex [1] == 0x00)):

spausdinti „Rastas antraštės baitas 0x0085“

Kitas:

spausdinti „Antraštės baitas 0x0085 nerastas, dekodavimas sustabdytas“

Tęsti

#Praleisti pagrindinį/mažąjį

#5 indeksas yra 0x3c, nurodykite akumuliatoriaus įkrovos lygį ir konfigūraciją #

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

BatteryLevel = ManuDataHex [5]

ConfigCounter = ManuDataHex [6]

idx = 7

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

o (idx <len (ManuDataHex)):

#print "Idx:" + str (idx)

#print "Duomenys:" + šešioliktainis (ManuDataHex [idx])

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

#Accerometer duomenys

idx += 1

AcceleroType = ManuDataHex [idx]

„AcceleroData“= „ManuDataHex“[idx+1]

idx += 2

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

#Temperatūros duomenys

idx += 1

TempData = ManuDataHex [idx]

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

TempData = TempData * 0.0625

idx += 2

Kitas:

idx += 1

spausdinti „Įrenginio adresas:“+ CurrentDevAddr

spausdinti „Įrenginio vieta:“+ „CurrentDevLoc“

spausdinti "Baterijos lygis:" + str (BatteryLevel) + "%"

spausdinti „Config Counter:“+ str (ConfigCounter)

spausdinti „„ Accelero “duomenys:“+ šešiakampis („AcceleroType“) + ““+ šešiakampis („AcceleroData“)

spausdinti „Temp Data:“+ str (TempData)

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

ReadLoop = klaidinga

išskyrus DecodeErrorException:

praeiti

7 veiksmas: išbandykite „Python“scenarijų

Scenarijus turi būti paleistas root, todėl:

$ sudo python bscan.pyAtrastas įrenginys ec: 6e: 7e: 10: b1: 92 Įrenginys ec: 6e: 7e: 10: b1: 92 (viešas), RSSI = -80 dB vėliavos = 06 Nebaigtas 16b Paslaugos = 0a18 Gamintojas = 850002003c25094102024309016f Rastas antraštės baitas 0x0085 Įrenginio adresas: ec: 6e: 7e: 10: b1: 92 Įrenginio vieta: Garažo baterijos lygis: 37% Konfigūracijos skaitiklis: 9 „Accero“duomenys: 0x2 0x2 Temp Data: 16.5625

8 veiksmas: pridėkite „Python Scrip“prie „Crontab“

„Python“scenarijus turi būti paleistas šaknyje, taigi, jei norite automatiškai užfiksuoti duomenis, juos reikės pridėti prie šaknies „crontab“. Šiame pavyzdyje scenarijų paleidžiu kas 20 minučių Naudokite komandą:

$ sudo crontab -e

# Redaguokite šį failą, kad įvestumėte užduotis, kurias turi vykdyti „cron“.

# # Kiekviena vykdytina užduotis turi būti apibrėžta per vieną eilutę # nurodant skirtingus laukus, kada užduotis bus vykdoma # ir kokią komandą vykdyti vykdant užduotį # # Norėdami nustatyti laiką, kurį galite pateikti # minutės konkrečių reikšmių (m), valanda (h), mėnesio diena (dom), mėnuo (pirmadienis), # ir savaitės diena (dow) arba šiuose laukuose naudokite „*“(„bet“). # # Atkreipkite dėmesį, kad užduotys bus pradėtos remiantis crono sistema # demonas laiko ir laiko juostų sąvoka. # # „Crontab“užduočių išvestis (įskaitant klaidas) siunčiama # el. Paštu vartotojui, kuriam priklauso „crontab“failas (nebent peradresuojama). # # Pavyzdžiui, kiekvieną savaitę 5 val. Galite sukurti visų savo vartotojų paskyrų atsarginę kopiją: # 0 5 * * 1 tar -zcf /var/backups/home.tgz/home/ # # Norėdami gauti daugiau informacijos, žr. rankiniai crontab (5) ir cron (8) puslapiai # # mh dom mon dow komanda 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * python /home/pi/bscan.py

Viskas. „Python“scenarijus bus vykdomas reguliariais intervalais ir iš naujo perkoduoja išvestį į SQL duomenų bazę

9 veiksmas: papildomas: sukonfigūruokite „SensorBug“padėties jutimo išvestį

Papildomai: sukonfigūruokite „SensorBug“padėties jutimo išvestį
Papildomai: sukonfigūruokite „SensorBug“padėties jutimo išvestį
Papildomai: sukonfigūruokite „SensorBug“padėties jutimo išvestį
Papildomai: sukonfigūruokite „SensorBug“padėties jutimo išvestį

„Android“galima sukonfigūruoti „SensorBug“, kad būtų galima nustatyti padėties jutiklius. Norėdami nustatyti padėties pokyčius, vadinamuosius garažo vartus. Jutimas, „SensorBug“nustatys, ar prietaisas stovi vertikaliai, ar guli. o jei prietaisas stovi vertikaliai, vertė yra 0x02. Jis nesiskiria, ar X arba Y padėtis yra aukštyn, kol Z ašis nėra aukštyn arba žemyn. Lengviausias būdas tai padaryti yra naudoti „LightBlue“programą. „SensorBug“turėtų būti rodomas nuskaitymo meniu. Pasirinkite įrenginį, kurį norite konfigūruoti, eikite į GATT charakteristikas, skirtas pagreičio matuoklio konfigūracijai UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11

Žr. Paveikslėlį: parašykite naują konfigūracijos eilutę:

010d3f02020000002d00000002 Perskaitykite konfigūracijos eilutę, kad patvirtintumėte įrašymą. Tai leidžia pagreičio matuokliui nustatyti padėtį.

Rekomenduojamas: