Mündəricat:

Bluetooth LE və RaspberryPi ilə İstiliyi İzləyin və Qeyd edin: 9 Adım (Şəkillərlə)
Bluetooth LE və RaspberryPi ilə İstiliyi İzləyin və Qeyd edin: 9 Adım (Şəkillərlə)

Video: Bluetooth LE və RaspberryPi ilə İstiliyi İzləyin və Qeyd edin: 9 Adım (Şəkillərlə)

Video: Bluetooth LE və RaspberryPi ilə İstiliyi İzləyin və Qeyd edin: 9 Adım (Şəkillərlə)
Video: ESP32 Bluetooth ilə MAX6675 Termokupldan istifadə 2024, Iyul
Anonim
Bluetooth LE və RaspberryPi ilə İstiliyi izləyin və qeyd edin
Bluetooth LE və RaspberryPi ilə İstiliyi izləyin və qeyd edin
Bluetooth LE və RaspberryPi ilə İstiliyi izləyin və qeyd edin
Bluetooth LE və RaspberryPi ilə İstiliyi izləyin və qeyd edin

Bu təlimat, Blue Radios (BLEHome) və RaspberryPi 3B-dən Bluetooth LE sensoru xətası ilə çox düyünlü bir temperatur izləmə sisteminin necə qurulacağından bəhs edir. çox aşağı qiymətə və aylar ərzində tək bir sikkə hüceyrəsində işləyə bilər. Aldığım bu sensorlardan biri də Mavi Radodan Sensor Bugs adlanır. Amazon -da təxminən 25 dollara başa gələn, temperatur sensoru, işıq sensoru və akkumulyatoru olan Bluetooth LE cihazıdır və hamısı simsiz əlaqə qura bilən kiçik bir qurğuda qurulur..

Addım 1: Raspberry Pi qurun

İlk addım işləyən bir Raspberry Pi qurğusu əldə etməkdir. Raspberry Pi -nin veb saytındakı təlimatları izləyin, Raspbian -ı SD karta yükləyin, Raspberry Pi -yə daxil edin və yükləyin. Sistemimi Raspbian Stretch Lite (No GUI) versiyası ilə Nov 2017 -də qururam. Lazım gələrsə WiFi qurun saat dilimi UTC yerinə cari saat diliminə. Bunu əmr olsa da edə bilərsiniz: Təlimatın $ sudo dpkg-reconfigure tzdataRest, quraşdırmanın əmr satırı interfeysi vasitəsilə edildiyini güman edir.

Addım 2: Raspberry Pi -də MySQL qurmaq

Əldə olunan bütün məlumatları saxlamaq üçün yerli olaraq bir verilənlər bazasının quraşdırılması faydalıdır. Raspberry Pi -də MySQL qurmaq çox asandır. Bir SQL serverinə xaricdən qoşulmaq üçün skriptin dəyişdirilməsi də çətin deyil, şəbəkədə bir SQL serverindən istifadə etmək istəyirsinizsə bu addımı atlaya bilərsiniz. Şəbəkədə bir çox təlimat var, bunu təklif edirəm: https:// www.stewright.me/2014/06/tutorial-install-…

SQL serveri qurulduqdan sonra istifadəçi, verilənlər bazası və cədvəl yaratmaq üçün MySQL CLI müştəri istifadə edə bilərsiniz. MySQL CLI -ə daxil olmaq üçün əmrdən istifadə edin:

$ sudo mysql -uroot -pFirst, ələ keçirilən məlumatları daxil etmək üçün yerli bir istifadəçi yaradın:> CREATE USER 'datasrc'@'localhost' IDSIFEDED By 'datasrc000'; Sonra, bir verilənlər bazası və cədvəl yaradın:> CORATE DATABASE SensorBug; İstifadəçinin qurulması icazə:> SensorBug -da BÜTÜN İSTİFADƏLƏR VERİN.* 'datarc'@'localhost' a; İndi verilənlər bazasına yeni bir cədvəl əlavə edin. Bu nümunə üçün, aşağıdakı sütunları olan bir cədvəl əlavə edəcəyəm: TARİX, ZAMAN, ADRES, MƏKAN, SICAKLIQ və ACCEROMETER

  • TARİX/ZAMAN - Bu, məlumatların qeydə alındığı tarix və vaxtdır
  • ADRES - Mesajın alındığı SensorBugun MAC -ıdır
  • YER - Sensorun harada yerləşdiyini göstərmək üçün insan tərəfindən oxunan bir sim
  • TEMPERATURE - Bu qeydə alınan temperaturdur
  • ACCELE - Sensor mövqeyini qeyd etmək üçün faydalı olan akselerometr çıxışının dəyəridir (aktivdirsə)

Bunu edən əmr:> SensorBug istifadə edin; > CƏDVƏLİ məlumatlar yaradın (tarix TARİX, VAXT, ünvan TINYTEXT, yer TINYTEXT, temperatur FLOAT, accele INT); İndi verilənlər bazası hazırdır, sensorBugs qurmağa davam edə bilərik.

Addım 3: SensorBugs qurmaq

Sensor səhvləri olduqca səliqəli kiçik qurğulardır. Təəssüf ki, istehsalçı proqramlaşdırmaq üçün yalnız IOS tətbiqini təmin etdi. Yalnız bir Android cihazınız varsa, onunla işləmək hələ də mümkündür. İlk addım cihazı telefonla birləşdirin. Cihazı cütləşdirmədən SensorBug məlumatları reklam etməyəcək. Bunu birbaşa RaspberryPi ilə edə biləcəyimi görməyə çalışdım, təəssüf ki, RaspberryPi üzərindəki Bluetooth LE sürücüsü hələ də eksperimentaldır və Bluetooth LE cihazları ilə cütləşməsinin qarşısını almaq üçün səhvlər var. BlueZ sürücüsünün gələcək versiyası bunu düzəldə bilər, lakin hazırkı yazı kimi, SensorBug -u RaspberryPi ilə birləşdirmək üçün heç bir yol yoxdur. Xoşbəxtlikdən, reklam edilən məlumatları çəkmək üçün cihazı cütləşdirməyimizə ehtiyac yoxdur. Ehtiyac duyduğumuz tək şey SensorBug -u konfiqurasiya etmək üçün telefondur. Varsayılan olaraq, SensorBug, bir cihazla qoşulduqdan sonra temperatur məlumatlarını 1s aralığında reklam etməyə başlayacaq. İstilik məlumatlarını tutmaq üçün lazım olan budur. Mövqe və ya işıq sensoru istifadə etmək üçün genişləndirməyi planlaşdırırsınızsa, konfiqurasiyadan daha çox cihaza ehtiyacınız olacaq. Başlamaq üçün cihazı cütləşdirəcəyik və əlaqəni kəsəcəyik. SensorBug -un hər iki düyməsinə basaraq başlayın. Mavi/yaşıl LED yanıb -sönəcək, bu da onun açıldığını göstərir. Düymələrdən birini basın, yaşıl LED yanmalıdır, gücün açıq olduğunu göstərir. Yaşıl LED yanmırsa, cihazı yenidən açmağa çalışmaq üçün hər iki düyməyə basın. Mavi LED yanıb -sönənə qədər düymələrdən birini basıb saxlayın. Bu, cihazı cüt rejiminə keçirəcək. Telefonun Bluetooth konfiqurasiya menyusuna daxil olun və SensorBug cihazını axtarın. Göründükdən sonra cihazla cütləşdirmək üçün seçin. Bu, indi SensorBug -a enerji verilir və temperatur məlumatlarını reklam edir.

Addım 4: Bluetooth LE Python Sarıcı qurmaq

Python üçün Bluetooth LE yığını ilə danışmaq üçün kitabxananı qurmalıyıq. Təlimatı burada tapa bilərsiniz: https://github.com/IanHarvey/bluepy Python 2.7 üçün aşağıdakı əmrləri daxil etmək asandır:

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

Addım 5: SensorBugun ünvanını tarayın və tapın

SensorBug MAC ünvanını öyrənmək üçün bu əmri istifadə edin: $ sudo hcitool lescan Aşağıdakı kimi çıxış görməlisiniz:

EC: FE: 7E: 10: B1: 92 (naməlum) Ətrafınızda çoxlu bluetooth LE cihazı varsa, hansından danışdığınızı öyrənmək çətin ola bilər. Daha ətraflı məlumat verən bluetoothctl cəhd edə bilərsiniz:

$ sudo bluetoothctl [bluetooth]# tarama [YENİ] Cihaz EC: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] Cihaz EC: FE: 7E: 10: B1: 92 İstehsalçı Məlumat Açarı: 0x0085 [CHG] Cihaz EC: FE: 7E: 10: B1: 92 İstehsalçı Məlumat Dəyəri: 0x02 [CHG] Cihaz EC: FE: 7E: 10: B1: 92 İstehsalçı Məlumat Dəyəri: 0x00 [CHG] Cihaz EC: FE: 7E: 10: B1: 92 İstehsalçı Məlumat Dəyəri: 0x3c [CHG] Cihazı EC: FE: 7E: 10: B1: 92 İstehsalçı Məlumat Dəyəri: 0x25 [CHG] Cihaz EC: FE: 7E: 10: B1: 92 İstehsalçı Məlumat Dəyəri: 0x09 [CHG] Cihaz EC: FE: 7E: 10: B1: 92 İstehsalçı Veri Dəyəri: 0x41 [CHG] Cihaz EC: FE: 7E: 10: B1: 92 İstehsalçı Məlumat Dəyəri: 0x02 [CHG] Cihaz EC: FE: 7E: 10: B1: 92 İstehsalçı Veri Dəyəri: 0x02 [CHG] Cihazı EC: FE: 7E: 10: B1: 92 İstehsalçı Məlumat Dəyəri: 0x43 [CHG] Cihaz EC: FE: 7E: 10: B1: 92 ManufacturerData Dəyər: 0x0b [CHG] Cihaz EC: FE: 7E: 10: B1: 92 ManufacturerData Dəyər: 0x01 [CHG] Cihaz EC: FE: 7E: 10: B1: 92 İstehsalçı Məlumat Dəyəri: 0x6f

İstenmeyen Bluetooth LE cihazlarını süzmək üçün MAC ünvanını qeyd edin, bu python skriptinə daxil edilməlidir.

Addım 6: Python Script əlavə edin

Python skriptinin bir nüsxəsi mövcuddur:

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

Budur eyni fayl, kopyalayarkən girintiyə diqqət yetirin:

Ayrıca, tarama nəticəsindən alınan sensor ünvanına uyğun olaraq python faylındakı MAC ünvanını yeniləyin.

# Bu proqram pulsuz bir proqramdır: onu yenidən paylaya və/və ya dəyişdirə bilərsiniz

tərəfindən nəşr olunduğu kimi GNU Ümumi İctimai Lisenziyasının şərtləri daxilində #

# Pulsuz Proqram Vəqfi, ya Lisenziyanın 3 -cü versiyası, ya da

# (seçiminizə görə) hər hansı bir sonrakı versiya.

#

# Bu proqram faydalı olacağı ümidi ilə paylanır

# amma heç bir zəmanət olmadan; hətta nəzərdə tutulan zəmanət olmadan

Xüsusi Məqsəd Üçün # Ticarət və ya Uyğunluq. Baxın

Ətraflı məlumat üçün # GNU General Public License.

#

# GNU Ümumi İctimai Lisenziyasının surətini almalı idin

# bu proqramla birlikdə. Əgər yoxsa, bax.

# bscan.py - Sadə bluetooth LE skaneri və məlumat çıxarıcı

bluepy.btle idxal Scanner, DefaultDelegate

idxal vaxtı

pymysql idxal edin

idxal strukturu

ana adı = 'localhost'

istifadəçi adı = 'datarc'

şifrə = 'datarc000'

verilənlər bazası = 'SensorBug'

#Lescandan sensorun MAC ünvanını daxil edin

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

SENSOR_LOCATION = ["Qaraj", "Xarici"]

sinif DecodeErrorException (İstisna):

def _init _ (özünü, dəyəri):

self.value = dəyər

def _str _ (özünü):

geri qaytarma (özünü dəyər)

sinif ScanDelegate (DefaultDelegate):

def _init _ (özünü):

DefaultDelegate._ init _ (özünü)

def handleDiscovery (özünü, dev, isNewDev, isNewData):

əgər isNewDev:

çap "Kəşf edilmiş cihaz", dev.addr

elif isNewData:

çap "yeni məlumatlar alındı", dev.addr

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

#blesensor cədvəli tarix, vaxt, addr, yer, temp, accerodur

cur = birləşdirici kursor ()

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

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

əlaqələndirin ()

tarayıcı = Scanner (). withDelegate (ScanDelegate ())

myConnection = pymysql.connect (host = hostname, user = user name, passwd = password, db = database)

ManuDataHex =

ReadLoop = Doğru

cəhd edin:

isə (ReadLoop):

cihazlar = scanner.scan (2.0)

ManuData = ""

cihazların inkişafı üçün:

giriş = 0

AcceroData = 0

AcceroType = 0

TempData = 0

SENSOR_ADDRESS -də saddr üçün:

giriş += 1

əgər (dev.addr == saddr):

çap "Cihaz %s (%s), RSSI = %d dB" %(dev.addr, dev.addrType, dev.rssi)

CurrentDevAddr = saddr

CurrentDevLoc = SENSOR_LOCATION [giriş-1]

dev.getScanData () da (adtype, desc, value) üçün:

"%s = %s" %çap et (azalma, dəyər)

əgər (eniş == "İstehsalçı"):

ManuData = dəyər

əgər (ManuData == ""):

çap et "Məlumat alınmadı, kod deşifrini bitirin"

davam et

#çap ManuData

i, j in zip üçün (ManuData [:: 2], ManuData [1:: 2]):

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

#Xam İstehsalçı məlumatlarının deşifrinə başlayın

əgər ((ManuDataHex [0] == 0x85) və (ManuDataHex [1] == 0x00)):

çap "0x0085 başlıq baytı tapıldı"

başqa:

çap et "Başlıq baytı 0x0085 tapılmadı, kod deşifrini dayandırın"

davam et

#Böyük/Kiçik atlayın

#Index 5 0x3c -dir, batareya səviyyəsini və konfiqurasiyasını göstərin #

əgər (ManuDataHex [4] == 0x3c):

BatteryLevel = ManuDataHex [5]

ConfigCounter = ManuDataHex [6]

idx = 7

#çap "TotalLen:" + str (len (ManuDataHex))

while (idx <len (ManuDataHex)):

#çap "Idx:" + str (idx)

#print "Data:" + hex (ManuDataHex [idx])

əgər (ManuDataHex [idx] == 0x41):

#Ekserometr məlumatları

idx += 1

AcceleroType = ManuDataHex [idx]

AcceleroData = ManuDataHex [idx+1]

idx += 2

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

#İstilik məlumatları

idx += 1

TempData = ManuDataHex [idx]

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

TempData = TempData * 0.0625

idx += 2

başqa:

idx += 1

"Cihaz Ünvanı:" + CurrentDevAddr

"Cihaz yeri:" + CurrentDevLoc yazdırın

"Batareya Səviyyə:" + str (BatteryLevel) + "%" çap edin

çap "Config Counter:" + str (ConfigCounter)

çap "Accelero Data:" + hex (AcceleroType) + "" + hex (AcceleroData)

çap "Temp Data:" + str (TempData)

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

ReadLoop = Yanlış

DecodeErrorException istisna olmaqla:

keçmək

Addım 7: Python Scriptini sınayın

Skript kökündən işləməlidir, belə ki:

$ sudo python bscan.pyKəşf edilmiş cihaz ec: 6e: 7e: 10: b1: 92 Cihaz ec: 6e: 7e: 10: b1: 92 (ictimai), RSSI = -80 dB Bayraqlar = 06 Yarımçıq 16b Xidmətlər = 0a18 İstehsalçı = 850002003c25094102024309016f Başlıq baytı 0x0085 tapıldı Cihaz Ünvanı: ec: 6e: 7e: 10: b1: 92 Cihazın Yeri: Qaraj Batareyasının Səviyyə: 37% Konfiqurasiya Sayacı: 9 Accero Məlumatı: 0x2 0x2 Temp Məlumatı: 16.5625

Addım 8: Python Scripti Crontab -a əlavə edin

Python skriptinin kök sistemində işləməsi lazımdır, buna görə də məlumatları avtomatik olaraq ələ keçirmək istəyirsinizsə, kökün crontabına əlavə olunmalıdır. Bu nümunə üçün hər 20 dəqiqədə bir skript işlədərəm Komut istifadə edin:

$ sudo crontab -e

# Cron tərəfindən idarə ediləcək vəzifələri təqdim etmək üçün bu faylı redaktə edin.

# # Çalışdırılacaq hər bir tapşırıq tək bir sətirlə təyin olunmalıdır # tapşırığın nə vaxt işlədiləcəyini və # # tapşırıq üçün hansı əmrin işlədiləcəyini göstərərək # dəqiqəyə dəqiq dəyərlər verə bilərsiniz (m), saat (h), ay günü (dom), ay (mon), # və həftənin günü (dow) və ya bu sahələrdə '*' istifadə edin ('hər hansı bir' üçün). # # Tapşırıqların başlayacağına diqqət yetirin cron sistem # dayonun zaman və saat qurşağı anlayışına əsaslanır. # # Crontab işlərinin çıxışı (səhvlər daxil olmaqla) crontab faylının aid olduğu istifadəçiyə # e -poçt vasitəsilə göndərilir (yönləndirilmədiyi təqdirdə). # # Məsələn, hər həftə # 5 -də bütün istifadəçi hesablarınızın ehtiyat nüsxəsini # ilə işlədə bilərsiniz: # 0 5 * * 1 tar -zcf /var/backups/home.tgz/home/ # # Ətraflı məlumat üçün baxın crontab (5) və cron (8) manuel səhifələri # # mh dom mon dow əmri 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * python /home/pi/bscan.py

Bu belədir. Python skripti müntəzəm olaraq işləyəcək və çıxışı SQL verilənlər bazasına kodlaşdıracaq

Addım 9: Əlavə: SensorBug -u Mövqe Algılama Çıxışı üçün konfiqurasiya edin

Əlavə: Mövqe Algılama Çıxışı üçün SensorBug -u konfiqurasiya edin
Əlavə: Mövqe Algılama Çıxışı üçün SensorBug -u konfiqurasiya edin
Əlavə: Mövqe Algılama Çıxışı üçün SensorBug -u konfiqurasiya edin
Əlavə: Mövqe Algılama Çıxışı üçün SensorBug -u konfiqurasiya edin

Mövqe algılama çıxışı üçün Android -də SensorBug -u konfiqurasiya etmək mümkündür Qaraj qapısı adlanan mövqe dəyişikliyi algılayıcısı üçün SensorBug cihazın dik vəziyyətdə olduğunu və ya düz uzandığını təyin edəcək. Cihaz düz olduqda qeyd olunan dəyər 0x20 -dir. cihaz dik vəziyyətdədirsə, 0x02 dəyəridir, Z oxu yuxarı və ya aşağı olmadıqca, X və ya Y mövqeyi yuxarıdırsa fərqlənmir. Bunun ən asan yolu LightBlue Tətbiqindən istifadə etməkdir. SensorBug tarama menyusunda görünməlidir. Konfiqurasiya etmək istədiyiniz cihazı seçin, UUID Accelerometer konfiqurasiyası üçün GATT xüsusiyyətlərinə keçin: 9DC84838-7619-4F09-A1CE-DDCF63225B11

Şəkilə baxın: Yeni bir konfiqurasiya sətri yazın:

010d3f02020000002d00000002Yazını təsdiqləmək üçün konfiqurasiya simini geri oxuyun.

Tövsiyə: