Mundarija:
- 1 -qadam: Raspberry Pi -ni o'rnating
- 2 -qadam: Raspberry Pi -da MySQL -ni o'rnatish
- 3 -qadam: SensorBugs -ni o'rnatish
- 4 -qadam: Bluetooth LE Python o'rash moslamasini o'rnatish
- 5 -qadam: SensorBug manzilini skanerlang va toping
- 6 -qadam: Python skriptini qo'shing
- 7 -qadam: Python skriptini sinab ko'ring
- 8 -qadam: Python skriptini Crontab -ga qo'shing
- 9 -qadam: Qo'shimcha: SensorBug -ni joylashishni aniqlash chiqishi uchun sozlang
Video: Bluetooth LE va RaspberryPi yordamida haroratni kuzatish va yozib olish: 9 qadam (rasmlar bilan)
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:25
Bluetooth LE standarti ishlab chiqilgani tufayli Blue LE (BLEHome) va RaspberryPi 3B Bluetooth LE sensori bilan ko'p tugunli haroratni nazorat qilish tizimini qanday o'rnatish kerakligi haqida ma'lumot berildi, hozirda bozorda kam quvvatli simsiz sensorlar mavjud. juda arzon narxda va bir vaqtning o'zida bir tanga katakchada ishlashi mumkin. Men olgan sensorlarimdan biri Blue Radio -dan Sensor Bugs deb nomlangan. Amazonda taxminan 25 dollar turadi, bu harorat sensori, yorug'lik sensori va akserometrli Bluetooth LE qurilmasi bo'lib, u simsiz aloqada bo'ladigan kichik qurilmaga aylanadi..
1 -qadam: Raspberry Pi -ni o'rnating
Birinchi qadam - Raspberry Pi -ni ishlaydigan sozlash. Raspberry Pi veb -saytidagi ko'rsatmalarni bajaring, Raspbian -ni SD -kartaga yuklang, Raspberry Pi -ga joylashtiring va uni ishga tushiring. Men o'z tizimimni Raspbian Stretch Lite (GUI yo'q) versiyasi bilan 2017 yil noyabrda sozlayman. Agar kerak bo'lsa, Wi -Fi -ni o'rnating. vaqt zonasi UTC o'rniga joriy vaqt mintaqasiga. Siz buni buyruq yordamida qilishingiz mumkin: $ sudo dpkg-reconfigure tzdataRest buyrug'i, sozlash buyruq qatori interfeysi orqali amalga oshirilgan deb hisoblaydi.
2 -qadam: Raspberry Pi -da MySQL -ni o'rnatish
Barcha olingan ma'lumotlarni saqlash uchun mahalliy ma'lumotlar bazasini o'rnatish foydali bo'ladi. MySQL -ni Raspberry Pi -ga o'rnatish juda oson. SQL serveriga tashqi tomondan ulanish uchun skriptni o'zgartirish ham qiyin emas, agar siz tarmoqdagi SQL serveridan foydalanmoqchi bo'lsangiz, bu bosqichni o'tkazib yuborishingiz mumkin. Tarmoqda ko'plab ko'rsatmalar mavjud, men buni taklif qilaman: https:// www.stewright.me/2014/06/tutorial-install-…
SQL serveri o'rnatilgandan so'ng, foydalanuvchi, ma'lumotlar bazasi va jadval yaratish uchun MySQL CLI mijozidan foydalanishingiz mumkin. MySQL CLI -ga kirish uchun buyruqdan foydalaning:
$ sudo mysql -uroot -pFirst, olingan ma'lumotlarni kiritish uchun mahalliy foydalanuvchi yarating:> CREATE USER 'datasrc'@'localhost' IDRIFYED BY 'datarc000'; Keyin, ma'lumotlar bazasi va jadval yarating:> CREATE DATABASE SensorBug; Foydalanuvchini sozlash ruxsat:> SensorBug -dagi barcha imtiyozlarni berish.* TO 'datasrc'@'localhost' ga; Endi ma'lumotlar bazasiga yangi jadval qo'shing. Bu misol uchun men quyidagi ustunlar bilan jadval qo'shmoqchiman: DATE, TIME, MANZIL, JOY, TEMPERATURA va ACCEROMETER
- DATE/TIME - Bu ma'lumotlar yozilgan sana va vaqt
- MANZIL - bu SensorBug MAC -dan xabar olinadi
- JOYLASH - Sensor qaerda joylashganligini ko'rsatish uchun odam o'qiy oladigan satr
- TEMPERATURA - Bu yozilgan harorat
- ACCELE - bu sensorlar holatini yozib olish uchun foydali bo'lgan akselerometr chiqishining qiymati.
Buni bajaradigan buyruq:> USS SensorBug; > JADVAL ma'lumotlarini yarating (sana DATE, vaqt TIME, manzil TINYTEXT, joylashuvi TINYTEXT, harorat FLOAT, accele INT); Endi ma'lumotlar bazasi tayyor, biz sensorBugs -ni o'rnatishga o'tishimiz mumkin.
3 -qadam: SensorBugs -ni o'rnatish
Sensor xatolar - bu juda chiroyli qurilmalar. Afsuski, ishlab chiqaruvchi uni dasturlash uchun faqat IOS ilovasini taqdim etdi. Hech bo'lmaganda, agar sizda faqat Android qurilmasi bo'lsa, u bilan ishlash mumkin, birinchi navbatda, qurilmani telefon bilan ulang. Qurilmani ulamasdan SensorBug ma'lumotlarni reklama qilmaydi. Men buni to'g'ridan -to'g'ri RaspberryPi bilan qila olamanmi, demoqchi bo'ldim, afsuski, RaspberryPi -dagi Bluetooth LE drayveri hali ham eksperimental bo'lib ko'rinadi va Bluetooth LE qurilmalari bilan bog'lanishiga yo'l qo'ymaslik uchun xatolar mavjud. BlueZ drayverining kelgusi versiyasi buni tuzatishi mumkin edi, lekin hozirgi yozuvga ko'ra, SensorBugni RaspberryPi bilan bog'lashning iloji yo'q. Bizga kerak bo'lgan yagona narsa - SensorBug -ni sozlash uchun telefon. Odatiy bo'lib, SensorBug qurilma bilan bog'langanidan keyin harorat ma'lumotlarini 1 soniya oralig'ida reklama qila boshlaydi. Harorat ma'lumotlarini olish uchun bu kerak. Agar siz joylashishni yoki yorug'lik sensorini kengaytirishni rejalashtirmoqchi bo'lsangiz, konfiguratsiyadan ko'ra qurilma kerak bo'ladi. Boshlash uchun biz qurilmani ulaymiz va uzamiz. Bu haroratni o'lchash uchun etarli bo'ladi. SensorBug -ning ikkala tugmachasini bosib boshlash. Ko'k/yashil LED yonadi, bu uning yoqilganligini ko'rsatadi. Tugmalardan birini bosing, yashil LED yonishi kerak, bu quvvat yoqilganligini bildiradi. Agar yashil LED yonmagan bo'lsa, qurilmani qayta yoqish uchun ikkala tugmani ham bosing. Bu qurilmani juftlik rejimiga o'tkazadi. Telefonning Bluetooth konfiguratsiya menyusiga o'ting va SensorBug qurilmasini qidiring. U paydo bo'lgandan so'ng, uni qurilmaga ulash uchun tanlang. Bu SensorBug quvvat manbai bo'lib, harorat ma'lumotlarini reklama qiladi.
4 -qadam: Bluetooth LE Python o'rash moslamasini o'rnatish
Python uchun Bluetooth LE stack bilan suhbatlashish uchun biz kutubxonani o'rnatishimiz kerak. Ko'rsatmani bu erda topishingiz mumkin: https://github.com/IanHarvey/bluepy Python 2.7 uchun quyidagi buyruqlarni kiritish oson:
$ sudo apt-get install python-pip libglib2.0-dev $ sudo pip install bluepy
5 -qadam: SensorBug manzilini skanerlang va toping
SensorBug MAC manzilini bilish uchun quyidagi buyruqni ishlating: $ sudo hcitool lescan Siz shunday chiqishni ko'rishingiz kerak:
EC: FE: 7E: 10: B1: 92 (noma'lum) Agar atrofingizda bluetooth LE qurilmalari ko'p bo'lsa, qaysi biri bilan gaplashayotganingizni aniqlash qiyin bo'lishi mumkin. Siz batafsil ma'lumot beradigan bluetoothctl -ni sinab ko'rishingiz mumkin:
$ sudo bluetoothctl [bluetooth]# skaner [YANGI] qurilmasi EC: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] Qurilma EC: FE: 7E: 10: B1: 92 Ishlab chiqaruvchi Ma'lumotlar kaliti: 0x0085 [CHG] EC qurilmasi: FE: 7E: 10: B1: 92 Ishlab chiqaruvchi ma'lumotlari qiymati: 0x02 [CHG] Qurilma EC: FE: 7E: 10: B1: 92 Ishlab chiqaruvchi Ma'lumotlar qiymati: 0x00 [CHG] Qurilma EC: FE: 7E: 10: B1: 92 Ishlab chiqaruvchi Ma'lumotlar qiymati: 0x3c [CHG] Qurilmasi EC: FE: 7E: 10: B1: 92 Ishlab chiqaruvchi Ma'lumotlar qiymati: 0x25 [CHG] EC: FE: 7E: 10: B1: 92 Ishlab chiqaruvchi Ma'lumotlari: 0x09 [CHG] Qurilmasi EC: FE: 7E: 10: B1: 92 Ishlab chiqaruvchi Ma'lumotlar qiymati: 0x41 [CHG] Qurilma EC: FE: 7E: 10: B1: 92 Ishlab chiqaruvchi Ma'lumotlar qiymati: 0x02 [CHG] Qurilma EC: FE: 7E: 10: B1: 92 Ishlab chiqaruvchi Ma'lumotlari: 0x02 [CHG] Qurilmasi EC: FE: 7E: 10: B1: 92 Ishlab chiqaruvchi Ma'lumotlar qiymati: 0x43 [CHG] Qurilma EC: FE: 7E: 10: B1: 92 Ishlab chiqaruvchi Ma'lumotlar qiymati: 0x0b [CHG] Qurilma EC: FE: 7E: 10: B1: 92 Ishlab chiqaruvchi Ma'lumotlari Qiymat: 0x01 [CHG] Qurilma EC: FE: 7E: 10: B1: 92 Ishlab chiqaruvchi Ma'lumotlar qiymati: 0x6f
MAC manzilini yozib oling, kiruvchi Bluetooth LE qurilmalarini filtrlash uchun uni python skriptiga kiritish kerak.
6 -qadam: Python skriptini qo'shing
Python skriptining nusxasi quyidagi manzilda mavjud:
drive.google.com/open?id=10vOeEAbS7mi_eXn_…
Mana o'sha fayl, nusxa ko'chirishda indentga e'tibor bering:
Bundan tashqari, python faylidagi MAC manzilini skanerlash natijasidan olingan sensor manziliga mos keladigan tarzda yangilang.
# Bu dastur - bu bepul dasturiy ta'minot: uni qayta tarqatish va/yoki o'zgartirish mumkin
# tomonidan nashr etilgan GNU General Public License shartlariga muvofiq
# Bepul dasturiy ta'minot jamg'armasi, Litsenziyaning 3 -versiyasi yoki
# (sizning xohishingiz bo'yicha) har qanday keyingi versiya.
#
# Bu dastur foydali bo'ladi degan umidda tarqatilgan.
# lekin BARCHA KAFOLATSIZ; kafolatlanmagan holda ham
# MAXSUS MAQSADGA SOTISh yoki moslik. Ga qarang
Qo'shimcha ma'lumot olish uchun # GNU General Public License.
#
# Siz GNU General Public License litsenziyasining nusxasini olishingiz kerak edi
# bu dastur bilan birga. Agar yo'q bo'lsa, qarang.
# bscan.py - oddiy bluetooth LE skaneri va ma'lumotlar chiqaruvchisi
bluepy.btle import skaneridan, DefaultDelegate
import vaqti
pymysql import qilish
import tuzilmasi
xost nomi = "localhost"
foydalanuvchi nomi = "ma'lumotlar bazasi"
parol = "datarc000"
ma'lumotlar bazasi = 'SensorBug'
#Leskandan sensorning MAC manzilini kiriting
SENSOR_ADDRESS = ["ec: fe: 7e: 10: b9: 92", "ec: fe: 7e: 10: b9: 93"]
SENSOR_LOCATION = ["Garaj", "Tashqi"]
DecodeErrorException klassi (istisno):
def _init _ (o'zini, qiymati):
self.value = qiymat
def _str _ (o'zini):
qaytish qaytarish (o'z -o'zini baholash)
ScanDelegate klassi (DefaultDelegate):
def _init _ (o'zi):
DefaultDelegate._ init _ (o'zini)
def handleDiscovery (o'zini, dev, isNewDev, isNewData):
agar isNewDev:
"Kashf etilgan qurilma" ni chop eting, dev.addr
elif isNewData:
chop etish "Yangi ma'lumotlar olindi", dev.addr
def doQueryInsert (conn, addr, loc, temp, accero):
#blesensor jadvali - bu sana, vaqt, manzil, manzil, temp, accero
cur = ulanish kursori ()
dostr = 'INSERT INTO data VALUES (CURRENT_DATE (), NOW (), %s, %s, %s, %s);'
cur.execute (dostr, (addr, loc, temp, accero))
ulanish.komitasi ()
skaner = Scanner (). withDelegate (ScanDelegate ())
myConnection = pymysql.connect (xost = xost nomi, foydalanuvchi = foydalanuvchi nomi, passwd = parol, db = ma'lumotlar bazasi)
ManuDataHex =
ReadLoop = To'g'ri
harakat qilib ko'ring:
while (ReadLoop):
qurilmalar = skaner.scan (2.0)
Manu ma'lumotlar = ""
qurilmalar uchun:
kirish = 0
AcceroData = 0
AcceroType = 0
TempData = 0
saddr uchun SENSOR_ADDRESS:
kirish += 1
agar (dev.addr == saddr):
"Qurilma %s (%s), RSSI = %d dB" %(dev.addr, dev.addrType, dev.rssi) chop eting
CurrentDevAddr = saddr
CurrentDevLoc = SENSOR_LOCATION [kirish-1]
dev.getScanData () da (adtype, desc, value) uchun:
"%s = %s" %chop eting (kamayish, qiymat)
agar (tushum == "Ishlab chiqaruvchi"):
ManuData = qiymat
agar (ManuData == ""):
chop etish "Ma'lumotlar qabul qilinmadi, dekodlash tugadi"
davom ettirish
#ManuData -ni chop etish
i, j in zip uchun (ManuData [:: 2], ManuData [1:: 2]):
ManuDataHex.append (int (i+j, 16))
#Ishlab chiqaruvchi ma'lumotlarini dekodlashni boshlang
agar ((ManuDataHex [0] == 0x85) va (ManuDataHex [1] == 0x00)):
chop etish "0x0085 sarlavhali bayt topildi"
boshqa:
chop etish "0x0085 sarlavhali bayt topilmadi, dekodlash to'xtadi"
davom ettirish
#Katta/kichikni o'tkazib yuboring
#Index 5 - 0x3c, batareya quvvati va konfiguratsiyasini ko'rsating #
agar (ManuDataHex [4] == 0x3c):
BatteryLevel = ManuDataHex [5]
ConfigCounter = ManuDataHex [6]
idx = 7
#print "TotalLen:" + str (len (ManuDataHex))
while (idx <len (ManuDataHex)):
#print "Idx:" + str (idx)
#print "Ma'lumotlar:" + olti burchakli (ManuDataHex [idx])
agar (ManuDataHex [idx] == 0x41):
#Akserometr ma'lumotlari
idx += 1
AcceleroType = ManuDataHex [idx]
AcceleroData = ManuDataHex [idx+1]
idx += 2
elif (ManuDataHex [idx] == 0x43):
#Harorat ma'lumotlari
idx += 1
TempData = ManuDataHex [idx]
TempData += ManuDataHex [idx +1] * 0x100
TempData = TempData * 0.0625
idx += 2
boshqa:
idx += 1
"Qurilma manzili:" + CurrentDevAddr -ni chop eting
"Qurilmaning joylashuvi:" + CurrentDevLoc -ni chop eting
"Batareya darajasi:" + str (BatteryLevel) + "%" ni chop eting.
chop etish "Config Counter:" + str (ConfigCounter)
"Accelero Data:" + hex (AcceleroType) + "" + hex (AcceleroData) ni chop eting
"Harorat ma'lumotlari:" + str (TempData) ni chop eting
doQueryInsert (myConnection, CurrentDevAddr, CurrentDevLoc, TempData, AcceleroData)
ReadLoop = noto'g'ri
DecodeErrorExceptiondan tashqari:
o'tish
7 -qadam: Python skriptini sinab ko'ring
Skript ildizda ishlashi kerak, shuning uchun:
$ sudo python bscan.pyKashf etilgan qurilma ec: 6e: 7e: 10: b1: 92 qurilma ec: 6e: 7e: 10: b1: 92 (ommaviy), RSSI = -80 dB bayroqlar = 06 tugallanmagan 16b xizmatlar = 0a18 Ishlab chiqaruvchi = 850002003c25094102024309016f Sarlavha bayti 0x0085 topildi Qurilma manzili: ec: 6e: 7e: 10: b1: 92 Qurilmaning joylashuvi: Garaj batareyasi darajasi: 37% Konfiguratsiya hisoblagichi: 9 Accero Ma'lumotlari: 0x2 0x2 Temp Ma'lumotlari: 16.5625
8 -qadam: Python skriptini Crontab -ga qo'shing
Python skriptini root -da ishga tushirish kerak, shuning uchun agar siz ma'lumotlarni avtomatik ravishda yozib olishni xohlasangiz, uni root crontab -ga qo'shish kerak bo'ladi. Bu misol uchun men skriptni har 20 daqiqada ishga tushiraman: Buyruqdan foydalaning:
$ sudo crontab -e
# Cron tomonidan bajariladigan vazifalarni kiritish uchun ushbu faylni tahrirlang.
# # Har bir bajariladigan vazifa bitta satr orqali aniqlanishi kerak #, vazifa qachon bajarilishi va # # vazifasi uchun qaysi buyruq bajarilishi kerakligini ko'rsatib, vaqtni aniq belgilash uchun # daqiqa (m), soat (h), oy kuni (dom), oy (dushanba), # va haftaning kuni (dow) yoki bu sohalarda '*' dan foydalaning ("har qanday" uchun). # # Vazifalar boshlanishiga e'tibor bering cron tizimi # demonning vaqt va vaqt zonalari haqidagi tushunchasiga asoslangan. # # Crontab ishlarining natijalari (shu jumladan xatolar) crontab fayli tegishli bo'lgan foydalanuvchiga # elektron pochta orqali yuboriladi (qayta yo'naltirilmasa). # # Masalan, siz har hafta ertalab soat 5 da barcha foydalanuvchi hisoblaringizning zaxira nusxasini ishga tushirishingiz mumkin: # 0 5 * * 1 tar -zcf /var/backups/home.tgz/home/ # # Qo'shimcha ma'lumot olish uchun qarang. crontab (5) va cron (8) qo'lda sahifalari # # mh dom mon dow buyrug'i 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * python /home/pi/bscan.py
Bo'ldi shu. Python skripti ma'lum vaqt oralig'ida ishlaydi va chiqishni SQL ma'lumotlar bazasiga qayta yozadi
9 -qadam: Qo'shimcha: SensorBug -ni joylashishni aniqlash chiqishi uchun sozlang
Android -dagi SensorBug -ni joylashishni sezish chiqishi uchun sozlash mumkin. Garaj eshigi deb ataladigan pozitsiyani o'zgartirish uchun SensorBug qurilma tik turganini yoki tekis yotishini aniqlaydi. Qurilma tekis bo'lganda, yozilgan qiymat 0x20 bo'ladi. Agar qurilma tik turgan bo'lsa, bu qiymat 0x02, agar Z o'qi yuqoriga yoki pastga bo'lmasa, X yoki Y pozitsiyasi yuqoriligida farq qilmaydi, buning eng oson yo'li - LightBlue ilovasidan foydalanish. SensorBug skanerlash menyusida ko'rsatilishi kerak. Siz sozlamoqchi bo'lgan qurilmani tanlang, UUID Accelerometer konfiguratsiyasi uchun GATT xususiyatlariga o'ting: 9DC84838-7619-4F09-A1CE-DDCF63225B11
Rasmga qarang: Yangi konfiguratsiya qatorini yozing:
010d3f02020000002d00000002Yozishni tasdiqlash uchun konfiguratsiya satrini o'qing.
Tavsiya:
MCP9808 va Raspberry Pi yordamida haroratni kuzatish: 4 qadam
MCP9808 va Raspberry Pi yordamida haroratni kuzatish: MCP9808 - yuqori aniqlikdagi raqamli harorat sensori ± 0,5 ° C I2C mini moduli. Ular haroratni sezish dasturlarini osonlashtiradigan, foydalanuvchi tomonidan dasturlashtiriladigan registrlar bilan birlashtirilgan. MCP9808 yuqori aniqlikdagi harorat sensori sanoatga aylandi
Dasturni yozib oling va uni yozib oling: 8 qadam
O'qish dasturini yaratish uchun dasturni yaratish kerakmi ?: O'yin dasturining oxirgi versiyasi Texnologiyaning eng so'nggi bosqichi bo'lib o'tdi, shuning uchun u o'z dasturini yaratdi. Python va kutubxonachilarning vazifasi shundaki, ular hech qanday dasturga ega emas
MCP9808 va Arduino Nano yordamida haroratni kuzatish: 4 qadam
MCP9808 va Arduino Nano yordamida haroratni kuzatish: MCP9808 - yuqori aniqlikdagi raqamli harorat sensori ± 0,5 ° C I2C mini moduli. Ular foydalanuvchi tomonidan dasturlashtiriladigan registrlar bilan jihozlangan bo'lib, ular haroratni sezishni osonlashtiradi. MCP9808 yuqori aniqlikdagi harorat sensori sanoatga aylandi
MP3 -fayllar yordamida zamonaviy kassetali kasetlarni yozib olish: 8 qadam (rasmlar bilan)
MP3-fayllar bilan vintage kassetali lentalarni zamonaviy tarzda yozib olish: vintage-kassetali lentalar pop-madaniyatda har qachongidan ham ko'proq paydo bo'lganda, ko'p odamlar o'z versiyalarini yaratishni xohlashadi. Ushbu qo'llanmada men sizga (agar sizda magnitafon bo'lsa) zamonaviy kassetali kasetlarni qanday yozish bo'yicha ko'rsatma beraman
MCP9808 va zarracha foton yordamida haroratni kuzatish: 4 qadam
MCP9808 va zarracha foton yordamida haroratni kuzatish: MCP9808 - yuqori aniqlikdagi raqamli harorat sensori ± 0,5 ° C I2C mini moduli. Ular foydalanuvchi tomonidan dasturlashtiriladigan registrlar bilan jihozlangan bo'lib, ular haroratni sezishni osonlashtiradi. MCP9808 yuqori aniqlikdagi harorat sensori sanoatga aylandi