Arduino Nano ESP32 - AWS IoT
Este tutorial ensina como conectar o Arduino Nano ESP32 ao AWS IoT Core. Em detalhes, vamos aprender:
- Como conectar o Arduino Nano ESP32 ao AWS IoT Core.
- Como programar o Arduino Nano ESP32 para enviar mensagens ao AWS IoT Core.
- Como programar o Arduino Nano ESP32 para receber as mensagens do AWS IoT Core.

Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Arduino Nano ESP32 e o AWS IoT
O Arduino Nano ESP32 se conecta ao AWS IoT Core por meio do protocolo MQTT. Isso não é um grande problema, porque as bibliotecas estão disponíveis, o que facilita o uso.
No entanto, não é tão fácil quanto conectar o Arduino Nano ESP32 a um broker MQTT como o Mosquitto instalado no seu PC. Isso acontece porque o AWS IoT Core aplica medidas de segurança de forma rigorosa. É necessário configurar o AWS IoT Core para obter as credenciais de autenticação e a autorização antes de escrever o código do Arduino Nano ESP32. Em resumo, precisamos dar duas etapas principais:
- Etapa 1: Configurar o AWS IoT Core. Depois desta etapa, teremos as credenciais de autenticação, que serão usadas no código do Arduino Nano ESP32.
- Etapa 2: Escrever o código do Arduino Nano ESP32.
Vamos aos detalhes
Configurando o AWS IoT Core para uso com o Arduino Nano ESP32
Os objetivos desta etapa são:
- Criar uma representação do Arduino Nano ESP32 no AWS IoT Core (chamada de Thing).
- Configurar a autorização que dá permissão para o Arduino Nano ESP32 se conectar/publicar/assinar de/para o AWS IoT Core (chamada de Policy).
- Gerar as credenciais da AWS que serão usadas para autenticação (chamadas de Certificates). Depois de criadas, vamos baixar as credenciais e colocá-las no código Arduino ESP32.
A seguir, mostramos como configurar o AWS IoT Core para uso com o Arduino Nano ESP32 por meio do AWS IoT Console. Observe que a interface de usuário pode ser alterada pela AWS ao longo do tempo, mas será semelhante à abaixo:
- Entre no AWS IoT Console
- Crie um Thing navegando até Manage All devices Things

- Clique no botão Create things.
- Selecione Create single things e clique no botão Next.

- Especifique o Thing name, por exemplo, ESP32-thing e clique no botão Next na parte inferior da página.

- Gere as credenciais selecionando a opção Auto-generate a new certificate e clique no botão Next.

- Agora, um Certificate é criado e vinculado ao Thing.
- Crie uma policy clicando no botão Create policy.

- Uma nova aba será aberta

- Especifique o Policy name, por exemplo, ESP32-policy e clique no botão JSON.
- Copie o conteúdo da policy JSON abaixo e cole-o na área Policy document:
- Clique no botão Create na parte inferior da página para criar a policy.
- Agora, uma Policy é criada e anexada ao Certificate. Feche essa página e volte para a página do Thing.
- Marque a ESP32-policy e clique no botão Create thing para criar o Thing.

- Uma janela popup aparece permitindo que você baixe os arquivos de credenciais. Baixe todos os arquivos e guarde-os em um local seguro no seu PC, mantendo-os em sigilo.

- Depois, clique no botão Done.
Entre os arquivos baixados, há três arquivos que serão usados no código do Arduino Nano ESP32 nas próximas etapas:
- xxxxxxxxxx-certificate.pem.crt
- xxxxxxxxxx-private.pem.key
- AmazonRootCA1.pem
Esses arquivos podem ser abertos com qualquer editor de texto, como o Notepad ou o Notepad++.
Escrevendo o código do Arduino Nano ESP32 para se conectar ao AWS IoT Core
Passos Rápidos
- Se esta é a primeira vez que você usa o Arduino Nano ESP32, veja como configurar o ambiente para o Arduino Nano ESP32 na Arduino IDE.
- Abra o Library Manager clicando no ícone Library Manager na barra de navegação esquerda da Arduino IDE
- Digite MQTT na caixa de pesquisa, depois procure a biblioteca MQTT de Joel Gaehwiler.
- Clique no botão Install para instalar a biblioteca MQTT.

- Digite ArduinoJson na caixa de pesquisa, depois procure a biblioteca ArduinoJson de Benoit Blanchon.
- Clique no botão Install para instalar a biblioteca ArduinoJson.

- Copie o código acima e cole-o na Arduino IDE.
- Crie o arquivo secrets.h na Arduino IDE da seguinte forma:
- Clique no botão logo abaixo do ícone do serial monitor e escolha New Tab, ou use as teclas Ctrl+Shift+N.
- Dê ao arquivo o nome secrets.h e clique no botão OK
- Copie o código abaixo e cole-o no arquivo secrets.h criado.
- Atualize as seguintes informações no secrets.h
- O WIFI_SSID e o WIFI_PASSWORD da sua rede WiFi
- O AWS_CERT_CA, o AWS_CERT_CRT e o AWS_CERT_PRIVATE. Essas informações estão nos arquivos que você baixou na etapa anterior.
- O AWS_IOT_ENDPOINT. Essa informação pode ser encontrada no AWS IoT Console navegando até Setting, como na imagem abaixo:
- Compile e envie o código para a placa Arduino Nano ESP32 clicando no botão Upload na Arduino IDE



Enviando dados do Arduino Nano ESP32 para o AWS IoT
O código Arduino Nano ESP32 acima lê dados periodicamente de um pino analógico e os envia ao AWS IoT a cada 4 segundos. Se você abrir o Serial Monitor na Arduino IDE, verá o log como abaixo:
Para verificar se os dados foram recebidos pelo AWS IoT ou não, siga estes passos:
- No AWS IoT Console, navegue até Test MQTT Test Client

- Clique no botão Subcribe to a topic.
- Digite esp32/esp32-to-aws no Topic filter. Você pode alterar o tópico, mas ele DEVE corresponder ao tópico no código do Arduino Nano ESP32.
- Clique no botão Subcribe.
- Você poderá ver os dados enviados pelo Arduino Nano ESP32 no AWS IoT Console.
Enviando dados do AWS IoT para o Arduino Nano ESP32
Você pode enviar dados do AWS IoT Console para o Arduino Nano ESP32 seguindo estes passos:
- Na Arduino IDE, abra o Serial Monitor
- No AWS IoT Console, navegue até Test MQTT Test Client

- Clique no botão Publish to a topic.
- Digite esp32/aws-to-esp32 no Topic name. Você pode alterar o tópico, mas ele DEVE corresponder ao tópico no código do Arduino Nano ESP32.
- Opcionalmente, você pode alterar o payload da mensagem, ou apenas mantê-lo como padrão.
- Clique no botão Publish.
- Confira o Serial Monitor na Arduino IDE, você verá a mensagem enviada pelo AWS IoT Console.
Faça mais com a AWS
Agora você consegue enviar dados do Arduino Nano ESP32 para o AWS IoT Core e vice-versa. Então, você pode configurar uma IoTRule para conectar o Arduino Nano ESP32 a outros serviços da AWS, como Lambda, DynamoDB, Amplify, RDS...