Оглавление:
- Шаг 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 11:51
В этом руководстве рассказывается, как собрать многоузловую систему мониторинга температуры с ошибкой датчика Bluetooth LE от Blue Radios (BLEHome) и RaspberryPi 3B. Благодаря развитию стандарта Bluetooth LE теперь на рынке легко доступны беспроводные датчики с низким энергопотреблением. по очень низкой цене и может работать на одной монетной ячейке в течение нескольких месяцев. Один из этих сенсоров, который я купил, был от Blue Radio под названием Sensor Bugs. Это устройство Bluetooth LE стоимостью около 25 долларов США с датчиком температуры, датчиком освещенности и акселерометром встроено в небольшой блок, который может обмениваться данными по беспроводной сети. Он идеально подходит для 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 tzdataRest инструкции, предполагающей, что установка выполняется через интерфейс командной строки.
Шаг 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. * TO 'datasrc' @ 'localhost'; Теперь добавьте новую таблицу в базу данных. В этом примере я собираюсь добавить таблицу со следующими столбцами: ДАТА, ВРЕМЯ, АДРЕС, МЕСТОПОЛОЖЕНИЕ, ТЕМПЕРАТУРА и АКСЕРОМЕТР.
- ДАТА / ВРЕМЯ - это дата и время записи данных.
- АДРЕС - это 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 секунду после сопряжения с устройством. Это все, что нужно для сбора данных о температуре. Если вы планируете расширить, чтобы использовать датчик положения или света, то потребуется настройка устройства. Для начала подключим устройство и отключим. Этого будет достаточно для измерения температуры. Начните с нажатия обеих кнопок на 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] # сканирование на [NEW] EC устройства: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] EC устройства: FE: 7E: 10: B1: 92 Ключ данных производителя: 0x0085 [CHG] EC устройства: FE: 7E: 10: B1: 92 Значение ManufacturerData: 0x02 [CHG] EC устройства: FE: 7E: 10: B1: 92 Значение ManufacturerData: 0x00 [CHG] Device EC: FE: 7E: 10: B1: 92 Значение ManufacturerData: 0x3c [CHG] EC устройства: FE: 7E: 10: B1: 92 Значение ManufacturerData: 0x25 [CHG] Device EC: FE: 7E: 10: B1: 92 Значение ManufacturerData: 0x09 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x41 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x02 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x02 [CHG] Device EC: FE: 7E: 10: B1: 92 Значение производителя: 0x43 [CHG] EC устройства: FE: 7E: 10: B1: 92 Значение ManufacturerData: 0x0b [CHG] EC устройства: FE: 7E: 10: B1: 92 ManufacturerData Значение: 0x01 [CHG] EC устройства: FE: 7E: 10: B1: 92 Значение ManufacturerData: 0x6f
Запишите MAC-адрес, его нужно будет ввести в скрипт Python, чтобы отфильтровать нежелательные устройства Bluetooth LE.
Шаг 6. Добавьте скрипт Python
Копию скрипта Python можно получить по адресу:
drive.google.com/open?id=10vOeEAbS7mi_eXn_…
Вот тот же файл, позаботьтесь об отступе при копировании:
Кроме того, обновите MAC-адрес в файле python, чтобы он соответствовал адресу датчика, полученному в результате сканирования.
# Это бесплатное программное обеспечение: вы можете распространять и / или изменять
# это в соответствии с условиями Стандартной общественной лицензии GNU, опубликованной
# Free Software Foundation, либо версия 3 Лицензии, либо
# (по вашему выбору) любая более поздняя версия.
#
# Эта программа распространяется в надежде, что она будет полезной, # но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; без даже подразумеваемой гарантии
# КОММЕРЧЕСКАЯ ЦЕННОСТЬ или ПРИГОДНОСТЬ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. Увидеть
# Стандартная общественная лицензия GNU для более подробной информации.
#
# Вы должны были получить копию Стандартной общественной лицензии GNU
# вместе с этой программой. Если нет, посмотри.
# bscan.py - Простой Bluetooth-сканер LE и средство извлечения данных
из bluepy.btle import Scanner, DefaultDelegate
время импорта
импортировать pymysql
структура импорта
hostname = 'локальный'
имя пользователя = 'datasrc'
пароль = 'datasrc000'
база данных = 'SensorBug'
# Введите MAC-адрес датчика из лескана
SENSOR_ADDRESS = ["ec: fe: 7e: 10: b9: 92", "ec: fe: 7e: 10: b9: 93"]
SENSOR_LOCATION = ["Гараж", "Экстерьер"]
класс DecodeErrorException (Исключение):
def _init _ (self, value):
self.value = значение
def _str _ (сам):
вернуть repr (self.value)
класс ScanDelegate (DefaultDelegate):
def _init _ (сам):
DefaultDelegate._ init _ (сам)
def handleDiscovery (self, dev, isNewDev, isNewData):
если isNewDev:
print "Обнаруженное устройство", dev.addr
elif isNewData:
print "Получены новые данные от", dev.addr
def doQueryInsert (conn, addr, loc, temp, Accero):
Таблица #blesensor - это дата, время, адрес, местоположение, темп, скорость
cur = conn.cursor ()
dostr = 'ВСТАВИТЬ В ЗНАЧЕНИЯ данных (CURRENT_DATE (), NOW (),% s,% s,% s,% s);'
cur.execute (dostr, (адрес, loc, temp, Accero))
conn.commit ()
scanner = Сканер (). withDelegate (ScanDelegate ())
myConnection = pymysql.connect (host = hostname, user = username, passwd = password, db = database)
ManuDataHex =
ReadLoop = True
пытаться:
пока (ReadLoop):
устройства = scanner.scan (2.0)
ManuData = ""
для разработчиков в устройствах:
entry = 0
AcceroData = 0
AcceroType = 0
TempData = 0
для saddr в SENSOR_ADDRESS:
запись + = 1
если (dev.addr == saddr):
print "Устройство% s (% s), RSSI =% d дБ"% (dev.addr, dev.addrType, dev.rssi)
CurrentDevAddr = saddr
CurrentDevLoc = SENSOR_LOCATION [запись-1]
для (adtype, desc, value) в dev.getScanData ():
print "% s =% s"% (desc, value)
if (desc == "Производитель"):
ManuData = значение
если (ManuData == ""):
print "Данные не получены, декодирование завершено"
Продолжить
#print ManuData
для i, j в zip-архиве (ManuData [:: 2], ManuData [1:: 2]):
ManuDataHex.append (int (я + j, 16))
# Начать декодирование необработанных данных производителя
если ((ManuDataHex [0] == 0x85) и (ManuDataHex [1] == 0x00)):
print "Обнаружен байт заголовка 0x0085"
еще:
print "Байт заголовка 0x0085 не найден, декодирование остановлено"
Продолжить
# Пропустить Major / Minor
# Индекс 5 - 0x3c, укажите уровень заряда батареи и конфигурацию #
если (ManuDataHex [4] == 0x3c):
BatteryLevel = ManuDataHex [5]
ConfigCounter = ManuDataHex [6]
idx = 7
#print "TotalLen:" + str (len (ManuDataHex))
в то время как (idx <len (ManuDataHex)):
#print "Idx:" + str (idx)
#print "Data:" + шестнадцатеричный (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
print "Адрес устройства:" + CurrentDevAddr
print "Расположение устройства:" + CurrentDevLoc
напечатайте "Уровень заряда батареи:" + str (BatteryLevel) + "%"
напечатать "Config Counter:" + str (ConfigCounter)
напечатайте "Данные Accelero:" + шестнадцатеричный (AcceleroType) + "" + шестнадцатеричный (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 дБ Флаги = 06 Неполные услуги 16b = 0a18 Производитель = 850002003c25094102024309016f Обнаружен байт заголовка 0x0085 Адрес устройства: ec: 6e: 7e: 10: b1: 92 Расположение устройства: Гараж Уровень заряда батареи: 37% Счетчик конфигурации: 9 Данные Accero: 0x2 0x2 Временные данные: 16,5625
Шаг 8: добавьте скрипт Python в Crontab
Сценарий python должен запускаться в корневом каталоге, поэтому, если вы хотите автоматически записывать данные, их нужно будет добавить в crontab корневого каталога. В этом примере я запускаю сценарий каждые 20 минут. Используйте команду:
$ sudo crontab -e
# Отредактируйте этот файл, чтобы ввести задачи, которые должен выполнять cron.
# # Каждая задача для запуска должна быть определена в одной строке # с указанием разных полей, когда задача будет запущена # и какую команду запускать для задачи # # Чтобы определить время, вы можете указать конкретные значения для # минут (m), час (h), день месяца (dom), месяц (mon), # и день недели (dow) или используйте '*' в этих полях (для 'any'). # # Обратите внимание, что задачи будут запущены основан на представлении демона system # времени и часовых поясов в cron. # # Вывод заданий crontab (включая ошибки) отправляется # по электронной почте пользователю, которому принадлежит файл crontab (если не перенаправлен). # # Например, вы можете запускать резервную копию всех своих учетных записей пользователей # в 5 утра каждую неделю с помощью: # 0 5 * * 1 tar -zcf /var/backups/home.tgz / home / # # Для получения дополнительной информации см. страницы руководства crontab (5) и cron (8) # # mh dom mon dow command 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * питон /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 Прочтите строку конфигурации, чтобы подтвердить запись. Это позволяет акселерометру определять положение.
Рекомендуемые:
Мониторинг температуры и влажности с помощью NODE MCU И BLYNK: 5 шагов
Мониторинг температуры и влажности с использованием NODE MCU и BLYNK: Привет, ребята В этом руководстве мы узнаем, как получить температуру и влажность атмосферы с помощью датчика температуры и влажности DHT11 с помощью Node MCU и приложения BLYNK
Мониторинг температуры и влажности в помещении с помощью ESP32 и AskSensors Cloud: 6 шагов
Мониторинг температуры и влажности в помещении с помощью ESP32 и AskSensors Cloud: в этом руководстве вы узнаете, как контролировать температуру и влажность в вашей комнате или на столе с помощью DHT11 и ESP32, подключенных к облаку. Обновления наших руководств можно найти здесь. Технические характеристики: Датчик DHT11 может измерять температуру
Мониторинг температуры и влажности DHT с помощью ESP8266 и платформы AskSensors IoT: 8 шагов
Мониторинг температуры и влажности DHT с использованием ESP8266 и платформы AskSensors IoT: в предыдущих инструкциях я представил пошаговое руководство по началу работы с ESP8266 nodeMCU и платформой AskSensors IoT. В этом руководстве я подключаю датчик DHT11 к узлу MCU. DHT11 обычно используется для измерения температуры и влажности
Мониторинг температуры и влажности с помощью ESP-01 и DHT и облака AskSensors: 8 шагов
Мониторинг температуры и влажности с использованием ESP-01 и DHT и облака AskSensors: в этом руководстве мы узнаем, как отслеживать измерения температуры и влажности с помощью платы IOT-MCU / ESP-01-DHT11 и платформы AskSensors IoT. .Я выбираю модуль IOT-MCU ESP-01-DHT11 для этого приложения, потому что он
Мониторинг температуры и влажности с помощью Raspberry Pi: 6 шагов (с изображениями)
Мониторинг температуры и влажности с помощью Raspberry Pi: приближается лето, и те, у кого нет кондиционера, должны быть готовы контролировать атмосферу в помещении вручную. В этом посте я описываю современный способ измерения самых важных параметров комфорта человека: температуры и влажности. Т