Automação básica com bluetooth BLE na Raspberry Pi - MakerHero

Automação básica com bluetooth BLE na Raspberry Pi 20

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 Raspberry PI 3 através da linguagem de programação Python. Para isso, execute os seguintes comandos no terminal da Raspberry PI 3:

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.

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:
  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.

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:

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.

Faça seu comentário

Acesse sua conta e participe

20 Comments

  1. Olá, uma dúvida: quando ligo o modulo relé de 2 com carga do Esp32, funciona corretamente. Com a carga da fonte ajustável, não funciona. O que será?

    1. Olá Jones,

      Não entendi muito bem a dúvida, poderia explicar um pouco melhor?

      Abraços!
      Vinícius – Equipe MakerHero

  2. sudo apt install python3-pip
    sudo pip3 install pybluez
    python3
    import bluetooth

    1. Para o Pi Zero W:

      usermod -aG bluetooth [nome de usuário]

      e ainda assim se não funcionar:
      sudo rpi-update

      1. Importante observar que, nesse projeto, estamos utilizando, na verdade, o bluetooth clássico, e não o BLE. Para que usemos o BLE, devemos utilizar os seguintes comandos:
        sudo apt-get install python3-pip libglib2.0-dev
        sudo pip3 install bluepy
        E depois, no python3, executar o seguinte programa para fazer o scan dos dispositivos próximos:

        #*****************************************************************************
        #!/usr/bin/python
        from __future__ import print_function

        from time import gmtime, strftime, sleep
        from bluepy.btle import Scanner, DefaultDelegate, BTLEException
        import sys

        class ScanDelegate(DefaultDelegate):

        def handleDiscovery(self, dev, isNewDev, isNewData):
        print(strftime(“%Y-%m-%d %H:%M:%S”, gmtime()), dev.addr, dev.getScanData())
        sys.stdout.flush()

        scanner = Scanner().withDelegate(ScanDelegate())

        # listen for ADV_IND packages for 10s, then exit
        scanner.scan(10.0, passive=True)

        #*****************************************************************************

        Com isso, provamos que os dispositivos que apareciam no scan do Bluetooth clássico já não aparecem mais no scan do BLE.
        Para mais informações sobre a biblioteca utilizada, envio-lhes os seguintes links que entram em mais detalhes:
        Documentação da biblioteca:
        https://github.com/IanHarvey/bluepy/tree/master/docs
        Exemplos:
        https://github.com/IanHarvey/bluepy/tree/master/bluepy

  3. Tive que tirar o espaço do While para poder funcionar
    De:
    #——————
    #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 ” ”
    Para:
    #——————
    #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 ” “

    1. Desformatou ao publicar aqui. Mas tem que recuar a identação.

  4. Boa tarde! Gostaria de uma ajuda, se possível.Eu gostaria de usar o controle do ps3 e acionar o direcional para girar um motor , gostaria de saber onde no sistema tem alguma biblioteca que possa alterar ou instalar para trabalhar com esses acionamentos.

    1. Alessandro, infelizmente nunca interagi com o controle do PS3. Sendo assim, não sei te dizer como fazer isso.

  5. Boa Tarde. Muito o tutorial, estou tento problema, pois o python não reconhecer a biblioteca import bluetooth, o que pode ser corrigido?

    1. Eduardo, boa tarde.

      Você instalou todas as biblioteas necessárias? Por favor, confirme executando os comandos abaixo:

      sudo apt-get update
      sudo apt-get install python-pip python-dev ipython
      sudo apt-get install bluetooth libbluetooth-dev
      sudo pip install pybluez

      Atenciosamente,
      Pedro Bertoleti

      1. No meu caso, consegui implementando mais um comando:

        sudo python3 -m pip install pybluez

        Funcionou.

  6. Muito legal esse projeto mt bom mesmo , fico grato por postarem tanta coisa legal .
    Fiquei pensando se vcs ja tem algum artigo aqui no site sobre automação automotiva com o raspberry , se poderem compartilhar gostaria muito .
    Grato
    william oliveira .

    1. Olá Willian!

      Ficamos muito felizes em saber que nosso trabalho realmente ajuda as pessoas!
      Sobre a automação automotiva vou passar a ideia pro povo aqui e ver o que eles acham.

      Abraços!

      André – Equipe MakerHero

  7. Olá Pedro!

    Estou desenvolvendo uma aplicação similar, porém no meu caso pode ocorrer de o RaspBerry PI 3 ter aproximadamente 100 unidades de Beacons BLE penduradas nele… Sabe qual é a quantidade máxima de dispositivos que eu consigo gerenciar no Rasp?

  8. Tenho supervisório feito em C#, é possível rodar no Raspberry PI 3

    1. Olá, boa tarde.

      Eu não programo em C#, mas acredito que devam existir ferramentas que permitam isso (eu CHUTO que se você utilizar o mono consegue compilar e rodar).

      Atenciosamente,
      Pedro Bertoleti

  9. Oi boa noite, você não teria nenhum projeto que envolva a linguagem Java ou

    JavaScript, CSS E HTML é por que n entendo nada Phyton?

  10. Boa tarde Pedro
    Estou tentando fazer alguma coisa relativo a isto mesmo, estou usando 1 beacon para tentar conseguir medir proximidade entre o beacon e o raspberrypi.
    Já fez alguma coisa parecida com isto?
    Obrigado
    Luciano

    1. Luciano, boa tarde.

      Infelizmente, nunca fiz algo parecido com o que você deseja.
      Mas, dando um palpite, o princípio do que você deseja me parece ser o seguinte: obter a distância em função do RSSI medido no seu receptor (grosso modo, intensidade do sinal Bluetooth).

      Atenciosamente,
      Pedro Bertoleti