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";
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);
}
Creación de recursos en AWS
Para realizar una prueba rápida de concepto podemos utilizar la opción Things de AWS IoT.
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.
Al crear el recurso podemos asignarle un nombre y añadir configuraciones adicionales pero en este caso solo será necesario asignarle un nombre.
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.
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"
}
]
}
Recuerda reemplazar REGION y ACCOUNT_ID con los valores correspondientes a tu configuración.
Al finalizar la creación del recurso es necesario descargar los certificados y llaves creados automáticcamente para nosotros.
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[]
Utilizaremos el nombre de dominio que podemos encontrar en el menú de configuraciones de dominio de AWS IoT.
Para la variable
static const char AWS_CERT_CA[] PROGMEM = R"EOF(
-----BEGIN CERTIFICATE-----
***
-----END CERTIFICATE-----
)EOF";
Utilizaremos el contenido del archivo AmazonRootCA1.pem
Para la variable
static const char AWS_CERT_CRT[] PROGMEM = R"KEY(
-----BEGIN CERTIFICATE-----
***
-----END CERTIFICATE-----
)KEY";
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";
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.
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.
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.
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)