Automação básica com bluetooth BLE na Raspberry Pi
A Raspberry Pi é, indiscutivelmente, uma das plataformas de desenvolvimento mais utilizadas no mundo. O motivo é que, além de sua comunidade muito ativa, a Raspberry Pi conta com muitos recursos de hardware, o que viabiliza uma grande gama de projetos. Um dos recursos mais interessantes dela é o fato de ter Bluetooth (BLE, no caso) já “nativa”. Aproveitando este recurso, este post mostrará como usar um scan bluetooth para fazer uma automação básica e simples usando bluetooth BLE na Raspberry Pi 3.
Material necessário
Para reproduzir este projeto, você precisará de:
- Raspberry PI 3
- Um módulo relé 5V 2 canais
- Protoboard de 830 pontos
- Dois transistores BC337
- Quatro resistores de 2k 1/4W
- Uma fonte ajustável protoboard
- Jumpers diversos
- Dispositivos diversos com Bluetooth (celulares, computadores, módulos HC05, etc.)
Overview do projeto Bluetooth BLE na Raspberry Pi
O projeto de Automação básica com Bluetooth BLE na Raspberry Pi aqui abordado fará o seguinte: periodicamente, um scan do Bluetooth (BLE) será feito. Dele, serão obtidos os nomes dos dispositivos e endereços MAC de todos os dispositivos detectáveis / visíveis. Com base nos dispositivos descobertos, cada um passará por uma rotina de acionamentos, a qual tomará algumas ações dependendo de quem for detectado.
No caso, as ações serão acionar canais de um módulo de 2 relés, o que poderá facilmente ser convertido em acionamento de quaisquer dispositivos com alimentação AC, como lâmpadas, por exemplo.
Instalação de bibliotecas necessárias
Antes de prosseguirmos, é necessário instalar o pybluez, para assim conseguirmos interagir com o Bluetooth da Raspbery PI 3 através da linguagem de programação Python. Para isso, execute os seguintes comandos no terminal da Raspberry PI 3:
1 2 3 4 | sudo apt-get update sudo apt-get install python-pip python-dev ipython sudo apt-get install bluetooth libbluetooth-dev sudo pip install pybluez |
Descobrindo os endereços MAC de seus dispositivos
Antes de partir para o projeto em si, precisaremos descobrir os endereços MAC dos dispositivos que você possui. Em resumo, o endereço MAC de um Bluetooth é um identificador único, permitindo diferenciar um dispositivo Bluetooth dentre todos os existentes. Portanto, identificar um dispositivo no projeto pelo seu endereço MAC é uma estratégia perfeita para acionamentos personalizados por dispositivo.
Para descobrir os endereços MAC dos seus dispositivos, foi elaborado o programa abaixo, feito em Python.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import time import bluetooth def search(): devices = bluetooth.discover_devices(duration = 20 , lookup_names = True ) return devices #------------------ #Programa principal #------------------ while True : print "[SCAN] Scan BLE sendo realizado. Aguarde..." results = search() print "[SCAN] Fim do scan BLE." if (results! = None ): for addr, name in results: print "Dispositivo encontrado: {0} - {1}" . format (addr, name) time.sleep( 1 ) print " " |
Copie o código-fonte e salve-o como ScanBLE.py. Para utilizá-lo, siga as orientações:
- Ligue os dispositivos Bluetooth que deseja utilizar no projeto. Atente para deixá-los visíveis, caso contrário eles poderão não ser detectados.
- Ligue o Bluetooth da Raspberry PI (através da interface gráfica da Raspbian).
- Devido ao fato dos dados do Bluetooth na Raspberry PI 3B serem acessíveis somente a quem é super-usuário, execute o programa como sudo. Observe a chamada de execução abaixo:1
sudo
python ScanBLE.py
- Os resultados podem demorar algumas dezenas de segundos para aparecer (pois, no programa, cada scan foi programado para durar 20 segundos). Eles aparecerão no formato “Endereço – nome do dispositivo”, conforme imagem a seguir. Anote os endereços e nomes de dispositivos descobertos.
Circuito esquemático do projeto
O circuito esquemático do projeto pode ser visto abaixo.
Código-fonte do projeto
Abaixo segue o código-fonte do projeto.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | #Projeto: Automacao usando Bluetooth BLE na Raspberry Pi (scan de dispositivos) #Autor: Pedro Bertoleti e FilipeFlop #Data: Agosto/2017 #imports import time import bluetooth import RPi.GPIO as GPIO #variaveis globais MACPermitido1 = "MM:MM:MM:MM:MM:MM" #coloque aqui o endereco MAC de um dispositivo que devera acionar um dos canais do modulo de reles MACPermitido2 = "MM:MM:MM:MM:MM:MM" #coloque aqui o endereco MAC de um dispositivo que devera acionar um dos canais do modulo de reles ReleCanal1 = 23 #controle do GPIO23 (este controla o canal 1 do modulo de reles) ReleCanal2 = 24 #controle do GPIO24 (este controla o canal 2 do modulo de reles) #Implementacoes #Funcao: verifica se alguma acao deve ser tomada para algum dispositivo encontrado #Parametros: endereco MAC do dispositivo encontrado #Retorno: nenhum def VerificaDispositivosLista(MACDisp): global MACPermitido1 global MACPermitido2 DispositivoPermitidoDetectado = 0 if (MACDisp = = MACPermitido1): #dispositivo encontrado. Dispara acao correspondente DispositivoPermitidoDetectado = DispositivoPermitidoDetectado + 1 GPIO.output(ReleCanal1, GPIO.LOW) if (MACDisp = = MACPermitido2): #dispositivo encontrado. Dispara acao correspondente DispositivoPermitidoDetectado = DispositivoPermitidoDetectado + 1 GPIO.output(ReleCanal2, GPIO.LOW) if (DispositivoPermitidoDetectado > 0 ): #se nenhum dispositivo permitido foi detectado, desaciona todos os canais GPIO.output(ReleCanal1, GPIO.HIGH) GPIO.output(ReleCanal2, GPIO.HIGH) return def search(): devices = bluetooth.discover_devices(lookup_names = True ) return devices if __name__ = = "__main__" : GPIO.setmode(GPIO.BCM) GPIO.setup(ReleCanal1, GPIO.OUT) GPIO.setup(ReleCanal2, GPIO.OUT) #desaciona os reles GPIO.output(ReleCanal1, GPIO.HIGH) GPIO.output(ReleCanal2, GPIO.HIGH) while True : results = search() if (results! = None ): for addr, name in results: VerificaDispositivosLista(addr) else : print "Nenhum dispositivo BLE encontrado." |
Copie o código e salve-o como “AutomacaoBLE.py”.
Observações:
- Coloque o endereço MAC de dois dispositivos nas variáveis MACPermitido1 e MACPermitido2, no formato indicado no código-fonte.
- Execute o programa como sudo. Observe a chamada de execução abaixo:1
sudo
python AutomacaoBLE.py
Feito isso, basta chegar nas proximidades da Raspberry PI 3 para que um ou mais relés sejam acionados ou se afastar (ou desligar o Bluetooth do dispositivo) para que um ou mais relés sejam desligado. Enfim, hora da diversão!
Gostou? Deixe seu comentário logo abaixo. Em caso de dúvidas, caso queira trocar uma ideia, ou até mesmo dividir seu projeto, acesse nosso Fórum!