Turinys:
- 1 veiksmas: nustatykite „Raspberry Pi“
- 2 veiksmas: „MySQL“nustatymas „Raspberry Pi“
- 3 žingsnis: „SensorBugs“nustatymas
- 4 veiksmas: įdiekite „Bluetooth LE Python Wrapper“
- 5 veiksmas: nuskaitykite ir sužinokite „SensorBug“adresą
- 6 veiksmas: pridėkite „Python“scenarijų
- 7 veiksmas: išbandykite „Python“scenarijų
- 8 veiksmas: pridėkite „Python Scrip“prie „Crontab“
- 9 veiksmas: papildomas: sukonfigūruokite „SensorBug“padėties jutimo išvestį
Video: Temperatūros stebėjimas ir įrašymas naudojant „Bluetooth LE“ir „RaspberryPi“: 9 žingsniai (su nuotraukomis)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Š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į
„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:
Temperatūros ir drėgmės stebėjimas naudojant NODE MCU ir BLYNK: 5 žingsniai
Temperatūros ir drėgmės stebėjimas naudojant „NODE MCU“ir „BLYNK“: Sveiki, vaikinai! Šioje pamokoje leiskite mums sužinoti, kaip gauti temperatūros ir drėgmės atmosferą naudojant DHT11 temperatūros ir drėgmės jutiklį naudojant „Node MCU“ir „BLYNK“programą
Kambario temperatūros ir drėgmės stebėjimas naudojant ESP32 ir „AskSensors Cloud“: 6 žingsniai
Kambario temperatūros ir drėgmės stebėjimas naudojant ESP32 ir „AskSensors Cloud“: Šioje pamokoje sužinosite, kaip stebėti kambario ar stalo temperatūrą ir drėgmę naudojant DHT11 ir ESP32, prijungtus prie debesies. Mūsų mokymo vadovų atnaujinimus rasite čia. Specifikacijos: DHT11 jutiklis gali matuoti temperatūrą
Temperatūros stebėjimas naudojant MCP9808 ir Raspberry Pi: 4 žingsniai
Temperatūros stebėjimas naudojant MCP9808 ir Raspberry Pi: MCP9808 yra labai tikslus skaitmeninis temperatūros jutiklis ± 0,5 ° C I2C mini modulis. Jie yra su vartotojo programuojamais registrais, palengvinančiais temperatūros jutimo programas. MCP9808 didelio tikslumo temperatūros jutiklis tapo pramone
DHT temperatūros ir drėgmės stebėjimas naudojant ESP8266 ir „AskSensors IoT“platformą: 8 žingsniai
DHT temperatūros ir drėgmės stebėjimas naudojant ESP8266 ir „AskSensors IoT“platformą: Ankstesnėje instrukcijoje aš pateikiau žingsnis po žingsnio vadovą, kaip pradėti dirbti su ESP8266 nodeMCU ir „AskSensors IoT“platforma. Šioje pamokoje aš jungiu DHT11 jutiklį į mazgą MCU. DHT11 yra dažniausiai naudojama temperatūra ir drėgmė
Temperatūros ir drėgmės stebėjimas naudojant „Raspberry Pi“: 6 žingsniai (su nuotraukomis)
Temperatūros ir drėgmės stebėjimas naudojant „Raspberry Pi“: artėja vasara, o tie, kurie neturi oro kondicionieriaus, turėtų būti pasirengę rankiniu būdu valdyti atmosferą patalpose. Šiame įraše aprašau šiuolaikinį būdą, kaip išmatuoti svarbiausius žmogaus komforto parametrus: temperatūrą ir drėgmę. T