Advertising (publicidade) é um mecanismo em Bluetooth Low Energy através do qual um dispositivo Peripheral anuncia sua presença transmitindo pacotes curtos de dados em três canais dedicados (37, 38, 39). A Bluetooth Core Specification 5.4 (2023) define dois tipos de publicidade: connectable — o dispositivo está pronto para conexão, e non-connectable — usado por balizas (Beacon) que apenas transmitem dados sem estabelecer comunicação bidirecional. Os parâmetros de publicidade — intervalo de 20 ms a 10.24 s, potência do transmissor de -20 a +10 dBm e tipo de pacote — afetam diretamente a velocidade de deteção do dispositivo e seu consumo de energia, o que é crítico no desenvolvimento de dispositivos IoT alimentados por bateria.
Principais conclusões
Advertising (publicidade) é o processo de transmissão periódica de pacotes curtos de dados através do qual um dispositivo BLE anuncia sua presença e disponibilidade. Ao contrário do Bluetooth clássico, onde a deteção de dispositivos leva segundos, o advertising BLE permite detetar um dispositivo em milissegundos consumindo energia mínima.
A arquitetura BLE divide os dispositivos em duas funções: Peripheral (anuncia) e Central (escaneia). O Peripheral envia pacotes de advertising, enquanto o Central escaneia o ar e decide se conecta. Este modelo assimétrico é uma vantagem chave do BLE: o dispositivo anunciante gasta energia apenas no envio de pacotes curtos, não em ouvir o ar constantemente.
O processo de advertising consiste em três etapas: advertising event (envio do pacote em todos os três canais), scan request/response (troca opcional com o Central) e connection request (iniciação da conexão pelo Central). Cada etapa é gerenciada pelo Bluetooth Controller no nível da Link Layer.
BLE usa 40 canais na banda de 2,4 GHz, dos quais 37 (2402 MHz), 38 (2426 MHz) e 39 (2480 MHz) são dedicados exclusivamente à publicidade. Três canais representam um compromisso entre fiabilidade de deteção e capacidade de throughput: um canal pode estar ocupado por Wi-Fi ou outras interferências, mas o dispositivo será detetado nos outros dois.
O canal 37 está perto do canal Wi-Fi 1, o canal 39 está perto do canal Wi-Fi 6, e o canal 38 está entre eles, na zona de interferência mínima. A escolha de três canais garante que o dispositivo seja detetado mesmo em ambientes de rádio densos — por exemplo, num centro comercial com dezenas de pontos de acesso Wi-Fi.
O Peripheral envia o pacote de advertising sequencialmente em todos os três canais — isto é chamado de advertising event. O dispositivo central escaneia um canal de cada vez, alternando entre eles de acordo com um algoritmo implementado no Bluetooth Controller. A probabilidade de deteção dentro de um advertising event na ausência de colisões é próxima de 100%.
Bluetooth Core Specification define vários tipos de PDU de advertising (Protocol Data Unit), cada um com seu propósito. Os principais tipos são: ADV_IND (connectable undirected advertising) — publicidade padrão com capacidade de conexão, ADV_NONCONN_IND (non-connectable undirected advertising) — apenas publicidade sem conexão, ADV_SCAN_IND (scannable undirected advertising) — suporta scan request, ADV_DIRECT_IND (directed advertising) — publicidade para um Central específico.
ADV_IND é o tipo mais comum usado na maioria dos dispositivos BLE. Ao receber ADV_IND, o Central pode enviar um connection request e estabelecer uma conexão. ADV_NONCONN_IND é usado em balizas (Beacon): o dispositivo anuncia mas não aceita pedidos de conexão — apenas transmissão unidirecional de dados.
| Tipo PDU | Descrição | Conexão | Scan response |
|---|---|---|---|
| ADV_IND | Publicidade padrão | Sim | Sim |
| ADV_DIRECT_IND | Publicidade para um Central específico | Sim | Não |
| ADV_NONCONN_IND | Sem conexão (balizas) | Não | Não |
| ADV_SCAN_IND | Com suporte de scan | Sim | Sim |
| ADV_EXT_IND | Extended advertising (BLE 5.0) | Sim | Sim |
ADV_DIRECT_IND contém o endereço do Central alvo, permitindo estabelecer conexão rapidamente sem esperar pela escaneação. É usado quando os dispositivos já se “conhecem” — por exemplo, após reconectar a um smartphone previamente emparelhado. Este tipo reduz o consumo de energia pois não requer publicidade em todos os canais.
Advertising interval é o tempo entre advertising events sucessivos. A especificação permite um intervalo de 20 ms a 10,24 s com passo de 0,625 ms. O intervalo real é calculado como a soma de um valor fixo e um atraso aleatório (0–10 ms), o que reduz a probabilidade de colisões entre múltiplos dispositivos anunciantes.
Escolher o intervalo é um equilíbrio entre velocidade de deteção e consumo de energia. Com intervalo de 20 ms, o dispositivo será detetado em 20–30 ms, mas a corrente média será de cerca de 1–2 mA. Com intervalo de 1000 ms, a deteção levará até 1 segundo, mas a corrente média cairá para 50–100 µA. Para a maioria dos dispositivos IoT, o intervalo recomendado é 200–1000 ms.
De acordo com Texas Instruments Application Report SWRA478 (2024), aumentar o intervalo de advertising de 100 ms para 1000 ms reduz o consumo de energia em 90%. Se o dispositivo não requer deteção instantânea (por exemplo, um sensor de temperatura que transmite dados uma vez por minuto), o intervalo ideal é 1000–2000 ms.
Um parâmetro adicional é advertising timeout — o tempo máximo durante o qual o dispositivo anuncia. No iOS, o Peripheral desativa automaticamente a publicidade após 180 segundos em segundo plano. No Android não existe tal limitação, mas os fabricantes podem adicionar seus próprios limites.
Scan Response é um pacote de dados adicional (até 31 bytes) que o Peripheral envia em resposta a um scan request do Central. O scan request é enviado pelo Central após receber o pacote de advertising se precisar de mais informações antes de conectar. O Scan Response não requer advertising adicional — é enviado apenas mediante solicitação, economizando espaço no ar.
Distribuição típica de dados: o advertising PDU (31 bytes) contém flags (3 bytes), UUIDs de serviço (2–16 bytes) e dados do fabricante (bytes restantes). O scan response transporta o nome completo do dispositivo (até 28 bytes) e UUIDs adicionais ou TX Power Level. Esta separação permite ao Central filtrar rapidamente dispositivos por UUID sem ler o scan response.
Ao projetar o pacote de advertising, lembre-se: se todos os 31 bytes estiverem ocupados no advertising PDU, o Central não conseguirá determinar se o dispositivo suporta scan response. Recomenda-se deixar pelo menos 3–5 bytes livres no advertising PDU para indicar a capacidade de scan response.
Extended Advertising (BLE 5.0) é uma extensão do mecanismo de publicidade que aumenta o tamanho do pacote de advertising de 31 para 251 bytes e adiciona novos tipos de pacotes. Extended Advertising também suporta coded PHY para estender o alcance de comunicação até 1 km em áreas abertas e publicidade periódica (Periodic Advertising) para sincronizar múltiplos Centrais.
Principais inovações: ADV_EXT_IND — PDU de advertising estendido que pode transmitir até 251 bytes de dados num único pacote. Extended Advertising usa os canais primários (37, 38, 39) apenas para indicar em qual canal secundário (0–36) os dados completos são transmitidos. Isto reduz a carga nos canais de publicidade e aumenta a capacidade total do sistema.
Periodic Advertising é um mecanismo adicional no qual o Peripheral envia dados em canais secundários com um intervalo fixo, e o Central pode sincronizar com esta sequência. É usado para serviços que requerem atualizações regulares de dados — por exemplo, transmissão de áudio ou leituras de sensores em tempo real.
| Parâmetro | BLE padrão | Extended BLE 5.0 |
|---|---|---|
| Tamanho máx. do pacote | 31 bytes | 251 bytes |
| Canais | Apenas 37, 38, 39 | + secundários 0–36 |
| Alcance | Até 100 m | Até 1000 m (coded PHY) |
| Velocidade | 1 Mbps | 125 kbps – 2 Mbps |
| Periódico | Não | Sim |
iOS (Core Bluetooth) fornece CBPeripheralManager para gerenciar a publicidade. Os parâmetros de advertising são definidos através do dicionário advertisementData com as chaves CBAdvertisementDataLocalNameKey (nome do dispositivo), CBAdvertisementDataServiceUUIDsKey (UUIDs de serviços), CBAdvertisementDataTxPowerLevelKey (potência). O iOS gerencia automaticamente o intervalo de advertising e não permite configurá-lo manualmente.
import CoreBluetooth
class AdvertiserManager: NSObject, CBPeripheralManagerDelegate {
private var peripheralManager: CBPeripheralManager!
func startBLEAdvertising() {
let data: [String: Any] = [
CBAdvertisementDataLocalNameKey: "BLE Beacon",
CBAdvertisementDataServiceUUIDsKey: [
CBUUID("180F")
],
CBAdvertisementDataIsConnectable: true
]
peripheralManager.startAdvertising(data)
}
}
Android (BluetoothLeAdvertiser) fornece um controle mais detalhado. Disponíveis: AdvertiseSettings — configuração de modo (LOW_POWER, BALANCED, LOW_LATENCY), potência do transmissor e intervalo; AdvertiseData — dados do pacote. O Android suporta extended advertising (BLE 5.0) em dispositivos compatíveis, mas a proporção desses dispositivos no mercado é de cerca de 30–40%.
BluetoothLeAdvertiser advertiser =
BluetoothAdapter.getDefaultAdapter()
.getBluetoothLeAdvertiser();
AdvertiseSettings settings = new AdvertiseSettings.Builder()
.setAdvertiseMode(
AdvertiseSettings.ADVERTISE_MODE_LOW_POWER
)
.setTxPowerLevel(
AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM
)
.build();
AdvertiseData data = new AdvertiseData.Builder()
.setIncludeDeviceName(true)
.addServiceUuid(new ParcelUuid(
UUID.fromString(
"0000180F-0000-1000-8000-00805F9B34FB"
)
))
.build();
advertiser.startAdvertising(
settings, data, advertiseCallback
);
Ao desenvolver uma aplicação BLE multiplataforma, considere as diferenças: o iOS não permite controlar o intervalo de advertising diretamente mas garante funcionamento estável em todos os dispositivos; o Android fornece controle total, mas a fragmentação de versões e fabricantes pode causar incompatibilidade. Recomenda-se testar o advertising em dispositivos reais de ambas as plataformas.
Perguntas frequentes
Connectable advertising (ADV_IND) permite ao Central estabelecer uma conexão bidirecional com o dispositivo. Non-connectable (ADV_NONCONN_IND) é apenas transmissão unidirecional de dados, usado por balizas (Beacon) para transmitir um identificador sem possibilidade de conexão.
O pacote de publicidade padrão é de 31 bytes, scan response são mais 31 bytes. Extended Advertising (BLE 5.0+) aumenta o limite para 251 bytes usando canais secundários para transmissão de dados.
Para a maioria dos dispositivos IoT, recomenda-se 500–1000 ms. Se for necessária deteção rápida (por exemplo, para conectar auscultadores), use 20–50 ms. Para sensores com transmissão de dados pouco frequente, use 1000–2000 ms para poupar energia.
Três canais (37, 38, 39) representam um compromisso entre fiabilidade de deteção e capacidade de throughput. Um canal pode estar ocupado por Wi-Fi, mas o dispositivo será detetado nos outros dois. O canal 38 está na zona de interferência mínima entre os canais Wi-Fi.
A publicidade é o principal consumidor de energia em BLE. Com intervalo de 1000 ms, a corrente média é de 50–100 µA, permitindo ao dispositivo funcionar durante um ano com uma bateria CR2032. Com intervalo de 20 ms, a corrente aumenta para 1–2 mA, reduzindo o tempo de funcionamento para várias semanas.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também