Arduino Nano ESP32 - AWS IoT

Este tutorial ensina como conectar o Arduino Nano ESP32 ao AWS IoT Core. Em detalhes, vamos aprender:

AWS IoT do Arduino Nano ESP32

Hardware Necessário

1×Arduino Nano ESP32
1×Cabo USB Tipo-A para Tipo-C (para PC com USB-A)
1×Cabo USB Tipo-C para Tipo-C (para PC com USB-C)
1×Protoboard
1×Fios Jumper
1×(Recomendado) Placa de Expansão com Bornes de Parafuso para Arduino Nano
1×(Recomendado) Placa de Expansão Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentação para Arduino Nano ESP32

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.

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:

  • Crie um Thing navegando até Manage All devices Things
AWS IoT cria Things
  • Clique no botão Create things.
  • Selecione Create single things e clique no botão Next.
AWS IoT Core cria Things
  • Especifique o Thing name, por exemplo, ESP32-thing e clique no botão Next na parte inferior da página.
Nome do Thing no AWS IoT Core
  • Gere as credenciais selecionando a opção Auto-generate a new certificate e clique no botão Next.
AWS IoT Core gera o certificado
  • Agora, um Certificate é criado e vinculado ao Thing.
  • Crie uma policy clicando no botão Create policy.
AWS IoT Core cria policy
  • Uma nova aba será aberta
AWS IoT Core cria policy para ESP32
  • 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:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" } ] }
  • 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.
AWS IoT Core cria o Thing ESP32
  • 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.
Arquivo de credenciais do AWS IoT Core
  • 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

/* * Este código de Arduino Nano ESP32 foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-aws-iot */ #include "secrets.h" #include <WiFiClientSecure.h> #include <MQTTClient.h> #include <ArduinoJson.h> #include "WiFi.h" // The MQTT topics that this device should publish/subscribe #define AWS_IOT_PUBLISH_TOPIC "esp32/esp32-to-aws" #define AWS_IOT_SUBSCRIBE_TOPIC "esp32/aws-to-esp32" #define PUBLISH_INTERVAL 4000 // 4 seconds WiFiClientSecure net = WiFiClientSecure(); MQTTClient client = MQTTClient(256); unsigned long lastPublishTime = 0; void setup() { Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.println("Arduino Nano ESP32 connecting to Wi-Fi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); connectToAWS(); } void loop() { client.loop(); if (millis() - lastPublishTime > PUBLISH_INTERVAL) { sendToAWS(); lastPublishTime = millis(); } } void connectToAWS() { // Configure WiFiClientSecure to use the AWS IoT device credentials net.setCACert(AWS_CERT_CA); net.setCertificate(AWS_CERT_CRT); net.setPrivateKey(AWS_CERT_PRIVATE); // Connect to the MQTT broker on the AWS endpoint we defined earlier client.begin(AWS_IOT_ENDPOINT, 8883, net); // Create a handler for incoming messages client.onMessage(messageHandler); Serial.print("Arduino Nano ESP32 connecting to AWS IOT"); while (!client.connect(THINGNAME)) { Serial.print("."); delay(100); } Serial.println(); if (!client.connected()) { Serial.println("Arduino Nano ESP32 - AWS IoT Timeout!"); return; } // Subscribe to a topic, the incoming messages are processed by messageHandler() function client.subscribe(AWS_IOT_SUBSCRIBE_TOPIC); Serial.println("Arduino Nano ESP32 - AWS IoT Connected!"); } void sendToAWS() { StaticJsonDocument<200> message; message["timestamp"] = millis(); message["data"] = analogRead(0); // Or you can read data from other sensors char messageBuffer[512]; serializeJson(message, messageBuffer); // print to client client.publish(AWS_IOT_PUBLISH_TOPIC, messageBuffer); Serial.println("sent:"); Serial.print("- topic: "); Serial.println(AWS_IOT_PUBLISH_TOPIC); Serial.print("- payload:"); Serial.println(messageBuffer); } void messageHandler(String &topic, String &payload) { Serial.println("received:"); Serial.println("- topic: " + topic); Serial.println("- payload:"); Serial.println(payload); // You can process the incoming data as json object, then control something /* StaticJsonDocument<200> doc; deserializeJson(doc, payload); const char* message = doc["message"]; */ }

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.
Biblioteca MQTT para Arduino Nano ESP32
  • Digite ArduinoJson na caixa de pesquisa, depois procure a biblioteca ArduinoJson de Benoit Blanchon.
  • Clique no botão Install para instalar a biblioteca ArduinoJson.
Biblioteca Json para Arduino Nano ESP32
  • 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.
    Arduino IDE 2 adiciona arquivo
    • Dê ao arquivo o nome secrets.h e clique no botão OK
    Arduino IDE 2 adiciona o arquivo secrets.h
    • Copie o código abaixo e cole-o no arquivo secrets.h criado.
    #include <pgmspace.h> #define SECRET #define THINGNAME "ESP32-thing" const char WIFI_SSID[] = ""; const char WIFI_PASSWORD[] = ""; const char AWS_IOT_ENDPOINT[] = "xxxxx.amazonaws.com"; // Amazon Root CA 1 static const char AWS_CERT_CA[] PROGMEM = R"EOF( -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- )EOF"; // Device Certificate static const char AWS_CERT_CRT[] PROGMEM = R"KEY( -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- )KEY"; // Device Private Key static const char AWS_CERT_PRIVATE[] PROGMEM = R"KEY( -----BEGIN RSA PRIVATE KEY----- -----END RSA PRIVATE KEY----- )KEY";
    • 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:
      Endpoint do AWS IoT
      • 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:

∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
Arduino Nano ESP32 connecting to AWS IOT. Arduino Nano ESP32 - AWS IoT Connected! sent: - topic: esp32/esp32-to-aws - payload:{"timestamp":12743,"data":0} sent: - topic: esp32/esp32-to-aws - payload:{"timestamp":16745,"data":130}
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2

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
MQTT Test Client do AWS IoT com ESP32
  • 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
MQTT Test Client do AWS IoT com ESP32
  • 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.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
received: - topic: esp32/aws-to-esp32 - payload: { "message": "Hello from AWS IoT console" }
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2

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...

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!