DEV Community

Walter Bejar
Walter Bejar

Posted on

Prototipos rápidos con Wokwi, ESP32 y AWS IoT Core

1. Introducción

En el desarrollo de proyectos IoT, los tiempos de entrega rápidos son cruciales para validar ideas y acelerar el desarrollo. Herramientas como Wokwi (un simulador de microcontroladores) y ESP32 permiten construir prototipos sin depender de hardware físico, mientras que AWS IoT Core simplifica la conexión de dispositivos a la nube para gestionar datos en tiempo real.

En este tutorial, te guiaré paso a paso para configurar un entorno de simulación, programar un ESP32 y conectarlo a AWS IoT Core. Aprenderás cómo aprovechar estas herramientas para explorar el potencial de proyectos IoT, desde la simulación hasta la nube.


2. Herramientas y requisitos

Para seguir este tutorial, necesitarás:

  • Wokwi: Un simulador de microcontroladores compatible con ESP32.
  • Navegador web: Wokwi se ejecuta completamente en tu navegador, sin necesidad de instalaciones adicionales.

3. Implementación del proyecto

Objetivo

Simular un sensor DHT22 que mida temperatura y humedad, y enviar los datos a la nube utilizando AWS IoT Core.

Creación del proyecto

Para agilizar el desarrollo, he preparado un proyecto base en Wokwi: AWS IoT Core Demo. Este incluye una configuración inicial para leer datos del sensor DHT22 y enviarlos a la nube mediante MQTT.

Código básico

El archivo secrets.h del proyecto es el lugar donde configurarás tus credenciales de AWS IoT:

#include <pgmspace.h>
#define SECRET
// Edit and set thing name
#define THINGNAME "esp32poc"

// WiFi credentials
const char WIFI_SSID[] = "Wokwi-GUEST";
const char WIFI_PASSWORD[] = "";

// AWS IoT Core endpoint
const char AWS_IOT_ENDPOINT[] = "*****.iot.us-east-1.amazonaws.com";

// Amazon Root CA
static const char AWS_CERT_CA[] PROGMEM = R"EOF(
-----BEGIN CERTIFICATE-----
*
-----END CERTIFICATE-----
)EOF";

// Client Certificate
static const char AWS_CERT_CRT[] PROGMEM = R"KEY(
-----BEGIN CERTIFICATE-----
*
-----END CERTIFICATE-----
)KEY";

// Client Private Key
static const char AWS_CERT_PRIVATE[] PROGMEM = R"KEY(
-----BEGIN RSA PRIVATE KEY-----
*
-----END RSA PRIVATE KEY-----
)KEY";
Enter fullscreen mode Exit fullscreen mode

Aquí, debes reemplazar los valores por los de tu cuenta AWS. El archivo también contiene las claves y certificados necesarios.

El archivo principal contiene funciones predefinidas como connectAWS() para establecer la conexión y publishMessage() para enviar datos. A continuación, se muestra un extracto del ciclo principal:

void setup()
{
  Serial.begin(115200);
  connectAWS(); //permite la conexion a AWS IoT Core
  dht.begin(); // inicializa la libreria dht
  Wire.begin(); // inicializa la libreria wire
  timeClient.begin(); // inicializa la libreria ntp
  timeClient.setTimeOffset(0);
}

void loop()
{
  h = dht.readHumidity();
  t = dht.readTemperature();

  timeClient.update();
  if (isnan(h) || isnan(t))
  {
    Serial.println(F("Failed to read data from DHT sensor!"));
    return;
  }

  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.println(F("°C "));

  publishMessage(); // publica el mensaje mediante MQTT a AWS IoT Core
  client.loop();
  delay(1000);
}
Enter fullscreen mode Exit fullscreen mode

Creación de recursos en AWS

Para realizar una prueba rápida de concepto podemos utilizar la opción Things de AWS IoT.

Image description

Desde dicha opción podremos crear un recurso Thing que estará asociado a un dispositivo, si bien podemos crear múltiples recursos para esta prueba de concepto solo crearemos un recurso.

Image description

Al crear el recurso podemos asignarle un nombre y añadir configuraciones adicionales pero en este caso solo será necesario asignarle un nombre.

Image description

Cuando registramos un nuevo dispositivo necesitamos un certificado para poder conectarnos a AWS IoT, en este caso utilizaremos la ópcion recomendada que es generar un nuevo certificado de forma automática.

Image description

Como último paso es necesario asociar una politica de seguridad al certificado, podemos utilizar el siguiente ejemplo de política.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:Connect",
      "Resource": "arn:aws:iot:REGION:ACCOUNT_ID:client/esp32poc"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Subscribe",
      "Resource": "arn:aws:iot:REGION:ACCOUNT_ID:topicfilter/esp32poc/sub"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Publish",
      "Resource": "arn:aws:iot:REGION:ACCOUNT_ID:topic/esp32poc/pub"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Receive",
      "Resource": "arn:aws:iot:REGION:ACCOUNT_ID:topic/esp32poc/sub"
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

Recuerda reemplazar REGION y ACCOUNT_ID con los valores correspondientes a tu configuración.

Image description

Al finalizar la creación del recurso es necesario descargar los certificados y llaves creados automáticcamente para nosotros.

Image description

Configuración de credenciales

Una vez que nuestro recurso está creado, podemos configurar nuestra credenciales en el archivo secrets.h del proyecto de wokwi.

Para la variable

const char AWS_IOT_ENDPOINT[]
Enter fullscreen mode Exit fullscreen mode

Utilizaremos el nombre de dominio que podemos encontrar en el menú de configuraciones de dominio de AWS IoT.

Image description

Para la variable

static const char AWS_CERT_CA[] PROGMEM = R"EOF(
-----BEGIN CERTIFICATE-----
***
-----END CERTIFICATE-----
)EOF";
Enter fullscreen mode Exit fullscreen mode

Utilizaremos el contenido del archivo AmazonRootCA1.pem

Para la variable

static const char AWS_CERT_CRT[] PROGMEM = R"KEY(
-----BEGIN CERTIFICATE-----
***
-----END CERTIFICATE-----
)KEY";
Enter fullscreen mode Exit fullscreen mode

Utilizaremos el contenido del archivo que finaliza con -certificate.pem.crt

Para la variable

static const char AWS_CERT_PRIVATE[] PROGMEM = R"KEY(
-----BEGIN RSA PRIVATE KEY-----
*
-----END RSA PRIVATE KEY-----
)KEY";
Enter fullscreen mode Exit fullscreen mode

Utilizaremos el contenido del archivo que finaliza con -private.pem.key


4. Prueba de comunicación

Una vez que finalizamos con las configuraciones del proyecto de wokwi podemos iniciar la ejecución del mismo utilizando el botón de iniciar la simulación.

Image description

El inicio de la simulación puede demorar unos segundos pero luego de ello podemos monitorear la ejecución, en la salida de consola podemos ver los mensajes del proyecto.

Image description

Si utilizamos el cliente de prueba de AWS IoT podremos ver cómo los mensajes son enviados al tópico que hemos configurado anteriormente AWS_IOT_PUBLISH_TOPIC.

Image description


5. Conclusiones

Este tutorial demuestra cómo herramientas como Wokwi y AWS IoT Core permiten validar ideas rápidamente sin hardware físico. La simulación acelera el desarrollo inicial, y la integración con AWS IoT Core asegura un camino sencillo para escalar proyectos hacia un entorno de producción.

Si estás iniciando en IoT o buscando formas de prototipar rápidamente, esta combinación de tecnologías es una excelente opción para ahorrar tiempo y recursos.

¿Listo para crear tu próximo proyecto IoT? Comparte tus experiencias o dudas en los comentarios. ¡Me encantaría saber cómo utilizas estas herramientas!

Top comments (0)