ESP32 e IDF: Utilizando Bluetooth Classic

Muitas pessoas são movidas por desafios, e eu não sou diferente. Desde que eu recebi o meu primeiro ESP32 da SparkFun, fiquei interessado mais na questão de ter um Bluetooth junto com o WiFi do que qualquer outro atributo do ESP32.

E ai vieram as primeiras decepções, que muitos usuários do ESP32 já estavam enfrentando. Além da falta de documentação em relação ao uso do Bluetooth, algumas pessoas estavam relatando que a Espressif ainda não tinha terminado toda a implementação da pilha, parei de me interessar em fazer funcionar.

Eis que surge uma oportunidade de usar o Bluetooth no ESP32. Fiz a devida atualização da plataforma ESP-IDF, que já tratamos aqui anteriormente e comecei a ler novamente a documentação.

Descobri que ainda estavam faltando alguns detalhes e que não seria tarefa trivial utilizar, mesmo que alguns testes dos exemplos prontos funcionavam com BLE, mas não com Bluetooth Classic. Não poderia utilizar a pilha da Espressif.

Na minha busca em alternativas, me deparei com a BTstack da BlueKitchen, que é uma pilha de Bluetooth que suporta SPP (Serial Port Profile) e tem suporte para o ESP32.

Instalando a BTstack

Para instalar a BTstack, devemos antes instalar o ESP-IDF, que pode ser feito por este link.

Feita a instalação do ESP-IDF, devemos fazer o clone do repositorio na mesma pasta em que está a pasta esp-idf, no meu caso a pasta /home/pedro/esp.

No terminal:

Vá para a pasta btstack/port/esp32/

Execute o comando:

Neste ponto, a BTstack deverá aparecer dentro da pasta components do ESP-IDF

../esp/esp-idf/components/btstack/

Testando a Btstack

Durante esse processo de instalação, foram criados os exemplos na seguinte pasta:

../esp/btstack/port/esp32/example/

Neste diretório temos os exemplos para fazer diversos testes, mas vamos focar no Bluetooth Classic com SPP, muito utilizado em projetos maker.

O exemplo “spp_counter”, será o nosso exemplo base, e com algumas alterações podemos realizar os mais diversos tipos de integração.

Código fonte de teste

 

Para testar o funcionamento, utilizei o programa para Android “Bluetooth Terminal HC-05”.

Conclusão

Pelos teste que fiz, pude notar que a BTstack foi a melhor opção para SPP em modo Bluetooth Classic. Não posso dizer em relação aos outros exemplos pois não utilizei a ponto de tirar alguma conclusão.

O que posso dizer é que eu fiquei muito satisfeito com a documentação e com os exemplos prontos que a Bluekitchen disponibilizou.

Happy Hacking and Happy 2018!

6 Comments

  1. Olgorofi

    Parabens Pedro. Muito bem explicado. Obrigado por extender seus conhecimentos a nos iniciantes. Um abraço

    Reply
    1. Pedro Minatel (Post author)

      Obrigado! Mesmo sem tempo para mais publicações, eu tento sempre trazer algo novo e útil!

      Reply
  2. acassis

    Olá Pedro!

    Muito bom seu tutorial. Creio que o BTstack pode ser um ótimo candidato para ser integrado no NuttX RTOS!!!

    A Espressif “patrocinou” o porte do NuttX para a ESP32, mas como eles ficaram enrolando para liberar uma lib para permitir a integração com o WiFi, o Greg perdeu interesse na plataforma.

    Hoje o NuttX suporta os chips WiFi FullMAC da Broadcom como o usado na Particle Photon board. Testei ele na Photon e funcionou perfeitamente.

    Reply
    1. Pedro Minatel (Post author)

      Obrigado!
      Creio que não seja complicado para fazer o port da BTstack para o NuttX RTOS.
      NuttX RTOS tá na lista para testar em 2018, assim como o Mongoose OS.

      Reply
  3. Sergio Paulo Sider

    Achei seu tutorial depois de dar de cara com a limitação do ESP-IDF do BT-Classic (não permitem PIN, e isso é imprescindível para acessar devices antigos). Parece que prometeram melhorias para a versão 3.1

    Você tem alguma idéia de como rodar esse exemplo junto com o wifi ? ( no maeu caso, peguei “core panicked” quando fui rodar junto com o wifi).

    Obrigado!

    Reply
  4. Pedro Santos

    Boa Tarde Pedro,

    Antes de mais obrigado pela informação. Eu tentei testar mas estou com problemas em adicionar a pasta src ao eclipe e consequentemente ao compilar dá erro de falta de ficheiros o primeiro é “btstack.h”. Pode me ajudar como colocar a Livraria no Eclipse? Cumprimentos

    Reply

Deixe seu comentário