• Dispositivos

HC-06

Info

Lembrem que a pico que usamos é a versão W e ela já possui um chip dedicado para comunicação bluetooth e wifi, mas nessa entrega não iremos utilizar tal recurso por questões didáticas.

Warning

Existem duas versões muito similares, o HC-06 e o HC-05, você deve usar o exemplo específico para o módulo que estiver utilizando:

Além da diferença de funcionalidade, eles implementam variações do protocolo de comunicação AT, o que impede de usarmos o mesmo exemplo.

O HC-06 é um módulo bluetooth popular (R$ 40) que pode funcionar como device , neste exemplo usaremos como device (conectando-se ao computador). O Computador (Windows ou Linux) virá enxergar o módulo HC-06 como um dispositivo bluetooth, e uma vez pareado o Windows irá criar uma porta COM (Serial → Outgoing / Saída) associado a conexão, nessa porta faremos a recepção e envio dos dados via bluetooth.

O modulo será conectado ao microcontrolador através de uma comunicação UART (muito similar ao que vocês implementaram na disciplina Camada Física), o microcontrolador pode enviar dados para o computador por esta porta (TX) ou receber dados do computador (RX), conforme diagrama a seguir:

    +----------+                +-------+             +----------+
    |    +-----|                |       |   <---->    |    +-----|
    |    |USART| tx -------> RX |       |             |    | COM <---> Python ---> (Aplicação)
    |    +-----| rx <------- TX |       |  BLUETOOTH  |    +-----|
    | uc       |                | HC-06 |             | PC       |
    +----------+                +-------+             +----------+

No microcontrolador, iremos usar um periférico da pico chamado UART para realizar a serialização e desserialização do dado no protocolo UART. A comunicação com o módulo HC-06 segue um protocolo chamado de AT Command.

Já no computador iremos usar um programa em python que acessará a porta COM criada pelo sistema operacional para enviar e receber dados do microcontrolador via protocolo Bluetooth. Note que estamos lidando com o Bluetooth de forma "transparente", apenas como "usuários", toda a mágica acontece dentro do HC-06.

Tip

Exemplo

Conecte o hardware como indicado a seguir:

O exemplo faz uso dos pinos:

  • HC-VCC: 5V (alimentação)
  • HC-GND: GND (alimentação)
  • HC-TX: Ligado na UART 1 - RX (recebimento de dados)
  • HC-RX: Ligado na UART 1 - TX (transmissão de dados)
  • HC-EN: Ligado no GP6 (configurar modo de funcionamento)

Tip

O pino STATE indica o estado do bluetooth, se ele está conectado ou pronto para parear. Por exemplo, se você precisar indicar para o usuário se o controle (bluetooth) está ou não conectado, você pode utilizar esse pino para isso.

Firmware

O firmware fornecido no exemplo possui uma task e um driver para comunicar com o bluetooth via o protocolo serial:

void hc06_task(void *p) {
    uart_init(HC06_UART_ID, HC06_BAUD_RATE);
    gpio_set_function(HC06_TX_PIN, GPIO_FUNC_UART);
    gpio_set_function(HC06_RX_PIN, GPIO_FUNC_UART);
    hc06_init("aps2_legal", "1234");

    while (true) {
        uart_puts(HC06_UART_ID, "OLAAA ");
        vTaskDelay(pdMS_TO_TICKS(100));
    }
}

As funções iniciais da task são responsáveis por configurar o módulo UART e a função principal bool hc06_init(char name[], char pin[]) faz a configuração do Bluetooth, com seguintes parâmetros:

  • name: Nome do bluetooth que aparecerá quando procurar o dispositivo.
  • pin: Senha de 4 dígitos que pode ser requisitada ao se conectar no dispositivo.

Se conectado corretamente, ao executar o código vocês devem obter isso na serial (debug):

check connection
connected

set name
name ok

set pin
pin ok

A função hc06_init faz a seguinte inicialização:

![[state.png]]

Enviando dados para o bluetooth

Após iniciado o hardware, basta colocarmos 0 no pino EN e que toda informação enviada para a UART 1 será enviada automaticamente para o bluetooth.

    while (true) {
        uart_puts(HC06_UART_ID, "OLAAA ");
        vTaskDelay(pdMS_TO_TICKS(100));
    }

O trecho de código fica enviando OLAA pela UART, e deve aparecer no dispositivo quando conectado ao bluetooth.

Conectando o PC ao bluetooth

Agora será necessário conectar o computador no HC-06, para isso temos que seguir tutoriais específicos de cada sistema operacional:

Após conectado é só alterar a porta do programa python, para a porta criado por cada um dos sistemas operacionais:

ser = serial.Serial('/dev/ttyACM0', 115200)

No Linux, por exemplo, se seguiu o tutorial você deve alterar para:

ser = serial.Serial('/dev/rfcomm0', 115200)

E tudo funcionará como antes.