Съдържание:
- Стъпка 1: Настройка на Raspberry Pi
- Стъпка 2: Настройване на MySQL на Raspberry Pi
- Стъпка 3: Настройване на SensorBugs
- Стъпка 4: Инсталиране на Bluetooth LE Python Wrapper
- Стъпка 5: Сканирайте и разберете адреса на SensorBug
- Стъпка 6: Добавете скрипта на Python
- Стъпка 7: Тествайте скрипта на Python
- Стъпка 8: Добавете скрипта на Python към Crontab
- Стъпка 9: Допълнително: Конфигурирайте SensorBug за изход за позициониране
Видео: Наблюдавайте и записвайте температурата с Bluetooth LE и RaspberryPi: 9 стъпки (със снимки)
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
Тази инструкция е за това как да се състави система за мониторинг на температурата с много възли с Bluetooth LE сензорна грешка от Blue Radios (BLEHome) и RaspberryPi 3B Благодарение на разработването на стандарта Bluetooth LE, сега има лесно достъпни безжични сензори с ниска мощност на пазара за много ниска цена и може да работи с една монета в продължение на месеци. Един от тези сензори, които взех, е от Blue Radio, наречен Sensor Bugs. На цена от около $ 25 на Amazon, това е Bluetooth LE устройство с температурен сензор, светлинен сензор и акселерометър, вградени в малка единица, която може да комуникира безжично. Това е идеално съвпадение за Raspberry Pi 3B, който има вградена поддръжка за Bluetooth LE радио.
Стъпка 1: Настройка на Raspberry Pi
Първата стъпка е да получите работеща настройка на Raspberry Pi. Следвайте инструкциите от уебсайта на Raspberry Pi, заредете Raspbian на SD карта, поставете я в Raspberry Pi и я стартирайте. Настройвам системата си с версия на Raspbian Stretch Lite (без графичен потребителски интерфейс) ноември 2017 г. Настройвам WiFi, ако е необходимо, предпочитам да коригирам часова зона към текущата часова зона вместо UTC. Можете да направите това чрез командата: $ sudo dpkg-reconfigure tzdata Остатъкът от инструкцията приема, че настройката е извършена през интерфейса на командния ред.
Стъпка 2: Настройване на MySQL на Raspberry Pi
Полезно е да имате локално инсталирана база данни, за да съхранявате всички заснети данни. Инсталирането на MySQL на Raspberry Pi е супер лесно. Също така не е трудно да промените скрипта за външно свързване към SQL сървър, можете да пропуснете тази стъпка, ако искате да използвате SQL сървър в мрежата. Има много инструкции в мрежата, предлагам това: 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, ADDRESS, LOCATION, TEMPERATURE и ACCEROMETER
- ДАТА/ВРЕМЕ - Това е датата и часът на записване на данните
- АДРЕС - Това е MAC на SensorBug, от който е заснето съобщението
- МЕСТОПОЛОЖЕНИЕ - Четлив за хора низ, който показва къде се намира сензорът
- ТЕМПЕРАТУРА - Това е записаната температура
- ACCELE - Това е стойността на изхода на акселерометъра, полезна за запис на позицията на сензора (ако е активиран)
Командата, която прави това, е:> USE SensorBug; > CREATE TABLE data (дата DATE, час TIME, адрес TINYTEXT, местоположение TINYTEXT, температура FLOAT, ускорение INT); Сега базата данни е готова, можем да преминем към настройка на sensorBugs.
Стъпка 3: Настройване на SensorBugs
Грешките на сензора са доста спретнати малки устройства. За съжаление производителят предостави само приложение за IOS за програмирането му. Въпреки това, все още е възможно да работите с него, ако имате само устройство с Android. Първата стъпка, свържете устройството с телефон. Без сдвояване на устройството SensorBug няма да рекламира данни. Опитах се да видя дали мога да направя това директно с RaspberryPi, за съжаление изглежда, че Bluetooth LE драйверът на RaspberryPi все още е експериментален и съдържа грешки, които да го предпазят от сдвояване с Bluetooth LE устройства. Бъдещата версия на драйвера blueZ може да поправи това, но като настоящото писане, няма начин да сдвоите SensorBug с RaspberryPi. За щастие не е необходимо да сдвояваме устройството, за да улавяме рекламираните му данни. Единственото нещо, от което се нуждаем, е телефон за конфигуриране на SensorBug. По подразбиране SensorBug ще започне да рекламира температурни данни на интервал от 1 s, след като бъде сдвоен с устройство. Това е всичко, което е необходимо за улавяне на данни за температурата. Ако планирате да разширите, за да използвате позиционен или светлинен сензор, тогава ще е необходимо устройството за конфигурация. Като начало ще сдвоим устройството и ще го изключим. Това ще бъде достатъчно добро за целите на улавяне на температурата. Започнете, като натиснете двата бутона на SensorBug. Синият/зелен светодиод ще мига, което показва, че е включен. Натиснете един от бутоните, зеленият светодиод трябва да светне, което показва, че захранването е включено. Ако зеленият светодиод не свети, натиснете двата бутона, за да опитате да включите отново устройството. Натиснете и задръжте един от бутоните, докато синият светодиод започне да мига. Това ще постави устройството в режим на двойка. Отидете в менюто за конфигурация на Bluetooth на телефона и потърсете устройството SensorBug. След като се появи, изберете го, за да се сдвоите с устройството. Това е, сега SensorBug се захранва и рекламира температурните данни
Стъпка 4: Инсталиране на Bluetooth LE Python Wrapper
След това трябва да инсталираме библиотеката, за да може python да говори с Bluetooth LE стека. Инструкцията може да бъде намерена тук: https://github.com/IanHarvey/bluepy За Python 2.7 е толкова просто, колкото въвеждането на следните команди:
$ sudo apt-get install python-pip libglib2.0-dev $ sudo pip install bluepy
Стъпка 5: Сканирайте и разберете адреса на SensorBug
За да разберете MAC адреса на SensorBug, използвайте тази команда: $ 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 Стойност на производителя: 0x02 [CHG] Устройство EC: FE: 7E: 10: B1: 92 Стойност на производителя: 0x02 [CHG] Устройство EC: FE: 7E: 10: B1: 92 Производител Стойност на данните: 0x43 [CHG] Устройство EC: FE: 7E: 10: B1: 92 Стойност на производителя: 0x0b [CHG] Устройство EC: FE: 7E: 10: B1: 92 Производител Данни Стойност: 0x01 [CHG] Устройство EC: FE: 7E: 10: B1: 92 Производител Стойност на данните: 0x6f
Запишете MAC адреса, това ще трябва да бъде въведено в скрипта на python, за да филтрирате нежеланите Bluetooth LE устройства
Стъпка 6: Добавете скрипта на Python
Копие на скрипта на Python е достъпно от:
drive.google.com/open?id=10vOeEAbS7mi_eXn_…
Ето същия файл, погрижете се за отстъпа при копиране:
Също така актуализирайте MAC адреса във файла python, за да съответства на адреса на сензора, получен от резултата от сканирането.
# Тази програма е безплатен софтуер: можете да я разпространявате и/или променяте
# го съгласно условията на Общия публичен лиценз на GNU, публикуван от
# Фондацията за свободен софтуер, или версия 3 на Лиценза, или
# (по ваш избор) всяка по -нова версия.
#
# Тази програма се разпространява с надеждата, че ще бъде полезна, # но БЕЗ ГАРАНЦИЯ; дори без подразбиращата се гаранция на
# ТЪРГОВСКИ СЪОТВЕТСТВЕНОСТ или ГОДНОСТ ЗА ОПРЕДЕЛЕНА ЦЕЛ. Вижте
# Общ публичен лиценз на GNU за повече подробности.
#
# Трябваше да получите копие от Общия публичен лиценз на GNU
# заедно с тази програма. Ако не, вижте.
# bscan.py - Прост Bluetooth LE скенер и извличане на данни
от скенер за импортиране на bluepy.btle, DefaultDelegate
време за импортиране
внос pymysql
внос структура
hostname = 'localhost'
потребителско име = 'datasrc'
парола = 'datasrc000'
database = '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 _ (себе си):
return repr (self.value)
клас ScanDelegate (DefaultDelegate):
def _init _ (себе си):
DefaultDelegate._ init _ (себе си)
def handleDiscovery (self, dev, isNewDev, isNewData):
ако еNewDev:
отпечатайте „Открито устройство“, dev.addr
elif isNewData:
отпечатайте "Получени нови данни от", dev.addr
def doQueryInsert (conn, addr, loc, temp, accero):
#blesensor таблицата е дата, час, адрес, местоположение, температура, акцент
cur = conn.cursor ()
dostr = 'ВМЕСТВАНЕ НА СТОЙНОСТИ НА ДАННИ (CURRENT_DATE (), СЕГА (), %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)
ManuData = ""
за разработчици в устройства:
вход = 0
AcceroData = 0
AcceroType = 0
TempData = 0
за saddr в SENSOR_ADDRESS:
запис += 1
if (dev.addr == saddr):
отпечатайте "Устройство %s (%s), RSSI = %d dB" %(dev.addr, dev.addrType, dev.rssi)
CurrentDevAddr = saddr
CurrentDevLoc = SENSOR_LOCATION [запис-1]
for (тип на рекламата, desc, стойност) в dev.getScanData ():
отпечатайте " %s = %s" %(описание, стойност)
if (desc == "Производител"):
ManuData = стойност
if (ManuData == ""):
отпечатайте "Няма получени данни, прекратете декодирането"
продължи
#отпечатайте ManuData
за i, j в zip (ManuData [:: 2], ManuData [1:: 2]):
ManuDataHex.append (int (i+j, 16))
#Започнете да декодирате необработените данни на производителя
if ((ManuDataHex [0] == 0x85) и (ManuDataHex [1] == 0x00)):
отпечатайте "намерен байт на заглавката 0x0085"
иначе:
отпечатайте "Байт на заглавката 0x0085 не е намерен, декодирането е спряно"
продължи
#Skip Major/Minor
#Индекс 5 е 0x3c, посочете нивото на батерията и конфигурацията #
ако (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 "Данни:" + шестнадесетичен (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 = False
с изключение на DecodeErrorException:
пропуск
Стъпка 7: Тествайте скрипта на Python
Скриптът трябва да се изпълнява в root, така че:
$ sudo python bscan.py Открито устройство ec: 6e: 7e: 10: b1: 92 Устройство ec: 6e: 7e: 10: b1: 92 (обществено), RSSI = -80 dB Флагове = 06 Непълни 16b услуги = 0a18 Производител = 850002003c25094102024309016f Заглавен байт 0x0085 е намерен Адрес на устройството: ec: 6e: 7e: 10: b1: 92 Местоположение на устройството: Гаражно ниво на батерията: 37% Конфигурационен брояч: 9 Accero данни: 0x2 0x2 Температурни данни: 16.5625
Стъпка 8: Добавете скрипта на Python към Crontab
Скриптът на python трябва да се изпълнява в root, така че ако искате да улавяте данните автоматично, той ще трябва да бъде добавен към crontab на root. За този пример изпълнявам скрипта на всеки 20 минути Използвайте командата:
$ sudo crontab -e
# Редактирайте този файл, за да въведете задачи, които да се изпълняват от cron.
# # Всяка задача за изпълнение трябва да бъде дефинирана чрез един ред #, показващ с различни полета кога задачата ще бъде изпълнена # и каква команда да се изпълни за задачата # # За да определите времето, което можете да предоставите конкретни стойности за # минута (m), час (ч), ден от месеца (дом), месец (пн), # и ден от седмицата (надолу) или използвайте „*“в тези полета (за „всякакви“). # # Забележете, че задачите ще бъдат стартирани въз основа на системата на 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
Това е. Скриптът на python ще се изпълнява на редовни интервали и ще прекодира изхода в SQL базата данни
Стъпка 9: Допълнително: Конфигурирайте SensorBug за изход за позициониране
Възможно е да се конфигурира SensorBug в Android за измерване на позицията Измерване на промяна на позицията, така наречената гаражна врата. Сензор, SensorBug ще открие дали устройството стои изправено или легнало. Когато устройството е плоско, записаната стойност е 0x20 докато устройството стои изправено, стойността е 0x02 Не се различава дали позицията X или Y е нагоре, докато оста Z не е нагоре или надолу. Най -лесният начин да направите това е да използвате приложението LightBlue. SensorBug трябва да се появи в менюто за сканиране. Изберете устройството, което искате да конфигурирате, отидете на характеристиките на GATT за UUID за конфигурация на акселерометър: 9DC84838-7619-4F09-A1CE-DDCF63225B11
Вижте изображението: Напишете нов конфигурационен низ:
010d3f02020000002d00000002 Прочетете конфигурационния низ, за да потвърдите записа. Това позволява акселерометъра за определяне на позицията.
Препоръчано:
Индикатор за температурата на процесора Raspberry Pi: 11 стъпки (със снимки)
Индикатор за температурата на процесора Raspberry Pi: Преди това бях въвел проста схема на индикатор за работно състояние на малиново пи (по -нататък като RPI). Този път ще обясня някои по -полезни индикаторни схеми за RPI, работещи без глава (без монитор). Схемата по -горе показва Температура на процесора
Наблюдавайте температурата и влажността с AM2301 на NodeMCU & Blynk: 3 стъпки
Наблюдавайте температурата и влажността с AM2301 на NodeMCU & Blynk: Много добре известен факт е, че в повечето индустриални вертикали, температура, влажност, налягане, качество на въздуха, качеството на водата и т.н., играят важни фактори, които трябва да се наблюдават непрекъснато и необходимо алармените системи трябва да бъдат въведени, когато стойността
Наблюдавайте галони на резервоара за отоплителен резервоар с имейл, SMS и предупреждение с Pushbullet: 9 стъпки (със снимки)
Наблюдавайте галоните на резервоарите за отоплително масло с имейл, SMS и предупреждение за пулпул: ИНФОРМАЦИЯ ЗА БЕЗОПАСНОСТ: В случай, че някой иска да знае дали " това е безопасно за изграждане/инсталиране " - Отнесох това на 2 различни петролни компании за обратна връзка/съображения за безопасност и ръководих това от заместник-ръководителя на пожарната служба C
Наблюдавайте температурата в дома/офиса в работния плот: 4 стъпки
Наблюдавайте температурата в дома/офиса на вашия работен плот: За наблюдение на стаи или офиси или където и да е, където можем да използваме този проект и това се показва с толкова много подробности като графика, температура в реално време и много други. Използваме: https://thingsio.ai/ На първо място, трябва да направим акаунт в тази IoT платформа, една
Проектът за оранжерия (RAS): Наблюдавайте елементите за реакция на нашата плантация: 18 стъпки (със снимки)
Проектът за оранжерии (RAS): Наблюдавайте елементите, които трябва да реагират на нашата плантация: Този проект предлага да се следи температурата на въздуха, осветеността и влажността, както и температурата и влажността на горичките. Той също така предлага да се свържат тези мерки, които са толкова четими на уебсайта Actoborad.com За да свържем 4 сензора към N