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:

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.

Bluetooth BLE na Raspberry Pi

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:

  1. 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.
  2. Ligue o Bluetooth da Raspberry PI (através da interface gráfica da Raspbian).
  3. 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
  4. 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.

Scan BLE

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:

  1. Coloque o endereço MAC de dois dispositivos nas variáveis MACPermitido1 e MACPermitido2, no formato indicado no código-fonte.
  2. 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!

Pedro Bertoleti

Engenheiro eletricista formado pela Faculdade de Engenharia de Guaratinguetá (FEG - UNESP), trabalha com desenvolvimento de software embarcado (bare-metal, RTOS e Linux Embarcado). Colaborador do site FilipeFlop e portal Embarcados. Para mais informações, acesse: https://www.facebook.com/pbertoleti


Última atualização: quarta-feira, 17 abr. 2019, 11:04