Tabla de contenido:
- Paso 1: Configurar Raspberry Pi
- Paso 2: Configurar MySQL en Raspberry Pi
- Paso 3: Configuración de SensorBugs
- Paso 4: Instalación de la envoltura de Python Bluetooth LE
- Paso 5: escanee y averigüe la dirección del SensorBug
- Paso 6: agregue la secuencia de comandos de Python
- Paso 7: Pruebe el script de Python
- Paso 8: agregue Python Scrip a Crontab
- Paso 9: Extra: Configure el SensorBug para la salida de detección de posición
Video: Supervise y registre la temperatura con Bluetooth LE y RaspberryPi: 9 pasos (con imágenes)
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:42
Este instructivo trata sobre cómo armar un sistema de monitoreo de temperatura de múltiples nodos con el error del sensor Bluetooth LE de Blue Radios (BLEHome) y RaspberryPi 3B Gracias al desarrollo del estándar Bluetooth LE, ahora hay sensores inalámbricos de baja potencia fácilmente disponibles en el mercado a un costo muy bajo y puede funcionar con una sola celda de botón durante meses. Uno de estos sensores que recogí es de Blue Radio llamado Sensor Bugs. Con un costo de alrededor de $ 25 en Amazon, es un dispositivo Bluetooth LE con sensor de temperatura, sensor de luz y acelerómetro, todo integrado en una pequeña unidad que puede comunicarse de forma inalámbrica. Esta es una combinación perfecta para Raspberry Pi 3B, que tiene soporte integrado para radio Bluetooth LE.
Paso 1: Configurar Raspberry Pi
El primer paso es conseguir una configuración de Raspberry Pi que funcione. Siga las instrucciones del sitio web de Raspberry Pi, cargue Raspbian en una tarjeta SD, insértela en Raspberry Pi y arranque. Configuré mi sistema con Raspbian Stretch Lite (Sin GUI) versión Nov 2017. Configure WiFi si es necesario, prefiero ajustar el zona horaria a la zona horaria actual en lugar de UTC. Puede hacer esto a través del comando: $ sudo dpkg-reconfigure tzdata El resto de la instrucción asume que la configuración se realiza a través de la interfaz de línea de comandos.
Paso 2: Configurar MySQL en Raspberry Pi
Es útil tener una base de datos instalada localmente para almacenar todos los datos capturados. Instalar MySQL en Raspberry Pi es muy fácil. Tampoco es difícil modificar el script para conectarse a un servidor SQL externamente, puede omitir este paso si desea utilizar un servidor SQL en la red. Hay muchas instrucciones en la red, sugiero esto: https:// www.stewright.me/2014/06/tutorial-install-…
Una vez que el servidor SQL está instalado, puede usar el cliente CLI de MySQL para crear un usuario, una base de datos y una tabla. Para ingresar a la CLI de MySQL, use el comando:
$ sudo mysql -uroot-p Primero, cree un usuario local para insertar los datos capturados:> CREAR USUARIO 'datasrc' @ 'localhost' IDENTIFICADO POR 'datasrc000'; A continuación, cree una base de datos y una tabla:> CREAR BASE DE DATOS SensorBug; Configurando el usuario permiso:> OTORGAR TODOS LOS PRIVILEGIOS EN SensorBug. * A 'datasrc' @ 'localhost'; Ahora agregue una nueva tabla a la base de datos. Para este ejemplo, voy a agregar una tabla con las siguientes columnas: FECHA, HORA, DIRECCIÓN, UBICACIÓN, TEMPERATURA y ACCERÓMETRO
- FECHA / HORA: esta es la fecha y hora en que se registran los datos
- DIRECCIÓN: esta es la MAC del SensorBug desde el que se captura el mensaje
- UBICACIÓN: una cadena legible por humanos para indicar dónde se encuentra el sensor
- TEMPERATURA: esta es la temperatura registrada
- ACCELE: este es el valor de la salida del acelerómetro, útil para registrar la posición del sensor (si está habilitado)
El comando que hace esto es:> USE SensorBug; > CREAR TABLA de datos (fecha FECHA, hora HORA, dirección TINYTEXT, ubicación TINYTEXT, temperatura FLOAT, aceleración INT); Ahora que la base de datos está lista, podemos pasar a configurar los sensorBugs.
Paso 3: Configuración de SensorBugs
Los errores del sensor son pequeños dispositivos bastante geniales. Desafortunadamente, el fabricante solo proporcionó la aplicación IOS para programarlo. Sin embargo, aún es posible trabajar con él si solo tiene un dispositivo Android. Primer paso, empareje el dispositivo con un teléfono. Sin emparejar el dispositivo, el SensorBug no publicará datos. Traté de ver si puedo hacer esto directamente con RaspberryPi, desafortunadamente, parece que el controlador Bluetooth LE en RaspberryPi todavía es experimental y contiene errores para evitar que se empareje con dispositivos Bluetooth LE. La versión futura del controlador blueZ podría solucionar este problema, pero como la escritura actual, no hay forma de emparejar el SensorBug con RaspberryPi. Afortunadamente, no necesitamos emparejar el dispositivo para capturar los datos anunciados. Lo único que necesitamos es un teléfono para configurar el SensorBug. De forma predeterminada, el SensorBug comenzará a anunciar los datos de temperatura en un intervalo de 1 segundo una vez que esté emparejado con un dispositivo. Para capturar datos de temperatura, eso es todo lo que se necesita. Si planea expandirse para usar el sensor de posición o de luz, será necesario configurar el dispositivo. Para empezar, emparejaremos el dispositivo y lo desconectaremos. Esto será lo suficientemente bueno para fines de captura de temperatura. Comience presionando ambos botones en el SensorBug. El LED azul / verde parpadeará, lo que indica que está encendido. Presione uno de los botones, el LED verde debe encenderse, indica que la energía está encendida. Si el LED verde no está encendido, presione ambos botones para intentar encender el dispositivo nuevamente. Presione y mantenga presionado uno de los botones hasta que el LED azul comience a parpadear. Esto pondrá el dispositivo en modo de emparejamiento. Vaya al menú de configuración de Bluetooth en el teléfono y busque el dispositivo SensorBug. Una vez que aparezca, selecciónelo para emparejarlo con el dispositivo. Eso es todo, ahora el SensorBug está encendido y anuncia los datos de temperatura.
Paso 4: Instalación de la envoltura de Python Bluetooth LE
A continuación, debemos instalar la biblioteca para que Python hable con la pila Bluetooth LE. Las instrucciones se pueden encontrar aquí: https://github.com/IanHarvey/bluepy Para Python 2.7, es tan simple como ingresar los siguientes comandos:
$ sudo apt-get install python-pip libglib2.0-dev $ sudo pip install bluepy
Paso 5: escanee y averigüe la dirección del SensorBug
Para averiguar la dirección MAC de SensorBug, use este comando: $ sudo hcitool lescan Debería ver un resultado como:
EC: FE: 7E: 10: B1: 92 (desconocido) Si tiene muchos dispositivos Bluetooth LE, puede ser difícil saber con cuál está hablando. Puede probar bluetoothctl que brinda más detalles:
$ sudo bluetoothctl [bluetooth] # scan on [NEW] Device EC: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Key: 0x0085 [CHG] Device EC: FE: 7E: 10: B1: 92 Valor de ManufacturerData: 0x02 [CHG] Dispositivo EC: FE: 7E: 10: B1: 92 Valor de ManufacturerData: 0x00 [CHG] Dispositivo EC: FE: 7E: 10: B1: 92 Valor de ManufacturerData: 0x3c [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x25 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 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 ManufacturerData Valor: 0x43 [CHG] Dispositivo EC: FE: 7E: 10: B1: 92 ManufacturerData Valor: 0x0b [CHG] Dispositivo EC: FE: 7E: 10: B1: 92 ManufacturerData Valor: 0x01 [CHG] EC del dispositivo: FE: 7E: 10: B1: 92 Valor de datos del fabricante: 0x6f
Registre la dirección MAC, será necesario ingresarla en el script de Python para filtrar los dispositivos Bluetooth LE no deseados
Paso 6: agregue la secuencia de comandos de Python
Una copia de la secuencia de comandos de Python está disponible en:
drive.google.com/open?id=10vOeEAbS7mi_eXn_…
Aquí está el mismo archivo, cuide la sangría al copiar:
Además, actualice la dirección MAC en el archivo Python para que coincida con la dirección del sensor obtenida del resultado del escaneo.
# Este programa es software libre: puedes redistribuirlo y / o modificar
# bajo los términos de la Licencia Pública General GNU publicada por
# la Free Software Foundation, ya sea la versión 3 de la Licencia, o
# (a su elección) cualquier versión posterior.
#
# Este programa se distribuye con la esperanza de que sea útil, # pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de
# COMERCIABILIDAD o APTITUD PARA UN PROPÓSITO EN PARTICULAR. Ver el
# Licencia pública general GNU para más detalles.
#
# Debería haber recibido una copia de la Licencia Pública General GNU
# junto con este programa. Si no, mira.
# bscan.py - Extractor de datos y escáner Bluetooth LE simple
desde bluepy.btle import Scanner, DefaultDelegate
tiempo de importación
importar pymysql
importar estructura
nombre de host = 'localhost'
nombre de usuario = 'datasrc'
contraseña = 'datasrc000'
base de datos = 'SensorBug'
#Introduzca la dirección MAC del sensor del lescan
SENSOR_ADDRESS = ["ec: fe: 7e: 10: b9: 92", "ec: fe: 7e: 10: b9: 93"]
SENSOR_LOCATION = ["Garaje", "Exterior"]
clase DecodeErrorException (Excepción):
def _init _ (self, value):
self.value = valor
def _str _ (yo):
return repr (valor propio)
clase ScanDelegate (DefaultDelegate):
def _init _ (yo):
DefaultDelegate._ init _ (auto)
def handleDiscovery (self, dev, isNewDev, isNewData):
si esNewDev:
imprimir "Dispositivo descubierto", dev.addr
elif isNewData:
imprimir "Nuevos datos recibidos de", dev.addr
def doQueryInsert (conn, addr, loc, temp, accero):
La tabla #blesensor es fecha, hora, dirección, ubicación, temperatura, acceso
cur = conn.cursor ()
dostr = 'INSERT INTO data VALUES (FECHA_CURRENTE (), AHORA (),% s,% s,% s,% s);'
cur.execute (dostr, (addr, loc, temp, accero))
conn.commit ()
escáner = Escáner (). withDelegate (ScanDelegate ())
myConnection = pymysql.connect (host = nombre de host, usuario = nombre de usuario, contraseña = contraseña, db = base de datos)
ManuDataHex =
ReadLoop = True
tratar:
while (ReadLoop):
dispositivos = scanner.scan (2.0)
ManuData = ""
para desarrollo en dispositivos:
entrada = 0
AcceroData = 0
AcceroType = 0
TempData = 0
para saddr en SENSOR_ADDRESS:
entrada + = 1
si (dev.addr == saddr):
imprimir "Dispositivo% s (% s), RSSI =% d dB"% (dev.addr, dev.addrType, dev.rssi)
CurrentDevAddr = saddr
CurrentDevLoc = SENSOR_LOCATION [entrada-1]
para (adtype, desc, value) en dev.getScanData ():
imprimir "% s =% s"% (desc, valor)
if (desc == "Fabricante"):
ManuData = valor
si (ManuData == ""):
imprimir "No se han recibido datos, finalizar la decodificación"
Seguir
#print ManuData
para i, j en zip (ManuData [:: 2], ManuData [1:: 2]):
ManuDataHex.append (int (i + j, 16))
# Comience a decodificar los datos brutos del fabricante
si ((ManuDataHex [0] == 0x85) y (ManuDataHex [1] == 0x00)):
imprimir "Byte de encabezado 0x0085 encontrado"
demás:
imprimir "Byte de encabezado 0x0085 no encontrado, decodificación detenida"
Seguir
# Saltar Mayor / Menor
# El índice 5 es 0x3c, indica el nivel de la batería y el # de configuración
si (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 "Datos:" + hex (ManuDataHex [idx])
si (ManuDataHex [idx] == 0x41):
#Datos del acelerómetro
idx + = 1
AcceleroType = ManuDataHex [idx]
AcceleroData = ManuDataHex [idx + 1]
idx + = 2
elif (ManuDataHex [idx] == 0x43):
# Datos de temperatura
idx + = 1
TempData = ManuDataHex [idx]
TempData + = ManuDataHex [idx + 1] * 0x100
TempData = TempData * 0.0625
idx + = 2
demás:
idx + = 1
imprimir "Dirección del dispositivo:" + CurrentDevAddr
imprimir "Ubicación del dispositivo:" + CurrentDevLoc
imprimir "Nivel de batería:" + str (BatteryLevel) + "%"
imprimir "Config Contador:" + str (ConfigCounter)
imprimir "Accelero Data:" + hex (AcceleroType) + "" + hex (AcceleroData)
imprimir "Datos temporales:" + str (TempData)
doQueryInsert (myConnection, CurrentDevAddr, CurrentDevLoc, TempData, AcceleroData)
ReadLoop = False
excepto DecodeErrorException:
aprobar
Paso 7: Pruebe el script de Python
El script debe ejecutarse en la raíz, por lo que:
$ sudo python bscan.py Dispositivo descubierto ec: 6e: 7e: 10: b1: 92 Dispositivo ec: 6e: 7e: 10: b1: 92 (público), RSSI = -80 dB Banderas = 06 Incompleto 16b Servicios = 0a18 Fabricante = 850002003c25094102024309016f Se encontró el byte de encabezado 0x0085 Dirección del dispositivo: ec: 6e: 7e: 10: b1: 92 Ubicación del dispositivo: Garaje Nivel de batería: 37% Contador de configuración: 9 Datos de Accero: 0x2 0x2 Datos de temperatura: 16.5625
Paso 8: agregue Python Scrip a Crontab
El script de Python debe ejecutarse en la raíz, por lo que si desea capturar los datos automáticamente, deberá agregarlo al crontab de la raíz. Para este ejemplo, ejecuto el script cada 20 minutos Use el comando:
$ sudo crontab -e
# Edite este archivo para introducir las tareas que debe ejecutar cron.
# # Cada tarea a ejecutar debe definirse a través de una sola línea # indicando con diferentes campos cuándo se ejecutará la tarea # y qué comando ejecutar para la tarea # # Para definir el tiempo puede proporcionar valores concretos para # minuto (m), hora (h), día del mes (dom), mes (mon), # y día de la semana (dow) o use '*' en estos campos (para 'cualquier'). # # Observe que las tareas se iniciarán basado en la noción de tiempo y zonas horarias del # daemon del sistema Cron. # # La salida de los trabajos crontab (incluidos los errores) se envía por # correo electrónico al usuario al que pertenece el archivo crontab (a menos que se redirija). # # Por ejemplo, puede ejecutar una copia de seguridad de todas sus cuentas de usuario # a las 5 am cada semana con: # 0 5 * * 1 tar -zcf /var/backups/home.tgz / home / # # Para obtener más información, consulte el páginas de manual de crontab (5) y cron (8) # # mh dom mon dow command 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * python /home/pi/bscan.py
Eso es todo. La secuencia de comandos de Python se ejecutará a intervalos regulares y recodificará la salida en la base de datos SQL.
Paso 9: Extra: Configure el SensorBug para la salida de detección de posición
Es posible configurar el SensorBug en Android para la salida de detección de posición Para la detección de cambio de posición, la llamada detección de puerta de garaje, el SensorBug detectará si el dispositivo está de pie o acostado en posición horizontal. Cuando el dispositivo está plano, el valor registrado es 0x20 mientras que si el dispositivo está en posición vertical, el valor es 0x02 No diferencia si la posición X o Y está hacia arriba, siempre que el eje Z no esté hacia arriba o hacia abajo. La forma más fácil de hacerlo es usar la aplicación LightBlue. El SensorBug debería aparecer en el menú de escaneo Seleccione el dispositivo que desea configurar, vaya a las características GATT para la configuración del acelerómetro UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11
Ver imagen: Escriba una nueva cadena de configuración:
010d3f02020000002d00000002 Vuelve a leer la cadena de configuración para confirmar la escritura. Esto habilita el acelerómetro para la detección de posición.
Recomendado:
Supervise la temperatura y la humedad con AM2301 en NodeMCU y Blynk: 3 pasos
Monitoree la temperatura y la humedad con AM2301 en NodeMCU y Blynk: es un hecho muy conocido que en la mayoría de las verticales de la industria, la temperatura, la humedad, la presión, la calidad del aire, la calidad del agua, etc., juegan factores importantes que deben monitorearse de manera continua y necesaria los sistemas de alerta deben estar en su lugar cuando el valor
Plataforma base de IoT con RaspberryPi, WIZ850io: Controlador de dispositivo de plataforma: 5 pasos (con imágenes)
Plataforma base de IoT con RaspberryPi, WIZ850io: Controlador de dispositivo de plataforma: conozco la plataforma RaspberryPi para IoT. Recientemente, WIZ850io fue anunciado por WIZnet. Así que implementé una aplicación RaspberryPi mediante la modificación del SW de Ethernet porque puedo manejar un código fuente fácilmente. Puede probar el controlador de dispositivo de plataforma a través de RaspberryPi
Supervise el nivel o la distancia del agua del tanque en su escritorio: 3 pasos
Supervise el nivel o la distancia del agua del tanque en su escritorio: utilizando Wemos D1, un sensor ultrasónico y la plataforma Thingio.AI IoT
Termómetro de cocina con sonda de temperatura ESP32 NTP con corrección Steinhart-Hart y alarma de temperatura: 7 pasos (con imágenes)
Termómetro de cocción con sonda de temperatura ESP32 NTP con corrección Steinhart-Hart y alarma de temperatura: Aún en camino para completar un " proyecto próximo ", " Termómetro de cocina con sonda de temperatura ESP32 NTP con corrección Steinhart-Hart y alarma de temperatura " es un Instructable que muestra cómo agrego una sonda de temperatura NTP, piezo b
Supervise la temperatura ambiente de su hogar / oficina en su escritorio: 4 pasos
Monitoree la temperatura de la habitación en el hogar / oficina en su escritorio: Para monitorear habitaciones u oficinas o en cualquier lugar donde podamos usar este proyecto y eso se muestra con tantos detalles como gráficos, temperatura en tiempo real y mucho más. Estamos usando: https://thingsio.ai/ En primer lugar, tenemos que hacer una cuenta en esta plataforma de IoT, y