Arduino Nano ESP32 - AWS IoT

Este tutorial te enseña cómo conectar Arduino Nano ESP32 a AWS IoT Core. En detalle, aprenderemos:

Arduino Nano ESP32 AWS IoT

Hardware Requerido

1×Arduino Nano ESP32
1×Cable USB Tipo-A a Tipo-C (para PC USB-A)
1×Cable USB Tipo-C a Tipo-C (para PC USB-C)
1×Protoboard
1×Cables Puente
1×(Recomendado) Placa de Expansión de Terminales de Tornillo para Arduino Nano
1×(Recomendado) Placa de Expansión Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentación para Arduino Nano ESP32

Or you can buy the following kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.

Acerca de Arduino Nano ESP32 y AWS IoT

Arduino Nano ESP32 se conecta a AWS IoT Core a través del protocolo MQTT. No es gran cosa porque las bibliotecas están disponibles, lo que facilita su uso.

Sin embargo, no es tan fácil como conectar el Arduino Nano ESP32 a un broker MQTT como Mosquitto instalado en tu PC. Esto se debe a que AWS IoT Core aplica estrictas medidas de seguridad. Se necesita configurar AWS IoT Core para obtener credenciales de autenticación y autorización antes de escribir el código del Arduino Nano ESP32. En resumen, debemos dar dos pasos importantes:

  • Paso 1: Configuración de AWS IoT Core. Después de este paso, obtendremos las credenciales de autenticación, que se utilizarán en el código del Arduino Nano ESP32.
  • Paso 2: Escribir el código para Arduino Nano ESP32.

Vamos a entrar en detalle.

Configuración de AWS IoT Core para su uso con Arduino Nano ESP32

Los propósitos de este paso son:

  • Creando una representación del Arduino Nano ESP32 en AWS IoT Core (llamado Dispositivo).
  • Configurando la autorización que otorga permiso para que el Arduino Nano ESP32 se conecte, publique y se suscriba a AWS IoT Core (llamada Política).
  • Generando las credenciales de AWS que se utilizarán para la autenticación (llamados Certificados). Una vez creadas, descargaremos las credenciales y las colocaremos en el código del Arduino ESP32.

A continuación se muestra cómo configurar AWS IoT Core para su uso con Arduino Nano ESP32 a través de la Consola de AWS IoT Core. Tenga en cuenta que la interfaz de usuario de AWS puede cambiar con el tiempo, pero será similar a lo siguiente:

  • Inicia sesión en la Consola AWS IoT
  • Crear un dispositivo navegando a Gestionar Todos los dispositivos Things
AWS IoT crea dispositivos
  • Haz clic en el botón Crear cosas.
  • Selecciona Crear una sola cosa y haz clic en el botón Siguiente.
AWS IoT Core crea cosas
  • Especifique el nombre del dispositivo, por ejemplo, ESP32-thing y haga clic en el Siguiente botón en la parte inferior de la página.
Nombre del dispositivo de AWS IoT Core
  • Generar las credenciales al seleccionar la opción Generar automáticamente un nuevo certificado, y haga clic en el Siguiente botón.
AWS IoT Core genera un certificado.
  • Ahora, se crea un certificado y se vincula al objeto.
  • Crear una política haciendo clic en el Crear política botón.
AWS IoT Core: Crear política
  • Se abrirá una nueva pestaña.
Crear política de AWS IoT Core para ESP32
  • Especifique el Nombre de la política, por ejemplo, ESP32-policy y haga clic en el JSON botón.
  • Copie el contenido de la política JSON que se muestra a continuación y péguelo en el área Documento de políticas.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" } ] }
  • Haz clic en el botón Crear en la parte inferior de la página para crear la política.
  • Ahora, se ha creado una política y está adjunta al Certificado. Cierra esa página y vuelve a la página del dispositivo.
  • Verifica la ESP32-policy y haz clic en el botón Crear dispositivo para crear el dispositivo.
AWS IoT Core crea un dispositivo ESP32
  • Aparece una ventana emergente que le permite descargar los archivos de credenciales. Descargue todos los archivos y guárdelos en una ubicación segura en su PC y manténgalos confidenciales.
Archivo de credenciales de AWS IoT Core
  • Luego, haga clic en el botón Hecho.

Entre los archivos descargados, hay tres archivos que se utilizarán en el código de Arduino Nano ESP32 en los próximos pasos:

  • xxxxxxxxxx-certificado.pem.crt
  • xxxxxxxxxx-privada.pem.key
  • AmazonRootCA1.pem

Estos archivos se pueden abrir con cualquier editor de texto, como Notepad o Notepad++.

Escribiendo el código de Arduino Nano ESP32 para conectarse a AWS IoT Core

/* * Este código de Arduino Nano ESP32 fue desarrollado por es.newbiely.com * Este código de Arduino Nano ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.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"]; */ }

Pasos R\u00e1pidos

  • Si es la primera vez que usas Arduino Nano ESP32, consulta cómo configurar el entorno para Arduino Nano ESP32 en el IDE de Arduino.
  • Abre el Administrador de Bibliotecas haciendo clic en el icono Administrador de Bibliotecas en la barra de navegación izquierda del IDE de Arduino
  • Escribe MQTT en el cuadro de búsqueda, luego busca la biblioteca MQTT de Joel Gaehwiler.
  • Haz clic en el botón Instalar para instalar la biblioteca MQTT.
Biblioteca MQTT para Arduino Nano ESP32
  • Escribe ArduinoJson en la caja de búsqueda, y luego busca la biblioteca ArduinoJson de Benoit Blanchon.
  • Haz clic en el botón Instalar para instalar la biblioteca ArduinoJson.
Biblioteca JSON para Arduino Nano ESP32
  • Copie el código anterior y péguelo en Arduino IDE.
  • Cree el archivo secrets.h en Arduino IDE haciendo:
    • Haga clic en el botón justo debajo del icono del monitor serie y elija Nueva pestaña, o use las teclas Ctrl+Shift+N keys.
    Arduino IDE 2 añade un archivo
    • Especifica el nombre del archivo secrets.h y haz clic en el botón OK
    Arduino IDE 2 añade el archivo secrets.h
    • Copia el código a continuación y pégalo en el archivo secrets.h creado.
    #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";
    • Actualice la siguiente información en el secrets.h
      • Las WIFI_SSID y WIFI_PASSWORD de tu red WiFi
      • Las AWS_CERT_CA, AWS_CERT_CRT y AWS_CERT_PRIVATE. Esta información se encuentra en los archivos que descargaste en el paso anterior.
      • El AWS_IOT_ENDPOINT. Esta información se puede encontrar en la consola de AWS IoT navegando a Configuración, como se muestra en la imagen a continuación:
      punto final de AWS IoT
      • Compilar y subir el código a la placa Arduino Nano ESP32 haciendo clic en el botón Subir en el IDE de Arduino

Enviando datos desde Arduino Nano ESP32 a AWS IoT

El código anterior de Arduino Nano ESP32 lee periódicamente datos de un pin analógico y los envía a AWS IoT cada 4 segundos. Si abres el Monitor Serial en el IDE de Arduino, verás el registro como el que aparece a continuación:

COM6
Send
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}
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Para verificar si los datos son recibidos por AWS IoT o no, siga los siguientes pasos:

  • En la consola de AWS IoT, navegue a Prueba Cliente de Prueba MQTT
Cliente de Prueba MQTT de AWS IoT para ESP32
  • Haz clic en el botón Suscribirse a un tema.
  • Escribe esp32/esp32-to-aws en el Filtro de tema. Puedes cambiar el tema, pero DEBES que coincida con el tema del código de Arduino Nano ESP32.
  • Haz clic en el botón Suscribirse.
  • Podrás ver los datos enviados desde Arduino Nano ESP32 en la Consola de AWS IoT.

Enviando datos desde AWS IoT a Arduino Nano ESP32

Puedes enviar los datos desde la consola de AWS IoT al Arduino Nano ESP32 siguiendo los siguientes pasos:

  • En el IDE de Arduino, abre el Monitor Serial
  • En la Consola de AWS IoT, navega a Prueba Cliente de Prueba MQTT
Cliente de Prueba MQTT de AWS IoT para ESP32
  • Haz clic en el botón Publicar en un tema.
  • Escribe esp32/aws-to-esp32 en el Nombre del tema. Puedes cambiar el tema, pero DEBE coincidir con el tema del código Arduino Nano ESP32.
  • Opcionalmente, puedes cambiar la carga útil del mensaje, o simplemente dejarla por defecto.
  • Haz clic en el botón Publicar.
  • Abra el Monitor serie en el IDE de Arduino; verá el mensaje enviado desde la Consola de AWS IoT.
COM6
Send
received: - topic: esp32/aws-to-esp32 - payload: { "message": "Hello from AWS IoT console" }
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Haz más con AWS

Ahora ya puedes enviar datos desde el Arduino Nano ESP32 a AWS IoT Core y viceversa. Luego, puedes configurar IoTRule para conectar el Arduino Nano ESP32 con otros servicios de AWS como Lambda, DynamoDB, Amplify, RDS...

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!