Logo

dev-resources.site

for different kinds of informations.

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

Published at
12/31/2024
Categories
wokwi
iot
aws
esp32
Author
wbejarch
Categories
4 categories in total
wokwi
open
iot
open
aws
open
esp32
open
Author
8 person written this
wbejarch
open
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!

iot Article's
30 articles in total
Favicon
IOT: Dynamic Deep Sleep Configuration for ESP8266 and ESP32 Boards
Favicon
Edge Computing: The Future of Scalable and Low-Latency Applications
Favicon
POST ABOUT THE TRENDS IN WEB DEVELOPMENT
Favicon
Home Assistant: How to Fix API Disconnection and False Positive Sensor Readings with ESP8266 Boards
Favicon
Smart Manufacturing with Industrial IoT Solutions
Favicon
Theta Technolabs Recognized as One of the 10 Most Prominent IoT Solutions Providers to Watch – 2024 by Insights Success
Favicon
Prototipos rápidos con Wokwi, ESP32 y AWS IoT Core
Favicon
Pumpkins in the Cloud: control your Jack-o-Lantern with Azure IoTHub!
Favicon
Smart Home Security: Advanced Motion Detection with CCTV
Favicon
How IoT Device Management Improves Energy Efficiency in Smart Homes
Favicon
Tech Innovations of 2024 That Will Shape 2025
Favicon
The Future of Water Management: Innovations in Water Level Monitoring Systems
Favicon
Optimizing Environmental Resource Management with IoT and AI Integration
Favicon
The Future of CNC Machining in 3PL and Its Potential to Drive Innovation and Efficiency
Favicon
The Role of IoT Device Management in Smart Water Systems
Favicon
Benefits of a Smart Irrigation System Using IoT for Sustainable Farming
Favicon
Securing IoT Devices: Challenges and Solutions
Favicon
How I Used LLMs to Make IoT Devices Understand Any Language
Favicon
Serverless self-service IoT certificate management - Part 2
Favicon
What Are IoT SIM Cards, and Why Are They Revolutionizing Connectivity?
Favicon
The Future of IoT Consulting in an AI-Driven World
Favicon
Matter protocol on a budget
Favicon
Simplify IoT Device Updates with Azure Device Update for IoT Hub
Favicon
Building a Practical IoT Solution with Azure IoT Hub: From Device Setup to Telemetry Data Storage
Favicon
Phone connection
Favicon
Why Choose the MQTT Protocol for your IoT Devices (with some caveats)
Favicon
InfluxDB: Optimize your Data with Data Retention Policies and Continuous Queries
Favicon
2025: IoT in Healthcare Revolutionizing Patient Care
Favicon
Secure Updates Drive Efficiency in Smart Energy Systems
Favicon
Bootable USB Drive Linux Streamlining OTA Updates for Smart Energy

Featured ones: