Índice:
- Etapa 1: configurar o Raspberry Pi
- Etapa 2: configurar o MySQL no Raspberry Pi
- Etapa 3: Configurando os SensorBugs
- Etapa 4: Instalando o Wrapper Bluetooth LE Python
- Etapa 5: Faça a varredura e descubra o endereço do SensorBug
- Etapa 6: adicione o script Python
- Etapa 7: teste o script Python
- Etapa 8: adicione o script Python ao Crontab
- Etapa 9: Extra: Configurar o SensorBug para saída de detecção de posição
Vídeo: Monitore e registre a temperatura com Bluetooth LE e RaspberryPi: 9 etapas (com imagens)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:37
Este instrutivo é sobre como montar um sistema de monitoramento de temperatura de vários nós com bug do sensor Bluetooth LE da Blue Radios (BLEHome) e RaspberryPi 3B. Graças ao desenvolvimento do padrão Bluetooth LE, agora existem sensores sem fio de baixa potência prontamente disponíveis no mercado por um custo muito baixo e pode ser executado em uma única célula tipo moeda por meses a fio. Um desses sensores que peguei é da Blue Radio, chamado Sensor Bugs. Custando cerca de US $ 25 na Amazon, é um dispositivo Bluetooth LE com sensor de temperatura, sensor de luz e acelerômetro, todos integrados em uma pequena unidade que pode se comunicar sem fio. É uma combinação perfeita para Raspberry Pi 3B, que tem suporte integrado para rádio Bluetooth LE.
Etapa 1: configurar o Raspberry Pi
O primeiro passo é obter uma configuração do Raspberry Pi funcional. Siga as instruções do site do Raspberry Pi, carregue o Raspbian em um cartão SD, insira no Raspberry Pi e inicialize-o. Eu configurei meu sistema com Raspbian Stretch Lite (Sem GUI) versão de novembro de 2017. Configure o WiFi, se necessário, prefiro ajustar o fuso horário para o fuso horário atual em vez de UTC. Você pode fazer isso por meio do comando: $ sudo dpkg-reconfigure tzdataRest da instrução assume que a configuração é feita por meio da interface de linha de comando.
Etapa 2: configurar o MySQL no Raspberry Pi
É útil ter um banco de dados instalado localmente para armazenar todos os dados capturados. Instalar o MySQL no Raspberry Pi é muito fácil. Também não é difícil modificar o script para se conectar a um servidor SQL externamente, você pode pular esta etapa se desejar usar um servidor SQL na rede. Existem muitas instruções na rede, sugiro isto: https:// www.stewright.me/2014/06/tutorial-install-…
Depois que o servidor SQL estiver instalado, você pode usar o cliente MySQL CLI para criar usuário, banco de dados e tabela. Para entrar no MySQL CLI, use o comando:
$ sudo mysql -uroot-pFirst, crie um usuário local para inserir os dados capturados:> CRIAR USUÁRIO 'datasrc' @ 'localhost' IDENTIFICADO POR 'datasrc000'; Em seguida, crie um banco de dados e uma tabela:> CREATE DATABASE SensorBug; Configurando o usuário permissão:> GRANT ALL PRIVILEGES ON SensorBug. * TO 'datasrc' @ 'localhost'; Agora adicione uma nova tabela ao banco de dados. Para este exemplo, vou adicionar uma tabela com as seguintes colunas: DATA, HORA, ENDEREÇO, LOCALIZAÇÃO, TEMPERATURA e ACERÔMETRO
- DATA / HORA - Esta é a data e hora em que os dados são gravados
- ENDEREÇO - Este é o MAC do SensorBug do qual a mensagem é capturada
- LOCALIZAÇÃO - Uma string legível para indicar onde o sensor está localizado
- TEMPERATURA - Esta é a temperatura registrada
- ACCELE - Este é o valor da saída do acelerômetro, útil para registrar a posição do sensor (se habilitado)
O comando que faz isso é:> USE SensorBug; > CREATE TABLE data (data DATE, time TIME, endereço TINYTEXT, localização TINYTEXT, temperatura FLOAT, accele INT); Agora o banco de dados está pronto, podemos passar a configurar os sensoresBugs.
Etapa 3: Configurando os SensorBugs
Os bugs do sensor são pequenos dispositivos muito legais. Infelizmente, o fabricante forneceu apenas um aplicativo IOS para programá-lo. No entanto, ainda é possível trabalhar com ele se você tiver apenas um dispositivo Android. Primeiro passo, emparelhe o dispositivo com um telefone. Sem emparelhar o dispositivo, o SensorBug não anunciará dados. Tentei ver se posso fazer isso diretamente com o RaspberryPi, infelizmente, parece que o driver Bluetooth LE no RaspberryPi ainda é experimental e contém bugs para impedir que seja emparelhado com dispositivos Bluetooth LE. A versão futura do driver blueZ pode consertar isso, mas conforme a escrita atual, não há como emparelhar o SensorBug com RaspberryPi. Felizmente, não precisamos emparelhar o dispositivo para capturar seus dados anunciados. A única coisa que precisamos é de um telefone para configurar o SensorBug. Por padrão, o SensorBug começará a anunciar os dados de temperatura em intervalos de 1s, uma vez que seja emparelhado com um dispositivo. Para capturar dados de temperatura, isso é tudo o que é necessário. Se você planeja expandir para usar o sensor de posição ou luz, então a configuração do dispositivo será necessária. Para começar, vamos emparelhar o dispositivo e desconectar. Isso será bom o suficiente para fins de captura de temperatura. Comece pressionando os dois botões no SensorBug. O LED azul / verde piscará, indicando que está ligado. Pressione um dos botões, o LED verde deve acender, indicando que a alimentação está ligada. Se o LED verde não estiver aceso, pressione os dois botões para tentar ligar o dispositivo novamente. Pressione e segure um dos botões até que o LED azul comece a piscar. Isso colocará o dispositivo em modo de emparelhamento. Vá para o menu de configuração do Bluetooth no telefone e procure o dispositivo SensorBug. Assim que aparecer, selecione-o para emparelhar com o dispositivo. É isso, agora o SensorBug está ligado e anunciando os dados de temperatura
Etapa 4: Instalando o Wrapper Bluetooth LE Python
Em seguida, precisamos instalar a biblioteca para python para falar com a pilha Bluetooth LE. A instrução pode ser encontrada aqui: https://github.com/IanHarvey/bluepyFor Python 2.7, é tão simples quanto inserir os seguintes comandos:
$ sudo apt-get install python-pip libglib2.0-dev $ sudo pip install bluepy
Etapa 5: Faça a varredura e descubra o endereço do SensorBug
Para descobrir o endereço MAC do SensorBug, use este comando: $ sudo hcitool lescan Você deve ver uma saída como:
EC: FE: 7E: 10: B1: 92 (desconhecido) Se você tiver muitos dispositivos Bluetooth LE por perto, pode ser difícil descobrir com qual deles você está falando. Você pode tentar o bluetoothctl, que fornece mais detalhes:
$ sudo bluetoothctl [bluetooth] # scan on [NEW] Dispositivo EC: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] Dispositivo EC: FE: 7E: 10: B1: 92 FabricanteChave de dados: 0x0085 [CHG] Dispositivo EC: FE: 7E: 10: B1: 92 Valor de dados do fabricante: 0x02 [CHG] Dispositivo EC: FE: 7E: 10: B1: 92 Valor de dados do fabricante: 0x00 [CHG] EC do dispositivo: FE: 7E: 10: B1: 92 Valor de dados do fabricante: 0x3c [CHG] Dispositivo EC: FE: 7E: 10: B1: 92 Valor de dados do fabricante: 0x25 [CHG] Dispositivo EC: FE: 7E: 10: B1: 92 Valor de dados do fabricante: 0x09 [CHG] Dispositivo EC: FE: 7E: 10: B1: 92 Valor de dados do fabricante: 0x41 [CHG] Dispositivo EC: FE: 7E: 10: B1: 92 Valor de dados do fabricante: 0x02 [CHG] Dispositivo EC: FE: 7E: 10: B1: 92 Valor de dados do fabricante: 0x02 [CHG] Dispositivo EC: FE: 7E: 10: B1: 92 Valor dos dados do fabricante: 0x43 [CHG] Dispositivo EC: FE: 7E: 10: B1: 92 Valor dos dados do fabricante: 0x0b [CHG] EC do dispositivo: FE: 7E: 10: B1: 92 Dados do fabricante Valor: 0x01 [CHG] Dispositivo EC: FE: 7E: 10: B1: 92 FabricanteData Valor: 0x6f
Registre o endereço MAC, ele precisará ser inserido no script python para filtrar dispositivos Bluetooth LE indesejados
Etapa 6: adicione o script Python
Uma cópia do script Python está disponível em:
drive.google.com/open?id=10vOeEAbS7mi_eXn_…
Aqui está o mesmo arquivo, tome cuidado com o recuo ao copiar:
Além disso, atualize o endereço MAC no arquivo python para corresponder ao endereço do sensor obtido do resultado da varredura.
# Este programa é um software livre: você pode redistribuí-lo e / ou modificar
# sob os termos da GNU General Public License conforme publicada por
# a Free Software Foundation, seja a versão 3 da Licença, ou
# (à sua escolha) qualquer versão posterior.
#
# Este programa é distribuído na esperança de ser útil, # mas SEM QUALQUER GARANTIA; sem mesmo a garantia implícita de
# COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM DETERMINADO FIM. Veja o
# GNU General Public License para mais detalhes.
#
# Você deve ter recebido uma cópia da GNU General Public License
# junto com este programa. Se não, veja.
# bscan.py - Leitor e extrator de dados bluetooth LE simples
de bluepy.btle import Scanner, DefaultDelegate
tempo de importação
importar pymysql
importar estrutura
hostname = 'localhost'
username = 'datasrc'
senha = 'datasrc000'
banco de dados = 'SensorBug'
# Digite o endereço MAC do sensor do lescan
SENSOR_ADDRESS = ["ec: fe: 7e: 10: b9: 92", "ec: fe: 7e: 10: b9: 93"]
SENSOR_LOCATION = ["Garagem", "Exterior"]
classe DecodeErrorException (Exception):
def _init _ (self, value):
self.value = value
def _str _ (self):
return repr (self.value)
classe ScanDelegate (DefaultDelegate):
def _init _ (self):
DefaultDelegate._ init _ (self)
def handleDiscovery (self, dev, isNewDev, isNewData):
if isNewDev:
imprimir "Dispositivo descoberto", dev.addr
elif isNewData:
print "Recebidos novos dados de", dev.addr
def doQueryInsert (conn, addr, loc, temp, accero):
#blesensor table is date, time, addr, location, temp, accero
cur = conn.cursor ()
dostr = 'INSERT INTO data VALUES (CURRENT_DATE (), NOW (),% s,% s,% s,% s);'
cur.execute (dostr, (addr, loc, temp, accero))
conn.commit ()
scanner = Scanner (). withDelegate (ScanDelegate ())
myConnection = pymysql.connect (host = hostname, user = username, passwd = password, db = database)
ManuDataHex =
ReadLoop = True
Experimente:
while (ReadLoop):
devices = scanner.scan (2.0)
ManuData = ""
para dev em dispositivos:
entrada = 0
AcceroData = 0
AcceroType = 0
TempData = 0
para saddr em SENSOR_ADDRESS:
entrada + = 1
if (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) em dev.getScanData ():
imprimir "% s =% s"% (desc, valor)
if (desc == "Fabricante"):
ManuData = valor
if (ManuData == ""):
imprimir "Nenhum dado recebido, finalizar a decodificação"
Prosseguir
#print ManuData
para i, j no zip (ManuData [:: 2], ManuData [1:: 2]):
ManuDataHex.append (int (i + j, 16))
# Comece a decodificar os dados brutos do fabricante
if ((ManuDataHex [0] == 0x85) e (ManuDataHex [1] == 0x00)):
imprimir "Cabeçalho byte 0x0085 encontrado"
outro:
print "Cabeçalho byte 0x0085 não encontrado, parada de decodificação"
Prosseguir
#Skip Major / Minor
#Index 5 é 0x3c, indica o nível da bateria e config #
if (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 "Dados:" + hex (ManuDataHex [idx])
if (ManuDataHex [idx] == 0x41):
#Accerometer data
idx + = 1
AcceleroType = ManuDataHex [idx]
AcceleroData = ManuDataHex [idx + 1]
idx + = 2
elif (ManuDataHex [idx] == 0x43):
#Temperature data
idx + = 1
TempData = ManuDataHex [idx]
TempData + = ManuDataHex [idx + 1] * 0x100
TempData = TempData * 0,0625
idx + = 2
outro:
idx + = 1
imprimir "Endereço do dispositivo:" + CurrentDevAddr
imprimir "Localização do dispositivo:" + CurrentDevLoc
imprimir "Nível da bateria:" + str (BatteryLevel) + "%"
imprimir "Contador de configuração:" + str (ConfigCounter)
imprimir "Dados Accelero:" + hex (AcceleroType) + "" + hex (AcceleroData)
imprimir "Temp Data:" + str (TempData)
doQueryInsert (myConnection, CurrentDevAddr, CurrentDevLoc, TempData, AcceleroData)
ReadLoop = False
exceto DecodeErrorException:
passar
Etapa 7: teste o script Python
O script deve ser executado na raiz, então:
$ sudo python bscan.pyDiscovered device ec: 6e: 7e: 10: b1: 92 Dispositivo ec: 6e: 7e: 10: b1: 92 (público), RSSI = -80 dB Sinalizadores = 06 Incompleto 16b Services = 0a18 Fabricante = 850002003c25094102024309016f Byte do cabeçalho 0x0085 encontrado Endereço do dispositivo: ec: 6e: 7e: 10: b1: 92 Localização do dispositivo: Nível da bateria da garagem: 37% Contador de configuração: 9 Dados Accero: 0x2 0x2 Dados Temp: 16.5625
Etapa 8: adicione o script Python ao Crontab
O script python deve ser executado na raiz, portanto, se você quiser capturar os dados automaticamente, será necessário adicioná-los ao crontab da raiz. Para este exemplo, eu executo o script a cada 20 minutos Use o comando:
$ sudo crontab -e
# Edite este arquivo para apresentar as tarefas a serem executadas pelo cron.
# # Cada tarefa a ser executada deve ser definida através de uma única linha # indicando com diferentes campos quando a tarefa será executada # e qual comando executar para a tarefa # # Para definir o tempo você pode fornecer valores concretos para # minuto (m), hora (h), dia do mês (dom), mês (mon), # e dia da semana (dow) ou use '*' nestes campos (para 'qualquer'). # # Observe que as tarefas serão iniciadas com base na noção do # daemon do sistema cron de tempo e fusos horários. # # A saída dos jobs do crontab (incluindo erros) é enviada por meio de # e-mail ao usuário ao qual o arquivo crontab pertence (a menos que seja redirecionado). # # Por exemplo, você pode executar um backup de todas as suas contas de usuário # às 5h todas as semanas com: # 0 5 * * 1 tar -zcf /var/backups/home.tgz / home / # # Para obter mais informações, consulte o páginas de manual de crontab (5) e 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
É isso. O script python será executado em intervalos regulares e recodificará a saída no banco de dados SQL
Etapa 9: Extra: Configurar o SensorBug para saída de detecção de posição
É possível configurar o SensorBug no Android para saída de detecção de posição. Para detecção de mudança de posição, chamada de porta de garagem. Detecção, o SensorBug detectará se o dispositivo está em pé ou deitado. Quando o dispositivo está plano, o valor registrado é 0x20 enquanto se o dispositivo estiver em pé, o valor é 0x02Não diferencia se a posição X ou Y está para cima, desde que o eixo Z não esteja para cima ou para baixo. A maneira mais fácil de fazer isso é usar o aplicativo LightBlue. O SensorBug deve aparecer no menu de varredura. Selecione o dispositivo que deseja configurar, vá para as características do GATT para configuração do acelerômetro UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11
Veja a imagem: Escreva uma nova string de configuração:
010d3f02020000002d00000002Reia a string de configuração para confirmar a gravação. Isso ativa o acelerômetro para detecção de posição.
Recomendado:
Série IoT ESP8266: 2- Monitore dados por meio de ThingSpeak.com: 5 etapas
Série IoT ESP8266: 2- Monitore dados por meio de ThingSpeak.com: Esta é a parte dois da Série IoT ESP8266. Para ver a parte 1, consulte esta IoT Série ESP8266 instrutível: 1 Conecte-se ao roteador WIFI. Esta parte tem como objetivo mostrar como enviar seus dados de sensor para um dos populares serviços de nuvem gratuitos IoT https: //thingspeak.com
Faça você mesmo: monitore a bateria do seu carro: Código e configuração: 8 etapas
DIY: Monitore a bateria do seu carro: Código e configuração: Ter a capacidade de monitorar a bateria do seu carro pode evitar algumas surpresas desagradáveis. Vou mostrar como montei o hardware, carreguei o software e instalei o monitor no meu carro. Usarei a placa ESP8266 chamada Wemos D1 Mini
Monitore o nível ou distância da água do tanque em sua área de trabalho: 3 etapas
Monitore o nível ou distância da água do tanque em sua área de trabalho: usando Wemos D1, um sensor ultrassônico e a plataforma Thingio.AI IoT
Monitore a temperatura da sala de casa / escritório em sua área de trabalho: 4 etapas
Monitore a Temperatura da Sala de Casa / Escritório na Sua Área de Trabalho: Para monitorar salas ou escritórios ou qualquer lugar que possamos usar este projeto e que se mostra com tantos detalhes como gráfico, temperatura em tempo real e muito mais. Estamos usando: https://thingsio.ai/ Em primeiro lugar, temos que criar uma conta nesta plataforma IoT, um
MONITORE SEU JARDIM: 16 etapas (com imagens)
MONITORE SEU JARDIM: Monitore seu jardim de qualquer lugar, use o monitor local para monitorar as condições do solo localmente ou use o celular para monitorar remotamente. O circuito usa sensor de umidade do solo, juntamente com temperatura e umidade para alertar sobre as condições ambientais do solo