Mündəricat:
- Addım 1: Raspberry Pi qurun
- Addım 2: Raspberry Pi -də MySQL qurmaq
- Addım 3: SensorBugs qurmaq
- Addım 4: Bluetooth LE Python Sarıcı qurmaq
- Addım 5: SensorBugun ünvanını tarayın və tapın
- Addım 6: Python Script əlavə edin
- Addım 7: Python Scriptini sınayın
- Addım 8: Python Scripti Crontab -a əlavə edin
- Addım 9: Əlavə: SensorBug -u Mövqe Algılama Çıxışı üçün konfiqurasiya edin
Video: Bluetooth LE və RaspberryPi ilə İstiliyi İzləyin və Qeyd edin: 9 Adım (Şəkillərlə)
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:46
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
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ə:
BLYNK ESP8266 & DHT11 ilə İnternetdə Otaq İstiliyi: 5 Addım (Şəkillərlə)
BLYNK ESP8266 & DHT11 ilə İnternetdə Otaq İstiliyi: Salam uşaqlar, bu gün dünyanın hər yerindən otağımızı izləmək üçün istifadə edə biləcəyimiz bir otaq temperaturu monitoru hazırlayacağıq və bunu etmək üçün BLYNK IoT boşqab formasından istifadə edəcəyik. DHT11 otaq temperaturunu oxumaq üçün qəbul etmək üçün ESP8266 istifadə edəcəyik
ESP8266 ilə COVID-19 Yoluxmasını İzləyin: 11 Addım (Şəkillərlə)
ESP8266 tərəfindən COVID-19 Xəstəliyini İzləyin: Bu kiçik gadget, koronavirusun yayılması və ölkənizdəki vəziyyət haqqında məlumatlı olmağınıza kömək edəcək. Bu, koronavirus (COVİD-19) yoluxma, ölüm və sağalmış insanların real vaxt məlumatlarını əks etdirən IoT əsaslı bir layihədir
ARUPI - Soundscape Ekoloqları üçün Aşağı Qiymətli Avtomatlaşdırılmış Qeyd Bölməsi/Avtonom Qeyd Bölməsi (ARU): 8 Addım (Şəkillərlə)
ARUPI - Soundscape Ekoloqları üçün Aşağı Qiymətli Avtomatlaşdırılmış Qeyd Bölməsi/Avtonom Qeyd Bölməsi (ARU): Bu təlimat Anthony Turner tərəfindən yazılmışdır. Layihə, Kent Universiteti Kompüter Məktəbindəki Sheddən çox kömək alaraq hazırlanmışdır (cənab Daniel Knox böyük bir kömək oldu!)
E -poçt, SMS və Pushbullet Xəbərdarlığı ilə Isıtma Yağı Tank Qallonlarını İzləyin: 9 Addım (Şəkillərlə)
E -poçt, SMS və Pushbullet Xəbərdarlığı ilə Isıtma Yağı Tank Qallonlarını izləyin: TƏHLÜKƏSİZLİK MƏLUMATI: Hər kəsin " bunun qurulması/quraşdırılması təhlükəsizdirmi " - Mən bunu geribildirim/təhlükəsizlik mülahizələri üçün 2 fərqli neft şirkətinə apardım və bunu yanğınsöndürmə idarəsinin Yanğından Mühafizə Departamentinin köməkçisi C
Bluetooth vasitəsi ilə SD Kart Modulu ilə Arduinodan Android Telefonuna İstilik və Rütubət Məlumatlarını Qeyd edən: 5 addım
Bluetooth vasitəsi ilə SD Kart Modulu ilə Arduinodan Android Telefona qədər İstilik və Rütubət Məlumatlarını Qeyd edən: Hamıya Salam, bu mənim ilk təlimatımdır, inşallah istehsalçı cəmiyyətinə kömək etdiyim kimi kömək edərəm. Çox vaxt layihələrimizdə sensorlar istifadə edirik, ancaq məlumatları toplamaq, saxlamaq və dərhal Telefonlara və ya digər cihazlara ötürmək üçün bir yol tapırıq