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
- O HC-05 pode funcionar como
device
ouhost
- HC-05 AT Commands
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):
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.
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:
No Linux, por exemplo, se seguiu o tutorial você deve alterar para:
E tudo funcionará como antes.