Implementação de MQTT sobre Wi-Fi com nRF7002DK usando NCS

Este artigo apresenta uma implementação prática do protocolo MQTT sobre Wi-Fi utilizando a placa de desenvolvimento nRF7002DK e o Nordic Connect SDK (NCS). O foco está na confgiuração, execução e análise estrutural do exemplo fornecido pela Nordic Semiconductor, abrangendo desde os conceitos básicos até detalhes de arquitetura de softwaer.

Sobre a Plataforma nRF7002DK

A nRF7002DK é uma placa de avaliação que integra dois chips: o nRF7002, um transceptor Wi-Fi 6 dual-band (2.4 GHz e 5 GHz), e o nRF5340, um microcontrolador dual-core com suporte a Bluetooth LE. A comunicação entre os dois ocorre via interface QSPI. O núcleo de aplicação (Application Core) do nRF5340 roda o sistema operacional Zephyr e coordena as operações de rede e aplicação, enquanto o nRF7002 atua como adaptador de rede Wi-Fi.

Conceitos Básicos do MQTT

O MQTT (Message Queuing Telemetry Transport) é um protocolo leve baseado em TCP/IP, ideal para dispositivos IoT com recursos limitados. Utiliza um modelo de publicação/assinatura:

  • Broker: servidor central que roteia mensagens.
  • Topic: canal lógico identificado por uma string hierárquica.
  • Publish: envio de mensagem a um tópico.
  • Subscribe: recebimento de mensagens de um tópico.

Para segurança, o MQTT pode ser encapsulado com TLS (MQTTS), garantindo confidencialidade e autenticação mútua ou unidirecional via certificados X.509.

Preparação do Ambiente

Requisitos:

  • Placa nRF7002DK ou Clever Connect Kit (CCK).
  • Nordic Connect SDK v2.4.0+ instalado.
  • Editor VS Code com extensão nRF Connect for VS Code.
  • Cliente MQTT (ex: MQTTX) para testes.
  • Rede Wi-Fi pessoal (modo PSK, não enterprise).

Execução do Exemplo

Criação do Projeto

  1. No VS Code, use a extensão nRF Connect → "Create a new application".
  2. Selecione "Copy a sample" e busque por mqtt.
  3. Escolha o exemplo nrf/samples/net/mqtt.

Configuração da Rede Wi-Fi

Edite o arquivo boards/nrf7002dk_nrf5340_cpuapp.conf:

CONFIG_WIFI_CREDENTIALS_STATIC_SSID="SuaRede"
CONFIG_WIFI_CREDENTIALS_STATIC_PASSWORD="SuaSenha"
CONFIG_WIFI_CREDENTIALS_STATIC_TYPE_PSK=y

O exemplo exige credenciais estáticas em tempo de compilação via BUILD_ASSERT.

Habilitação do TLS

Ao criar o alvo de build, selecione o arquivo de overlay overlay-tls-nrf7002.conf. Isso habilita:

  • Porta 8883 (MQTTS).
  • Biblioteca TLS (mbedTLS).
  • Inclusão automática do certificado CA padrão (ca-cert.pem).

Teste de Comunicação

O exemplo se conecta ao broker público test.mosquitto.org. O Client ID é gerado a partir do endereço MAC do dispositivo, formando tópicos como:

  • Publicação: <MAC>/my/publish/topic
  • Assinatura: <MAC>/my/subscribe/topic

Use o MQTTX para assinar o tópico de publicação do dispositivo e enviar mensagens ao seu tópico de assinatura.

Análise da Arquitetura de Software

Estrutura Modular

O exemplo é dividido em módulos independentes:

  • trigger: gera eventos periódicos ou por botão.
  • sampler: simula coleta de dados.
  • transport: gerencia conexão MQTT.
  • network: trata conexão Wi-Fi.
  • led: indica estado via LEDs.
  • error: reinicia o sistema em falhas críticas.

Comunicação entre Módulos: ZBus

O ZBus é um barramento de mensagens interno do Zephyr, inspirado no MQTT. Define canais (channels) com tipos de payload específicos. Observadores (observers) podem receber mensagens de forma síncrona (callback) ou assíncrona (fila + thread).

Exemplo de definição de canal:

ZBUS_CHAN_DEFINE(NETWORK_CHAN,
                 enum network_status,
                 NULL, NULL,
                 ZBUS_OBSERVERS(transport, sampler),
                 ZBUS_MSG_INIT(0));

Um módulo publica com zbus_chan_pub(), e observadores recebem automaticamente.

Conexão Wi-Fi

O módulo network_wifi.c utiliza a API de gerenciamento de rede (net_mgmt):

struct net_if *iface = net_if_get_default();
net_mgmt(NET_REQUEST_WIFI_CONNECT_STORED, iface, NULL, 0);

As credenciais estáticas são armazenadas no flash via biblioteca wifi_credentials, que suporta modos PSK e (parcialmente) Enterprsie. A conexão real é mediada pelo WPA Supplicant integrado.

Conexão MQTT com SMF e TLS

O módulo transport usa:

  • SMF (State Machine Framework): organiza o fluxo de conexão MQTT em estados (MQTT_DISCONNECTED, MQTT_CONNECTED), com funções de entrada, execução e saída.
  • MQTT Helper: biblioteca da Nordic que encapsula a API base do Zephyr, gerenciando heartbeat e configuração via Kconfig.
  • TLS Credentials: armazena certificados e chaves privadas associados a uma tag de segurança (SEC_TAG). O certificado CA do Mosquitto é incluído em tempo de compilação quando CONFIG_MQTT_HELPER_PROVISION_CERTIFICATES=y.

O socket seguro é configurado passando o SEC_TAG durante a inicialização da conexão.

Tags: nRF7002 MQTT Zephyr NCS Wi-Fi 6

Publicado em 8-21 06:00