Բովանդակություն:

Վերահսկել և գրանցել ջերմաստիճանը Bluetooth LE- ով և ազնվամորիով ՝ 9 քայլ (նկարներով)
Վերահսկել և գրանցել ջերմաստիճանը Bluetooth LE- ով և ազնվամորիով ՝ 9 քայլ (նկարներով)

Video: Վերահսկել և գրանցել ջերմաստիճանը Bluetooth LE- ով և ազնվամորիով ՝ 9 քայլ (նկարներով)

Video: Վերահսկել և գրանցել ջերմաստիճանը Bluetooth LE- ով և ազնվամորիով ՝ 9 քայլ (նկարներով)
Video: ZMI PurPods - տեխնոլոգիական Bluetooth 5.2 ականջակալ ՝ հարմարեցված ձայնի կարգավորմամբ և հավասարեցմամբ 2024, Հուլիսի
Anonim
Վերահսկել և գրանցել ջերմաստիճանը Bluetooth LE- ով և RaspberryPi- ով
Վերահսկել և գրանցել ջերմաստիճանը Bluetooth LE- ով և RaspberryPi- ով
Դիտեք և գրանցեք ջերմաստիճանը Bluetooth LE- ով և RaspberryPi- ով
Դիտեք և գրանցեք ջերմաստիճանը Bluetooth LE- ով և RaspberryPi- ով

Այս խրատը այն մասին է, թե ինչպես կարելի է միավորել ջերմաստիճանի մոնիտորինգի բազմակողմանի համակարգ Bluetooth LE սենսորային սխալի միջոցով Blue Radios (BLEHome) և RaspberryPi 3B- ի շնորհիվ Bluetooth LE ստանդարտի զարգացման շնորհիվ այժմ շուկայում առկա են ցածր էներգիայի անլար տվիչներ: շատ ցածր գնով և կարող է ամիսներ շարունակ աշխատել մեկ մետաղադրամի բջիջի վրա: Այս սենսորներից մեկը, որ ես վերցրեցի, Blue Radio- ից է, որը կոչվում է Sensor Bugs: Amazon- ում արժե մոտ $ 25, դա Bluetooth LE սարք է `ջերմաստիճանի տվիչով, լուսային սենսորով և արագաչափով, որոնք բոլորը կառուցված են մի փոքր սարքի մեջ, որը կարող է անլար հաղորդակցվել: Սա հիանալի համընկնում է Raspberry Pi 3B- ի համար, որը ստեղծվել է Bluetooth LE ռադիոյի աջակցությամբ:.

Քայլ 1: Կարգավորեք Raspberry Pi- ն

Առաջին քայլը `ստանալ Raspberry Pi- ի աշխատանքային կարգավորում: Հետևեք Raspberry Pi- ի վեբ կայքի ցուցումներին, տեղադրեք Raspbian- ը SD քարտի վրա, տեղադրեք Raspberry Pi- ի մեջ և տեղադրեք այն: Ես իմ համակարգը կարգավորում եմ Raspbian Stretch Lite (No GUI) տարբերակով նոյեմբեր 2017 -ին: Անհրաժեշտության դեպքում WiFi- ի տեղադրում, ես նախընտրում եմ հարմարեցնել ժամային գոտի դեպի ընթացիկ ժամային գոտի UTC- ի փոխարեն: Դուք կարող եք դա անել, չնայած հրամանին ՝ $ sudo dpkg-reconfigure tzdata Հրահանգի մնացորդը ենթադրենք, որ կարգավորումը կատարվում է հրամանի տողի միջերեսով:

Քայլ 2: MySQL- ի տեղադրում Raspberry Pi- ի վրա

Օգտակար է տեղակայված տվյալների բազայի տեղադրումը `բոլոր գրավված տվյալները պահելու համար: Raspberry Pi- ի վրա MySQL- ի տեղադրումը չափազանց հեշտ է: Դժվար չէ նաև փոփոխել սցենարը SQL սերվերին արտաքին կապելու համար, կարող եք բաց թողնել այս քայլը, եթե ցանկանում եք օգտագործել SQL սերվեր ցանցում: instructionsանցում կան բազմաթիվ հրահանգներ, ես սա առաջարկում եմ ՝ https:// www.stewright.me/2014/06/tutorial-install-…

SQL սերվերը տեղադրվելուց հետո կարող եք օգտագործել MySQL CLI հաճախորդը ՝ օգտվող, տվյալների բազա և աղյուսակ ստեղծելու համար: MySQL CLI մուտքագրելու համար օգտագործեք հրամանը.

$ sudo mysql -uroot -p Նախ, ստեղծեք տեղացի օգտվող ՝ գրավված տվյալները տեղադրելու համար.> CREATE USER 'datasrc'@'localhost' IDENTIFYED BY 'datasrc000'; Հաջորդը, ստեղծեք տվյալների բազա և աղյուսակ.> CREATE DATABASE SensorBug; Օգտագործողի կարգավորում թույլտվություն.> ՏՐԱՄԱԴՐԵԼ ԲՈԼՈՐ ՊՐՈՎԻԼՅՈՆՆԵՐԸ SensorBug- ում:* Դեպի 'datasrc'@'localhost'; Այժմ ավելացրեք նոր աղյուսակ տվյալների բազայում: Այս օրինակի համար ես կավելացնեմ աղյուսակ հետևյալ սյունակներով ՝ DATE, TIME, ՀԱՍRԵ, ՏԵOCԱԿԱԼՈ,ԹՅՈՆ, EMԵՐՄԱՈՅ և ԱԿՍԵՐՈՄԵՏՐ

  • DATE/TIME - Սա տվյալների գրանցման ամսաթիվն ու ժամն է
  • ՀԱՍRԵ - Սա SensorBug- ի MAC- ն է, որտեղից հաղորդագրությունը վերցված է
  • ՏԵOCԵԿՈԹՅՈՆ - Մարդկային ընթերցվող տող `նշելու, թե որտեղ է գտնվում սենսորը
  • EMԵՐՄՈԹՅՈՆ - Սա գրանցված ջերմաստիճանն է
  • ACCELE - Սա արագացուցիչի ելքի արժեքն է, որն օգտակար է սենսորային դիրքի գրանցման համար (եթե այն միացված է)

Հրամանը, որն անում է սա.> USE SensorBug; > ՍՏԵԵԼ ՍԵABԱՆԻ տվյալներ (ամսաթիվը DATE, ժամը TIME, հասցեն TINYTEXT, գտնվելու վայրը TINYTEXT, ջերմաստիճանը FLOAT, speed INT); Այժմ տվյալների բազան պատրաստ է, մենք կարող ենք անցնել sensorBugs- ի կարգավորմանը:

Քայլ 3: Կարգավորեք SensorBugs- ը

Սենսորային սխալները բավականին կոկիկ փոքր սարքեր են: Unfortunatelyավոք, արտադրողը միայն IOS ծրագիր է տրամադրել այն ծրագրավորելու համար: Այնուամենայնիվ, հնարավոր է աշխատել դրա հետ, եթե ունեք միայն Android սարք: Առաջին քայլը ՝ սարքը միացրեք հեռախոսի հետ: Առանց սարքը զուգակցելու, SensorBug- ը չի գովազդելու տվյալները: Փորձեցի պարզել ՝ կարո՞ղ եմ դա անել անմիջապես RaspberryPi- ի հետ, ցավոք, թվում է, թե RaspberryPi- ի Bluetooth LE վարորդը դեռ փորձնական է և պարունակում է սխալներ ՝ այն կանխելու համար Bluetooth LE սարքերի հետ զուգակցումը: BlueZ վարորդի ապագա տարբերակը կարող է շտկել դա, սակայն, ինչպես ներկայումս գրված է, SensorBug- ը RaspberryPi- ի հետ համատեղելու միջոց չկա: Բարեբախտաբար, մենք կարիք չունենք սարքը զուգակցելու ՝ գովազդվող տվյալները գրավելու համար: Միակ բանը, որ մեզ պետք է, հեռախոսն է ՝ SensorBug- ը կազմաձևելու համար: Լռելյայն, SensorBug- ը կսկսի գովազդել ջերմաստիճանի տվյալները 1 վրկ ընդմիջումով, երբ այն սարքի հետ զուգակցվի: Temperatureերմաստիճանի տվյալների գրավման համար դա այն ամենն է, ինչ անհրաժեշտ է: Եթե նախատեսում եք ընդլայնել դիրքի կամ լույսի սենսորի օգտագործման համար, ապա սարքի կազմաձևման կարիքը կլինի: Սկսելու համար մենք սարքը կմիավորենք և կապը կտրենք: Սա բավականաչափ լավ կլինի ջերմաստիճանի գրավման նպատակով: Սկսեք ՝ սեղմելով SensorBug- ի երկու կոճակները: Կապույտ/կանաչ լուսադիոդը կթարթվի, ինչը ցույց է տալիս, որ այն միացված է: Սեղմեք կոճակից մեկը, կանաչ LED- ը պետք է լուսավորվի, նշեք, որ հոսանքը միացված է: Եթե կանաչ լուսադիոդը լուսավորված չէ, սեղմեք երկու կոճակը ՝ սարքը նորից միացնելու համար: Սեղմեք և պահեք կոճակից մեկը, մինչև կապույտ LED- ը սկսի թարթել: Սա սարքը կդնի զույգ ռեժիմի: Մտեք հեռախոսի Bluetooth կազմաձևման ընտրացանկ և փնտրեք SensorBug սարքը: Երբ այն հայտնվի, ընտրեք այն սարքի հետ զուգակցելու համար: Դա այն է, որ այժմ SensorBug- ը սնուցվում է և գովազդում է ջերմաստիճանի տվյալները

Քայլ 4: Տեղադրեք Bluetooth LE Python Wrapper- ը

Հաջորդը, մենք պետք է տեղադրենք գրադարանը Python- ի համար ՝ Bluetooth LE կույտի հետ խոսելու համար: Հրահանգը կարող եք գտնել այստեղ ՝ https://github.com/IanHarvey/bluepy Python 2.7 -ի համար այն նույնքան պարզ է, որքան հետևյալ հրամանները մուտքագրելը.

$ sudo apt-get տեղադրել python-pip libglib2.0-dev $ sudo pip install bluepy

Քայլ 5. Սկանավորեք և գտեք SensorBug- ի հասցեն

SensorBug MAC հասցեն պարզելու համար օգտագործեք այս հրամանը ՝ $ sudo hcitool lescan Դուք պետք է տեսնեք ելք, ինչպիսին է ՝

EC: FE: 7E: 10: B1: 92 (անհայտ) Եթե ձեր կողքին կան շատ bluetooth LE սարքեր, գուցե դժվար լինի պարզել, թե որ մեկի հետ եք խոսում: Կարող եք փորձել bluetoothctl- ը, որն ավելի շատ մանրամասներ է տալիս.

$ sudo bluetoothctl [bluetooth]# սկան միացված է [NEW] Սարքի EC: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] Սարքի EC: FE: 7E: 10: B1: 92 ԱրտադրողՏվյալների բանալին ՝ 0x0085 [CHG] Սարքի EC: FE: 7E: 10: B1: 92 Արտադրող Տվյալների արժեքը `0x02 [CHG] Սարքի EC: FE: 7E: 10: B1: 92 Manufacturer Տվյալների արժեքը` 0x00 [CHG] Սարքը EC: FE: 7E: 10: B1: 92 Manufacturer Տվյալների արժեքը: 0x3c [CHG] Սարքի EC: FE: 7E: 10: B1: 92 ԱրտադրողՏվյալների արժեքը `0x25 [CHG] Սարքի EC: FE: 7E: 10: B1: 92 ManufacturerData արժեքը` 0x09 [CHG] Սարքի EC: FE: 7E: 10: B1: 92 Արտադրող Տվյալների արժեքը `0x41 [CHG] Սարքի EC: FE: 7E: 10: B1: 92 Manufacturer Տվյալների արժեքը` 0x02 [CHG] Սարքը EC: FE: 7E: 10: B1: 92 Manufacturer Տվյալների արժեքը `0x02 [CHG] Սարքը EC: FE: 7E: 10: B1: 92 Manufacturer Տվյալների արժեքը `0x43 [CHG] Սարքը EC: FE: 7E: 10: B1: 92 Manufacturer Տվյալների արժեքը` 0x0b [CHG] Սարքը EC: FE: 7E: 10: B1: 92 Manufacturer Տվյալներ Արժեքը ՝ 0x01 [CHG] Սարքի EC ՝ FE: 7E: 10: B1: 92 Արտադրող Տվյալների արժեքը ՝ 0x6f

Գրանցեք MAC հասցեն, այն պետք է մուտքագրվի python սցենարի մեջ ՝ Bluetooth LE անցանկալի սարքերը զտելու համար:

Քայլ 6: Ավելացրեք Python Script

Python սցենարի պատճենը հասանելի է ՝

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

Ահա նույն ֆայլը, պատճենելիս հոգ տանել կետի մասին.

Բացի այդ, թարմացրեք MAC հասցեն պիթոնի ֆայլում, որպեսզի համապատասխանի սկանավորման արդյունքից ստացված սենսորի հասցեին:

# Այս ծրագիրը անվճար ծրագրակազմ է. Կարող եք այն վերաբաշխել և/կամ փոփոխել

# այն GNU General Public License- ի պայմաններով, ինչպես հրապարակել է

# Free Software Foundation, կամ լիցենզիայի 3 -րդ տարբերակ, կամ

# (ըստ ձեր ցանկության) ցանկացած ավելի ուշ տարբերակ:

#

# Այս ծրագիրը տարածվում է այն հույսով, որ այն օգտակար կլինի, # բայց ԱՌԱՆ ԵՐԱՇԽԻՔԻ; առանց նույնիսկ ենթադրյալ երաշխիքի

# ԱՌԵՎՏՐՈԹՅՈՆ կամ համապատասխանություն ՝ հատուկ նպատակի համար: Տես ՝

# GNU General Public License ՝ ավելի մանրամասն:

#

# Դուք պետք է ստանայիք GNU General Public License- ի պատճենը

# այս ծրագրի հետ միասին: Եթե ոչ, տես.

# bscan.py - Պարզ bluetooth LE սկաներ և տվյալների արդյունահանող սարք

bluepy.btle ներմուծման սկաներից, DefaultDelegate- ից

ներմուծման ժամանակը

ներմուծել pymysql

ներմուծել կառուցվածքը

hostname = 'localhost'

օգտվողի անուն = 'datasrc'

գաղտնաբառ = 'datasrc000'

տվյալների բազա = 'SensorBug'

#Մուտքագրեք սենսորի MAC հասցեն lescan- ից

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

SENSOR_LOCATION = ["Ավտոտնակ", "Արտաքին"]

դասարան DecodeErrorException (Բացառություն):

def _init _ (ես, արժեք):

self.value = արժեքը

def _str _ (ինքն):

վերադարձ repr (self.value)

դաս ScanDelegate (DefaultDelegate):

def _init _ (self):

DefaultDelegate._ init _ (ինքնուրույն)

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

եթե isNewDev:

տպել «Հայտնաբերված սարք», dev.addr

elif isNewData:

տպել «Ստացվել են նոր տվյալներ», dev.addr

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

#blesensor աղյուսակը ամսաթիվն է, ժամը, հասցեն, գտնվելու վայրը, ջերմաստիճանը, ավելացումը

cur = conn.cursor ()

dostr = 'ՄՏԱԵՔ տվյալների արժեքների մեջ (CURRENT_DATE (), NOW (), %s, %s, %s, %s);'

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

conn.commit ()

սկաներ = Սկաներ (). withDelegate (ScanDelegate ())

myConnection = pymysql.connect (հյուրընկալող = հյուրընկալողի անուն, օգտվող = օգտվողի անուն, passwd = գաղտնաբառ, db = տվյալների բազա)

ManuDataHex =

ReadLoop = իշտ է

փորձել:

while (ReadLoop):

սարքեր = սկաներ. սկան (2.0)

Մանուա տվյալներ = ""

սարքերի համար dev- ի համար.

մուտք = 0

AcceroData = 0

AcceroType = 0

TempData = 0

saddr- ի համար SENSOR_ADDRESS- ում ՝

մուտք += 1

եթե (dev.addr == saddr):

տպել "Սարքը %s (%s), RSSI = %d dB" %(dev.addr, dev.addrType, dev.rssi)

CurrentDevAddr = սադրիչ

CurrentDevLoc = SENSOR_LOCATION [մուտք -1]

for (adtype, desc, value) in dev.getScanData ():

տպել " %s = %s" %(նկարագրություն, արժեք)

եթե (desc == "Արտադրող"):

ManuData = արժեք

եթե (ManuData == ""):

տպել «Տվյալներ չկան, վերջ վերծանում»

շարունակել

#տպել ՄանուՏվյալներ

i- ի համար j zip- ում (ManuData [:: 2], ManuData [1:: 2]):

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

#Սկսեք վերծանել Արտադրողի հումքի տվյալները

եթե ((ManuDataHex [0] == 0x85) և (ManuDataHex [1] == 0x00)):

տպել «Գտնվել է վերնագրի բայթ 0x0085»

այլ:

տպել «Վերնագրի բայթ 0x0085 չի գտնվել, վերծանման կանգառ»

շարունակել

#Բաց թողնել մայորը/փոքրը

#Index 5 -ը 0x3c է, նշեք մարտկոցի մակարդակը և կազմաձևեք #

եթե (ManuDataHex [4] == 0x3c):

BatteryLevel = ManuDataHex [5]

ConfigCounter = ManuDataHex [6]

idx = 7

#տպել "TotalLen:" + փող (len (ManuDataHex))

while (idx <len (ManuDataHex)):

#տպել "Idx:" + փող (idx)

#տպել «Տվյալներ.» + վեցանկյուն (ManuDataHex [idx])

եթե (ManuDataHex [idx] == 0x41):

#Acerometer- ի տվյալները

idx += 1

AcceleroType = ManuDataHex [idx]

AcceleroData = ManuDataHex [idx+1]

idx += 2

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

#Peratերմաստիճանի տվյալներ

idx += 1

TempData = ManuDataHex [idx]

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

TempData = TempData * 0.0625

idx += 2

այլ:

idx += 1

տպել «Սարքի հասցե.» + CurrentDevAddr

տպել «Սարքի գտնվելու վայրը.» + CurrentDevLoc

տպել "Մարտկոցի մակարդակը." + փող (BatteryLevel) + "%"

տպել "Config Counter:" + str (ConfigCounter)

տպել "Accelero Data:" + hex (AcceleroType) + "" + hex (AcceleroData)

տպել "Temp Data:" + str (TempData)

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

ReadLoop = Կեղծ

բացառությամբ DecodeErrorException:

անցնել

Քայլ 7: Փորձարկեք Python Script- ը

Սցենարը պետք է գործի արմատով, այնպես որ.

$ sudo python bscan.py Հայտնաբերված սարք ec: 6e: 7e: 10: b1: 92 Սարքի ec: 6e: 7e: 10: b1: 92 (հանրային), RSSI = -80 դԲ դրոշներ = 06 Անավարտ 16 բ ծառայություններ = 0a18 Արտադրող = 850002003c25094102024309016f Վերնագրի բայթ 0x0085 գտնված Սարքի հասցե ՝ ec: 6e: 7e: 10: b1: 92 Սարքի գտնվելու վայրը. Ավտոտնակ Մարտկոցի մակարդակ ՝ 37% Կազմաձևիչ հաշվիչ ՝ 9 Accero Data:

Քայլ 8: Ավելացրեք Python Scrip- ը Crontab- ին

Պիթոնի սցենարը պետք է գործի արմատով, այնպես որ, եթե ցանկանում եք տվյալները ավտոմատ կերպով գրավել, ապա այն պետք է ավելացվի արմատի crontab- ին: Այս օրինակի համար ես սցենարը գործարկում եմ յուրաքանչյուր 20 րոպեն մեկ Օգտագործեք հրամանը.

$ sudo crontab -e

# Խմբագրեք այս ֆայլը ՝ cron- ի կողմից առաջադրվող առաջադրանքները ներկայացնելու համար:

# # Յուրաքանչյուր առաջադրանք պետք է սահմանվի մեկ տողի միջոցով #, որը տարբեր դաշտերով ցույց է տալիս, թե երբ է առաջադրանքը կատարվելու #, և ինչ հրահանգ պետք է կատարել # # Toամանակը որոշելու համար կարող եք տրամադրել կոնկրետ արժեքներ # րոպեի համար (մ), ժամ (ժ), ամսվա օր (dom), ամիս (երկուշաբթի), # և շաբաթվա օր (dow) կամ օգտագործեք '*' այս դաշտերում («ցանկացածի համար»): # # Նշեք, որ առաջադրանքները կսկսվեն հիմնված քրոնի համակարգի # daemon հասկացության վրա ժամանակի և ժամային գոտիների մասին: # # Crontab- ի աշխատանքների ելքը (ներառյալ սխալները) ուղարկվում է # էլ. Փոստի միջոցով այն օգտվողին, որին պատկանում է crontab ֆայլը (եթե այն չի վերահղված): # # Օրինակ, ամեն շաբաթ առավոտյան ժամը 5 -ին կարող եք կատարել ձեր բոլոր օգտվողների հաշիվների կրկնօրինակը ՝ # 0 5 * * 1 tar -zcf /var/backups/home.tgz/home/ # # Լրացուցիչ տեղեկությունների համար տե՛ս crontab (5) և cron (8) # # mh dom mon dow հրաման 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * python /home/pi/bscan.py

Վերջ Պիթոնի սցենարը գործարկվելու է կանոնավոր պարբերականությամբ և արդյունքը վերակոդավորելու է SQL տվյալների բազայում

Քայլ 9. Լրացուցիչ. Կարգավորեք SensorBug- ը `Position Sensing Output- ի համար

Լրացուցիչ. Կարգավորեք SensorBug- ը `Position Sensing Output- ի համար
Լրացուցիչ. Կարգավորեք SensorBug- ը `Position Sensing Output- ի համար
Լրացուցիչ. Կարգավորեք SensorBug- ը Position Sensing Output- ի համար
Լրացուցիչ. Կարգավորեք SensorBug- ը Position Sensing Output- ի համար

Հնարավոր է կարգավորել SensorBug- ը Android- ում ՝ դիրքորոշման ելքի համար: Դիրքի փոփոխման զգայարանների համար, այսպես կոչված Ավտոտնակի դուռ: զգայարան, SensorBug- ը կբացահայտի, արդյոք սարքը կանգնած է կամ հարթ պառկած: Երբ սարքը հարթ է, գրանցված արժեքը 0x20 է: եթե սարքը կանգնած է, արժեքը 0x02 է: Այն չի տարբերվում, եթե X կամ Y դիրքերը վեր են, քանի դեռ Z առանցքը վեր կամ վար չէ: Դա անելու ամենահեշտ ձևը LightBlue հավելվածի օգտագործումն է: SensorBug- ը պետք է հայտնվի սկան ընտրացանկում: Ընտրեք այն սարքը, որը ցանկանում եք կարգավորել, անցեք արագացուցիչի կազմաձևման GATT- ի բնութագրերին UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11

Տես նկարը. Գրեք նոր կազմաձևման տող.

010d3f02020000002d00000002 Կարդացեք հետագծման տողը `գրությունը հաստատելու համար: Սա հնարավորություն է տալիս արագացուցիչը դիրքի զգայացման համար:

Խորհուրդ ենք տալիս: