Guia Completo do Bluetooth no STM32: Conceitos e Exemplos

Índice🔗

Introdução🔗

A comunicação Bluetooth em sistemas embarcados com STM32O que é STM32 e por que usá-lo?O que é STM32 e por que usá-lo?Descubra os principais benefícios, arquitetura ARM Cortex-M e aplicações práticas dos microcontroladores STM32. Comece a inovar agora. é essencial para aplicações IoT, wearables e controle remoto. Este guia combina teoria e prática, abordando desde a seleção de módulos até implementações avançadas com Bluetooth Classic e BLE (Bluetooth Low Energy). Mantenha-se focado: aqui você encontrará profundidade técnica, exemplos reais e soluções para problemas comuns.

Conceitos e Protocolos Bluetooth🔗

Bluetooth Classic vs. BLE

CaracterísticaBluetooth ClassicBLE
Consumo de energiaAltoMuito baixo
Taxa de dadosAté 3 Mbps1 Mbps
Casos de usoÁudio, transferência de arquivosSensores, wearables

Protocolos e Perfis:

Equacionamento de consumo em BLE:

$$ E = P \times t $$

Onde:

  • \( E \): Energia consumida (Joules)
  • \( P \): Potência em modo ativo (ex: 10 mW)
  • \( t \): Tempo de transmissão.

Seleção de Hardware e Conexões🔗

Módulos Recomendados

  • BLE: HM-10, BlueNRG-MS (Bluetooth 5.0).
  • Classic: HC-05 (mestre/escravo), RN42.

Diagrama de Conexão UART (HC-05/06)

flowchart TD A[STM32 UART TX] -->|PA2| B[HC-05 RXD] C[STM32 UART RX] -->|PA3| D[HC-05 TXD] E[3.3V] --> F[HC-05 VCC] G[GND] --> H[HC-05 GND]

Tabela de Pinagem:

Pino HC-05Pino STM32Função
VCC3.3VAlimentação
GNDGNDTerra
TXDPA3 (RX)Recepção
RXDPA2 (TX)Transmissão

Atenção:

  • Verifique níveis lógicos (3.3V vs 5V).
  • Use conversores de nível se necessário.

Configuração de Software e Bibliotecas🔗

Bluetooth Classic (HC-05 via UART)

Inicialização no STM32CubeIDEConfigurando o ambiente de desenvolvimento para STM32Configurando o ambiente de desenvolvimento para STM32Aprenda a configurar o ambiente para desenvolvimento em STM32 usando STM32CubeIDE, debuggers e ferramentas integradas com dicas de troubleshooting práticas.:

UART_HandleTypeDef huart2;
void MX_USART2_UART_Init(void) {
  huart2.Instance = USART2;
  huart2.Init.BaudRate = 9600;
  huart2.Init.WordLength = UART_WORDLENGTH_8B;
  huart2.Init.StopBits = UART_STOPBITS_1;
  HAL_UART_Init(&huart2);
}

Envio de Comandos AT:

uint8_t cmd[] = "AT+NAMESTM32_BT\r\n";
HAL_UART_Transmit(&huart2, cmd, sizeof(cmd)-1, HAL_MAX_DELAY);

BLE com BlueNRG-MS (STM32WB55)

Inicialização do Stack BLE:

void APP_BLE_Init(void) {
  hci_init(APP_UserEvtRx, NULL);
  aci_gatt_init();
  aci_gap_init(GAP_PERIPHERAL_ROLE, 0, 0x07, &service_handle, &dev_name_char_handle, &appearance_char_handle);
}

Criação de Serviço Customizado:

tBleStatus ret;
uint16_t custom_service_handle;
ret = aci_gatt_add_service(UUID_TYPE_128, CustomServiceUUID, PRIMARY_SERVICE, 4, &custom_service_handle);

Exemplos Práticos🔗

Exemplo 1: Controle de LED via Bluetooth Classic

Processamento de Comandos no STM32O que é STM32 e por que usá-lo?O que é STM32 e por que usá-lo?Descubra os principais benefícios, arquitetura ARM Cortex-M e aplicações práticas dos microcontroladores STM32. Comece a inovar agora.:

void ProcessaComando(uint8_t *buffer, uint16_t tamanho) {
  if (strncmp((char*)buffer, "LED_ON", 6) == 0) {
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
  } else if (strncmp((char*)buffer, "LED_OFF", 7) == 0) {
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
  }
}

Exemplo 2: Transmissão de Dados de Sensor via BLE

Configuração de Característica de Temperatura:

uint16_t temp_char_handle;
ret = aci_gatt_add_char(custom_service_handle, UUID_TYPE_16, TEMPERATURE_CHAR_UUID, 2,
                        CHAR_PROP_READ | CHAR_PROP_NOTIFY, ATTR_PERMISSION_NONE, 0, 0, 0, &temp_char_handle);

Envio de Notificações:

float temperature = read_sensor();
uint8_t temp_data[2] = {(uint8_t)(temperature), (uint8_t)(temperature * 100) % 100};
ret = aci_gatt_update_char_value(custom_service_handle, temp_char_handle, 0, 2, temp_data);

Troubleshooting e Boas Práticas🔗

Problemas Comuns e Soluções

ProblemaSolução
HC-05 não respondeVerifique baud rate (padrão: 38400 para modo AT)
BLE não detectadoAjuste advertising interval (≥ 20 ms)
Pacotes corrompidosHabilite CRC no UART

Dicas:

Configurações Avançadas🔗

Modo de Baixo Consumo em BLE

aci_hal_set_tx_power_level(1, 0); // TX Power = 0 dBm
aci_gap_set_auth_requirement(MITM_PROTECTION_NOT_REQUIRED, 0, 0, 0, 0, 0, 0, 0);

Segurança com Pairing

aci_gap_set_io_capability(IO_CAP_DISPLAY_ONLY);
aci_gap_set_authentication_requirement(BONDING, MITM_PROTECTION_REQUIRED, 0, 0, 0, 0, 0);

Conclusão🔗

Integrar Bluetooth no STM32O que é STM32 e por que usá-lo?O que é STM32 e por que usá-lo?Descubra os principais benefícios, arquitetura ARM Cortex-M e aplicações práticas dos microcontroladores STM32. Comece a inovar agora. requer entendimento dos protocolos, hardware adequado e firmware otimizado. Enquanto o Bluetooth Classic é ideal para transmissão contínua (como controle de dispositivos), o BLE brilha em aplicações de baixo consumo (IoT e sensores). Combine os exemplos e configurações deste guia para criar soluções robustas, desde dashboards móveis até sistemas de automação industrial.

Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Compartilhar artigo

Artigos Relacionados