Агуулгын хүснэгт:

Bluetooth LE ба RaspberryPi -ийн тусламжтайгаар температурыг хянаж, бүртгэх: 9 алхам (зурагтай)
Bluetooth LE ба RaspberryPi -ийн тусламжтайгаар температурыг хянаж, бүртгэх: 9 алхам (зурагтай)

Видео: Bluetooth LE ба RaspberryPi -ийн тусламжтайгаар температурыг хянаж, бүртгэх: 9 алхам (зурагтай)

Видео: Bluetooth LE ба RaspberryPi -ийн тусламжтайгаар температурыг хянаж, бүртгэх: 9 алхам (зурагтай)
Видео: ВЕДЬМА ЗАСТАВИЛА ПОЖАЛЕТЬ ЧТО ЗАШЕЛ В ЕЕ ДОМ / HE WENT ALONE TO THE WITCH'S HOUSE 2024, Долдугаар сарын
Anonim
Bluetooth LE болон RaspberryPi -ийн тусламжтайгаар температурыг хянаж, тэмдэглээрэй
Bluetooth LE болон RaspberryPi -ийн тусламжтайгаар температурыг хянаж, тэмдэглээрэй
Bluetooth LE болон RaspberryPi -ийн тусламжтайгаар температурыг хянаж, тэмдэглээрэй
Bluetooth LE болон RaspberryPi -ийн тусламжтайгаар температурыг хянаж, тэмдэглээрэй

Энэхүү зааварчилгаа нь Blue Radios (BLEHome) болон RaspberryPi 3B-ийн Bluetooth LE мэдрэгчийн алдаатай температурын хяналтын олон зангилааны системийг хэрхэн нэгтгэх тухай юм. маш бага өртөгтэй бөгөөд нэг зоосны үүрэн дээр хэдэн сар ажиллах боломжтой. Миний авсан эдгээр мэдрэгчийн нэг нь Blue Radio -ийн Sensor Bugs гэж нэрлэгддэг төхөөрөмж юм. Амазон дээр ойролцоогоор 25 долларын үнэтэй бөгөөд энэ нь температур мэдрэгч, гэрэл мэдрэгч, аксерометр бүхий Bluetooth LE төхөөрөмж бөгөөд утасгүй холбогдож болох жижиг төхөөрөмжид багтдаг бөгөөд энэ нь Bluetooth LE радиог дэмждэг Raspberry Pi 3B юм..

Алхам 1: Raspberry Pi -ийг тохируулна уу

Эхний алхам бол Raspberry Pi -ийг ажиллуулах явдал юм. Raspberry Pi -ийн вэбсайтын зааврыг дагаж Raspbian -ийг SD карт дээр ачаалж, Raspberry Pi -д оруулаад ачаална уу. Би өөрийн системийг Raspbian Stretch Lite (No GUI) хувилбараар 2017 оны 11 -р сард тохируулж, шаардлагатай бол WiFi -ийг тохируулахыг хүсч байна. цагийн бүсийг UTC -ийн оронд одоогийн цагийн бүс рүү шилжүүлэх. Та дараах тушаалыг өгч болно: $ sudo dpkg-reconfigure tzdataRest of the заавар нь тохиргоог командын шугамын интерфейсээр хийгдсэн гэж үзнэ.

Алхам 2: Raspberry Pi дээр MySQL -ийг тохируулах

Оруулсан бүх өгөгдлийг хадгалахын тулд мэдээллийн баазыг дотооддоо суулгах нь ашигтай байдаг. Raspberry Pi дээр MySQL суулгах нь маш хялбар юм. SQL сервертэй гадуур холбогдохын тулд скриптийг өөрчлөх нь тийм ч хэцүү биш бөгөөд хэрэв та сүлжээнд SQL сервер ашиглахыг хүсвэл энэ алхамыг алгасаж болно. Сүлжээнд олон заавар байдаг тул би үүнийг санал болгож байна: https:// www.stewright.me/2014/06/tutorial-install-…

SQL серверийг суулгасны дараа та MySQL CLI клиентийг ашиглан хэрэглэгч, мэдээллийн сан, хүснэгт үүсгэж болно.

$ sudo mysql -uroot -pFirst, баригдсан өгөгдлийг оруулахын тулд локал хэрэглэгчийг үүсгээрэй:> CREATE USER 'datasrc'@'localhost' IDENTIFYED BY 'datarc000'; Дараа нь мэдээллийн бааз, хүснэгт үүсгээрэй:> CATATE DATABASE SensorBug; Хэрэглэгчийг тохируулах. зөвшөөрөл:> SensorBug дээрх бүх давуу эрхийг олгох.* TO 'datasrc'@'localhost' руу; Одоо мэдээллийн санд шинэ хүснэгт нэмж оруулаарай. Энэ жишээн дээр би дараах баганатай хүснэгтийг нэмж оруулах гэж байна: ОГноо, ЦАГ, ХАЯГ, БАЙРШИЛ, ТЕМПЕРАТУР ба ХУРААНГҮЙ.

  • DATE/TIME - Энэ бол өгөгдлийг бүртгэсэн огноо, цаг юм
  • ХАЯГ - Энэ бол SensorBug -ийн MAC юм
  • БАЙРШИЛ - Мэдрэгч хаана байрлаж байгааг зааж өгөх зориулалттай хүний унших боломжтой мөр
  • ТЕМПЕРАТУР - Энэ бол бүртгэгдсэн температур юм
  • ACCELE - Энэ бол мэдрэгчийн байрлалыг бүртгэхэд шаардлагатай акселерометрийн гаралтын утга юм (хэрэв идэвхжүүлсэн бол)

Үүнийг хийх тушаал нь:> USE SensorBug; > Хүснэгтийн өгөгдлийг үүсгэх (огноо, огноо, цаг, хаяг TINYTEXT, байршил TINYTEXT, температур FLOAT, accele INT); Одоо мэдээллийн сан бэлэн болсон тул sensorBugs -ийг тохируулж болно.

Алхам 3: SensorBugs -ийг тохируулах

Мэдрэгчийн алдаа нь маш цэвэрхэн жижиг төхөөрөмжүүд юм. Харамсалтай нь үйлдвэрлэгч зөвхөн програмчлах зориулалттай IOS програмыг өгсөн. Хэрэв та зөвхөн Андройд төхөөрөмжтэй бол түүнтэй ажиллах боломжтой хэвээр байх болно, эхний алхам бол төхөөрөмжийг утсаар холбоно уу. Би үүнийг RaspberryPi -тай шууд хийж чадах эсэхийг харахыг хичээсэн боловч харамсалтай нь RaspberryPi дээрх Bluetooth LE драйвер нь туршилтын хэвээр байгаа бөгөөд Bluetooth LE төхөөрөмжтэй хослуулахаас урьдчилан сэргийлэхийн тулд алдаанууд агуулсан юм шиг байна. BlueZ драйверын ирээдүйн хувилбар үүнийг засч залруулах боломжтой боловч одоогийн байдлаар SensorBug -ийг RaspberryPi -тай хослуулах боломжгүй байна. Бидэнд хэрэгтэй цорын ганц зүйл бол SensorBug -ийг тохируулах утас юм. Анхдагч байдлаар, SensorBug нь төхөөрөмжтэй хослуулсны дараа температурын өгөгдлийг 1 секундын интервалаар сурталчилж эхлэх болно. Температурын өгөгдлийг авахын тулд энэ нь танд хэрэгтэй зүйл юм. Хэрэв та байрлал эсвэл гэрэл мэдрэгчийг ашиглахаар өргөжүүлэхээр төлөвлөж байгаа бол тохиргооноос илүү төхөөрөмж шаардлагатай болно. Эхлэхийн тулд бид төхөөрөмжийг хослуулж, салгах болно. Энэ нь температурыг хэмжихэд хангалттай байх болно. SensorBug дээрх хоёр товчлуурыг дарж эхлээрэй. Цэнхэр/ногоон LED анивчих бөгөөд энэ нь асаалттай байгааг илтгэнэ. Нэг товчлуурыг дарахад ногоон LED асах ёстой бөгөөд энэ нь асаалттай байгааг илтгэнэ. Хэрэв ногоон LED асахгүй бол хоёр товчлуурыг дарж төхөөрөмжийг дахин асаахыг оролдоорой. Цэнхэр LED анивчих хүртэл товчлууруудын аль нэгийг дарж барина уу. Энэ нь төхөөрөмжийг хос горимд оруулах бөгөөд утасны Bluetooth тохиргооны цэс рүү орж SensorBug төхөөрөмжийг хайна уу. Энэ нь гарч ирмэгц үүнийг төхөөрөмжтэй хослуулахын тулд үүнийг сонгоно уу, одоо SensorBug -ийг асааж, температурын өгөгдлийг сурталчилж байна.

Алхам 4: Bluetooth LE Python боолт суурилуулах

Дараа нь бид Bluetooth LE стектэй ярихын тулд python -ийн номын санг суулгах хэрэгтэй. Зааврыг эндээс авах боломжтой: https://github.com/IanHarvey/bluepy Python 2.7 -ийн хувьд дараах тушаалуудыг оруулахтай адил хялбар юм.

$ sudo apt-get install 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]# скан хийх [ШИНЭ] Төхөөрөмж 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 Үйлдвэрлэгч Өгөгдлийн утга: 0x00 [CHG] Төхөөрөмж EC: FE: 7E: 10: B1: 92 Үйлдвэрлэгчийн өгөгдлийн утга 0x3c [CHG] Төхөөрөмж EC: FE: 7E: 10: B1: 92 Үйлдвэрлэгчийн өгөгдлийн утга: 0x25 [CHG] Төхөөрөмж EC: FE: 7E: 10: B1: 92 Үйлдвэрлэгчийн өгөгдлийн утга: 0x09 [CHG] Төхөөрөмж EC: FE: 7E: 10: B1: 92 Үйлдвэрлэгчийн өгөгдлийн утга: 0x41 [CHG] төхөөрөмж EC: FE: 7E: 10: B1: 92 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 Утга: 0x01 [CHG] Төхөөрөмж EC: FE: 7E: 10: B1: 92 Үйлдвэрлэгч Өгөгдлийн утга: 0x6f

MAC хаягийг бичээрэй, үүнийг хүсээгүй Bluetooth LE төхөөрөмжийг шүүхийн тулд үүнийг питон скриптэд оруулах шаардлагатай болно.

Алхам 6: Python скриптийг нэмнэ үү

Python скриптийн хуулбарыг эндээс авах боломжтой.

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

Үүнтэй ижил файл байна, хуулахдаа догол мөрийг анхаарч үзээрэй.

Түүнчлэн, скан хийх үр дүнгээс олж авсан мэдрэгчийн хаягийг тааруулахын тулд python файл дахь MAC хаягийг шинэчилнэ үү.

# Энэ програм нь үнэгүй програм хангамж юм: та үүнийг дахин тарааж,/эсвэл өөрчилж болно

нийтэлсэн GNU Public Public License -ийн нөхцөлийн дагуу

# Чөлөөт програм хангамжийн сан, Лицензийн 3 -р хувилбар, эсвэл

# (таны сонголтоор) дараагийн хувилбар.

#

# Энэ програмыг хэрэгтэй болно гэж найдаж тараасан.

# гэхдээ ямар ч баталгаагүйгээр; гэсэн баталгаагүй баталгаа ч байхгүй

ОНЦГОЙ ЗОРИУЛАЛТЫН # ХУДАЛДАА БҮТЭЭХ БАЙДАЛ. -Ыг үзнэ үү

Дэлгэрэнгүй мэдээллийг # GNU Public Public License.

#

# Та GNU Public Public License -ийн хуулбарыг авах ёстой байсан

# энэ програмын хамт. Үгүй бол үзнэ үү.

# bscan.py - Энгийн bluetooth LE сканнер ба мэдээлэл задлагч

bluepy.btle импортлох сканнераас, DefaultDelegate

импортлох хугацаа

pymysql импортлох

импортын бүтэц

хостын нэр = 'localhost'

хэрэглэгчийн нэр = "өгөгдлийн сан"

нууц үг = 'datarc000'

мэдээллийн сан = 'SensorBug'

#Лесканаас мэдрэгчийн MAC хаягийг оруулна уу

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

SENSOR_LOCATION = ["Гараж", "Гадна"]

DecodeErrorException анги (онцгой тохиолдол):

def _init _ (өөрөө, үнэ цэнэ):

self.value = утга

def _str _ (өөрөө):

repr буцах (өөрийгөө үнэлэх)

ScanDelegate анги (DefaultDelegate):

def _init _ (өөрөө):

DefaultDelegate._ init _ (өөрөө)

def handleDiscovery (өөрөө, хөгжүүлэгч, isNewDev, isNewData):

хэрэв isNewDev:

"Нээсэн төхөөрөмж" -ийг хэвлэх, dev.addr

elif isNewData:

"Шинэ мэдээлэл хүлээн авсан" гэж хэвлэх, dev.addr

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

#blesensor хүснэгт бол огноо, цаг, addr, байршил, temp, accero юм

cur = холбогч курсор ()

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

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

холболт хийх ()

сканнер = Сканнер (). withDelegate (ScanDelegate ())

myConnection = pymysql.connect (хост = хостын нэр, хэрэглэгчийн = хэрэглэгчийн нэр, passwd = нууц үг, db = мэдээллийн сан)

ManuDataHex =

ReadLoop = Үнэн

оролдоно уу:

байхад (ReadLoop):

төхөөрөмжүүд = сканнер.скан (2.0)

ManuData = ""

хөгжүүлэгч төхөөрөмжүүдийн хувьд:

оруулга = 0

AcceroData = 0

AcceroType = 0

TempData = 0

SENSOR_ADDRESS дахь saddr -ийн хувьд:

оруулга += 1

хэрэв (dev.addr == saddr):

"Device %s (%s), RSSI = %d dB" %(dev.addr, dev.addrType, dev.rssi) хэвлэх

CurrentDevAddr = saddr

CurrentDevLoc = SENSOR_LOCATION [оруулга-1]

dev.getScanData () дахь (adtype, desc, value) хувьд:

"%s = %s" %(хэвлэх, утга) хэвлэх

if (desc == "Үйлдвэрлэгч"):

ManuData = утга

хэрэв (ManuData == ""):

"Өгөгдөл аваагүй, декодчилолыг дуусгах" гэж хэвлэх

үргэлжлүүлэх

#ManuData хэвлэх

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

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

#Түүхий Үйлдвэрлэгчийн өгөгдлийг декодлож эхлээрэй

хэрэв ((ManuDataHex [0] == 0x85) ба (ManuDataHex [1] == 0x00)):

"Толгой байт 0x0085 олдсон" гэж хэвлэх

өөр:

хэвлэх "Толгой байт 0x0085 олдсонгүй, код тайлах зогсолт"

үргэлжлүүлэх

#Major/Minor алгасах

#Index 5 нь 0x3c бөгөөд батерейны түвшин, тохиргоог заана уу #

хэрэв (ManuDataHex [4] == 0x3c):

BatteryLevel = ManuDataHex [5]

ConfigCounter = ManuDataHex [6]

idx = 7

#хэвлэх "TotalLen:" + str (len (ManuDataHex))

байхад (idx <len (ManuDataHex)):

#хэвлэх "Idx:" + str (idx)

#хэвлэх "Өгөгдөл:" + зургаан өнцөгт (ManuDataHex [idx])

хэрэв (ManuDataHex [idx] == 0x41):

#Аксерометрийн өгөгдөл

idx += 1

AcceleroType = ManuDataHex [idx]

AcceleroData = ManuDataHex [idx+1]

idx += 2

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

#Температурын өгөгдөл

idx += 1

TempData = ManuDataHex [idx]

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

TempData = TempData * 0.0625

idx += 2

өөр:

idx += 1

"Төхөөрөмжийн хаяг:" + CurrentDevAddr хэвлэх

"Төхөөрөмжийн байршил:" + CurrentDevLoc хэвлэх

"Батерейны түвшин:" + str (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 скриптийг туршиж үзээрэй

Скриптийг root хэлбэрээр ажиллуулах ёстой, ингэснээр:

$ sudo python bscan.py Нээлт хийсэн төхөөрөмж ec: 6e: 7e: 10: b1: 92 Төхөөрөмж ec: 6e: 7e: 10: b1: 92 (нийтийн), RSSI = -80 dB Flags = 06 Бүрэн бус 16b үйлчилгээ = 0a18 Үйлдвэрлэгч = 850002003c25094102024309016f Толгой байт 0x0085 олдсон Төхөөрөмжийн хаяг: ec: 6e: 7e: 10: b1: 92 Төхөөрөмжийн байршил: Гаражийн батерейны түвшин: 37% Config Counter: 9 Accero Data: 0x2 0x2 Temp Data: 16.5625

Алхам 8: Python скриптийг Crontab дээр нэмнэ үү

Питон скриптийг root дээр ажиллуулах ёстой, тиймээс хэрэв та өгөгдлийг автоматаар авахыг хүсвэл үүнийг root crontab дээр нэмэх шаардлагатай болно. Энэ жишээнд би скриптийг 20 минут тутамд ажиллуулдаг.

$ sudo crontab -e

# Энэ файлыг засварлаж cron -ээр гүйцэтгэх ажлуудыг танилцуулаарай.

# # Ажиллуулах даалгавар бүрийг нэг мөрөөр тодорхойлох ёстой бөгөөд даалгаврыг хэзээ гүйцэтгэх вэ, мөн # # даалгаварт ямар командыг ажиллуулахыг зааж өгөх ёстой.), цаг (h), сарын өдөр (дом), сар (сар), # ба долоо хоногийн өдөр (dow) эсвэл эдгээр талбарт '*' ашиглана уу ('дурын' хувьд). # # Даалгаврууд эхлэх болно гэдгийг анхаарна уу. cron -ийн системд суурилсан # демоны цаг ба цагийн бүсийн тухай ойлголт. # # 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 -ийг байрлал мэдрэх гаралтын хувьд тохируулна уу

Нэмэлт: SensorBug -ийг байрлал мэдрэх гаралтын хувьд тохируулна уу
Нэмэлт: SensorBug -ийг байрлал мэдрэх гаралтын хувьд тохируулна уу
Нэмэлт: SensorBug -ийг байрлал мэдрэх гаралтын хувьд тохируулна уу
Нэмэлт: SensorBug -ийг байрлал мэдрэх гаралтын хувьд тохируулна уу

Андройд дээрх SensorBug -ийг байршил мэдрэх гаралтын хувьд тохируулах боломжтой Гаражийн хаалга гэж нэрлэгддэг байрлалын өөрчлөлтийг мэдрэхийн тулд SensorBug нь төхөөрөмж босоо байрлалтай эсвэл хэвтэж байгаа эсэхийг илрүүлэх болно. Хэрэв төхөөрөмж босоо байрлалд байвал 0x02 утга нь X тэнхлэг нь дээш эсвэл доошоо байрлаагүй тохиолдолд X эсвэл Y байрлал дээш байвал ялгаагүй бөгөөд үүнийг хийх хамгийн хялбар арга бол LightBlue програмыг ашиглах явдал юм. SensorBug нь хайлтын цэсэнд гарч ирэх бөгөөд тохируулах төхөөрөмжөө сонгоод UUID Accelerometer тохиргооны GATT шинж чанарууд руу очно уу: 9DC84838-7619-4F09-A1CE-DDCF63225B11

Зургийг үзнэ үү: Шинэ тохиргооны мөр бичих:

010d3f02020000002d00000002 Бичлэгийг баталгаажуулахын тулд тохиргооны мөрийг буцааж уншина уу.

Зөвлөмж болгож буй: