MQTT básico com ESP32 e Mosquitto Broker

{getToc} $title={Índice}

Informações

Nível de dificuldade: Fácil
Requisitos: ESP32, ESP IDF, ambiente Linux/Mac/Windows.

Ressalvas

Tutorial feito em um ambiente Linux, porém o Mosquitto Broker também pode ser implementado em ambientes Windows, Mac, Debian e até Raspberry.

Introdução

Esse tutorial contempla a implementação de um exemplo básico de MQTT capaz de se conectar em um Broker, publicar e se inscrever em um tópico.

Setup MQTT

Instalar o MQTT no seu sistema com o comando abaixo:

```bash
$ sudo apt install -y mosquitto
```

Para verificar se o servidor Mosquitto está rodando é possível utilizar o comando:

```bash
$ sudo systemctl status mosquitto
```
O serviço deverá estar carregado e ativo (loaded and active).

Configuração Mosquitto

Por default, o Mosquitto carrega as configurações do arquivo:
```bash
/etc/mosquitto/mosquitto.conf
```
Essas configurações iniciais não possuem nenhuma forma de segurança, nem usuário/senha de acesso.
Para habilitar um sistema de usuário/senha, é necessário criar uma configuração personalizada.
Essa configuração deverá possuir o nome default.conf e ficar no diretório:
```bash
/etc/mosquitto/conf.d/
```
Para este exemplo vamos utilizar a seguinte configuração:
```quote
allow_anonymous false
listener 1883 0.0.0.0
password_file /etc/mosquitto/passwd
```
allow_anonymous false: essa configuração impede acessos anonimos ao broker, o default é true. Com essa configuração o broker fará o requisito de usuário e senha que serão configurados em outro arquivo.
listener 1883 0.0.0.0: para uma conexão TCP deve ser utilizada a porta 1883, para uma conexão TLS (com verificação de certificados) é utilizada a porta 8883. O endereço 0.0.0.0 permite os acessos pela sua rede local.
password_file /etc/mosquitto/passwd: indica o caminho para o arquivo com os usuários e senhas permitidos.

Usuário e Senha

Criar um arquivo de texto simples, cada linha é uma combinação de usuário e senha, que deve ser criada com o padrão a seguir:

```quote
nome_usuario:senha
```
Para criptografar esse arquivo e evitar o acesso indesejado a essas credenciais, usar o seguinte comando:
```bash
mosquitto_passwd -U nome_arquivo
```
Agora é só colocar esse arquivo no caminho definido na configuração do passo anterior e reiniciar o Mosquitto com o comando:
```bash
sudo systemctl restart mosquitto
```

Projeto de exemplo MQTT no ESP

A ESP IDF já possui um exemplo de implementação do MQTT no ESP, utilizando a biblioteca integrada esp-mqtt.
No seu diretório de instalação da IDF já temos esse exemplo.
Iremos utilizar o MQTT TCP, localizado em:

esp-idf/examples/protocols/mqtt/tcp

Esse projeto pode também ser obtido no github da esp-idf, no mesmo diretório:

https://github.com/espressif/esp-idf 


Configurando o projeto

Esse projeto usa o exemplo base de wifi para conexão, as credenciais de acesso ao wifi devem ser configuradas no Menuconfig (documentação de referência: example connect esp)

A função mqtt_app_start inicializa a estrutura de configuração e realiza o acesso ao broker.
Para utilizar um acesso com senha e usuário, é necessário mudar a estrutura mqtt_cfg para o seguinte:
```C
esp_mqtt_client_config_t mqtt_cfg = {
    .uri = "mqtt://ip:1883",
    .username = "nome_usuario",
    .password = "senha",
};
```
Substituir "ip" pelo ip da sua rede, "nome_usuario" e "senha" pelos atributos configurados no default.conf.

Remover todo o código de
```C
#if CONFIG_BROKER_URL_FROM_STDIN
```
até 
```C
#endif /* CONFIG_BROKER_URL_FROM_STDIN */
```
para simplificar o desenvolvimento deste exemplo.

Entendendo o projeto

A parte principal do código está na função:
```C
mqtt_event_handler
```

Resumidamente:
  • Após a conexão com o WiFi, o ESP tentará se conectar com o broker MQTT.
  • Assim que a conexão com o broker for realizada, o evento MQTT_EVENT_CONNECTED será chamado e irá realizar publish/subscribe.
  • Qualquer dado que chegar no tópico de subscribe ativará o evento MQTT_EVENT_DATA e irá printar a mensagem recebida.
O fluxo de mensagens pode ser visualizado utilizando comandos do Mosquitto Broker ou então com ferramentas de suporte ao MQTT, a minha preferida é o MQTT Explorer.
Para mais informações é possível consultar a documentação da biblioteca esp-mqtt fornecida pela Espressif, contida também abaixo nas Referências.

Referências


Guilherme Rossi

Especialista em Sistemas Embarcados formado em Engenharia Elétrica. Experiência de atuação em linguagem C, Linux Embarcado, Microcontroladores, protocolos de comunicação e debug. linkedin

Postar um comentário

Deixe seu comentário ou sua sugestão!

Postagem Anterior Próxima Postagem

Formulário de contato