Introducción
En la era de la tecnología inteligente, combinar el Internet de las Cosas (IoT) con la Inteligencia Artificial Generativa abre un mundo de oportunidades. Imagina una App que, al detectar un aumento en la temperatura, responde presentando un chiste en una pantalla OLED.
En este tutorial, te guiaremos a través de cada paso para desarrollar esta innovadora App, explorando cómo la integración de sensores de temperatura con algoritmos de IA puede crear interacciones más humanas y entretenidas.
Requisitos Previos:
Costo para completar:
¿Cómo funciona esta aplicación?
El flujo comienza con el NodeMCU ESP8266, que está equipado con el sensor de temperatura AM2302 DHT22 para medir la temperatura ambiente. Estos datos se envían a AWS IoT mediante el protocolo MQTT, publicándose en el tópico esp8266/pub
. AWS IoT Core evalúa si la temperatura supera el umbral establecido de 30°C. Si es así, se activa una función Lambda que genera un chiste utilizando Amazon Bedrock. Este chiste se envía de vuelta al ESP8266 a través de MQTT, publicándose en el tópico esp8266/joke
. Finalmente, el ESP8266 recibe el chiste y lo muestra en la pantalla OLED conectada.
Este flujo permite que la aplicación responda de manera dinámica a los cambios en la temperatura, ofreciendo contenido entretenido y personalizado para ti.
Muestra los pasos para llegar a la solución
Diagrama de conexión
Para que la App funcione correctamente, es fundamental seguir el diagrama de conexión entre el NodeMCU ESP8266, el sensor de temperatura AM2302 DHT22 y la pantalla OLED I2C. Asegúrate de que cada componente esté conectado a los pines adecuados. Es importante destacar que el código está específicamente adaptado para estas conexiones; cualquier modificación en la configuración podría afectar el rendimiento de la App o su funcionamiento.
Paso 1: Acceder a la Consola de AWS
- Inicie sesión en la consola de administración de AWS utilizando sus credenciales.
Paso 2: Navegar a AWS IoT Core
- En la barra de búsqueda de la consola, escriba AWS IoT Core y seleccione el servicio correspondiente.
Paso 3: Acceder a la Sección de Objetos
- En el panel de navegación izquierdo, haga clic en
Administrar
. - Luego, seleccione
Todos los dispositivos
y, posteriormente,Objetos
.
Paso 4: Crear un Nuevo Objeto
- Haga clic en el botón
Crear objeto
. - Elija la opción
Crear un único objeto
. - Asigne un nombre único a su objeto que lo identifique claramente.
Paso 5: Configurar Certificados
- Seleccione
Crear certificados
para generar automáticamente un nuevo certificado que permitirá una comunicación segura entre su dispositivo y AWS IoT.
Paso 6: Crear una Política de IoT
- Para otorgar los permisos necesarios, cree una política con la siguiente configuración JSON:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:Connect",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iot:Publish",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iot:Receive",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iot:Subscribe",
"Resource": "*"
}
]
}
Paso 7: Finalizar la Creación del Objeto
- Revise todas las configuraciones y haga clic en
Crear objeto
para completar el proceso.
Paso 8: Guardar Archivos Importantes
- Descargue y almacene de forma segura los siguientes archivos proporcionados:
- Punto de enlace de Amazon Trust Services: Necesario para que su dispositivo se conecte al punto de enlace correcto.
- Certificado del dispositivo: Identifica de manera única a su dispositivo en AWS IoT.
- Clave privada: Utilizada para autenticar su dispositivo durante la comunicación.
Paso 9: Verificar la Conectividad
- Para asegurarse de que su dispositivo puede comunicarse con AWS IoT, realice una prueba de conectividad.
- En la consola de AWS IoT, navegue a
Conectar
y luego seleccioneConectar un dispositivo
. - Siga las instrucciones proporcionadas para su tipo de dispositivo específico.
- Por ejemplo, puede utilizar el comando
ping
para verificar la conectividad con el punto de enlace de AWS IoT:
ping your-endpoint.iot.us-east-1.amazonaws.com
Reemplace your-endpoint
con el punto de enlace específico de su cuenta, que puede encontrar en la sección de detalles del objeto creado.
Paso 10: Crear un Rol de AWS IAM
Para que nuestra función Lambda interactúe correctamente con otros servicios de AWS, necesitamos crear un rol de IAM con los permisos adecuados.
Acceder al servicio IAM: Inicia sesión en la consola de administración de AWS y, en la barra de búsqueda, escribe IAM y selecciona el servicio correspondiente.
-
Crear un nuevo rol:
- En el panel de navegación izquierdo, haz clic en "Roles" y luego en "Crear rol".
- Selecciona "AWS service" como tipo de entidad de confianza y elige "Lambda" como servicio que usará este rol.
- Haz clic en "Siguiente: Permisos".
-
Asignar permisos al rol:
- En la lista de políticas, busca y selecciona las siguientes:
AmazonBedrockFullAccess
AWSIoTFullAccess
CloudWatchLogsFullAccess
- Tras seleccionar las políticas, haz clic en "Siguiente: Etiquetas" y luego en "Siguiente: Revisar".
- En la lista de políticas, busca y selecciona las siguientes:
-
Nombrar y crear el rol:
- Asigna un nombre descriptivo al rol, como
AWSLambdaBedrockRole
. - Revisa la configuración y haz clic en "Crear rol".
- Asigna un nombre descriptivo al rol, como
Paso 11: Crear una Función Lambda
Ahora, crearemos una función Lambda que procesará los datos de temperatura y generará chistes cuando se superen ciertos umbrales.
Acceder al servicio Lambda: En la consola de AWS, busca "Lambda" en la barra de búsqueda y selecciona el servicio.
-
Crear una nueva función:
- Haz clic en "Crear función".
- Elige "Crear desde cero".
- Configura los siguientes detalles:
-
Nombre de la función:
Bedrock-IotLambda
-
Tiempo de ejecución: Selecciona
Python 3.12
-
Arquitectura: Selecciona
arm64
-
Permisos: Selecciona "Usar un rol existente" y elige
AWSLambdaBedrockRole
creado anteriormente.
-
Nombre de la función:
- Haz clic en "Crear función".
Paso 12: Configurar la Función Lambda
Para que la función Lambda se active cuando se detecten temperaturas superiores a 30°C, configuraremos un desencadenador de AWS IoT.
-
Añadir un desencadenador:
- En la página de detalles de la función Lambda, desplázate hasta la sección "Desencadenadores" y haz clic en "Añadir desencadenador".
- Selecciona "AWS IoT" de la lista.
-
Crear una regla de IoT personalizada:
- Elige "Crear una regla nueva".
- Proporciona un nombre y una descripción para la regla, por ejemplo:
-
Nombre de la regla:
High_Temperature_Trigger
-
Descripción:
Activa la función Lambda cuando la temperatura supera los 30°C
-
Nombre de la regla:
- En "Instrucción de consulta de regla", ingresa la siguiente consulta:
SELECT temperature FROM 'esp8266/pub' WHERE temperature > 30.0
- Haz clic en "Crear regla".
Paso 13: Clonar Repositorio
✅ Clonar el repositorio
git clone https://github.com/fernandosilvot/App-IoT_GenAI
✅ Ir a:
cd App-IoT_GenAI
Paso 14: Integrar Código
Copia el código llamado lambda.py. Este código, como puedes intuir, es para la función Lambda. Debes subir el código y luego realizar el despliegue.
A continuación, el código para el ESP8266 en Arduino IDE comienza con Main.ino. Completa los campos con la red Wi-Fi y su contraseña, así como el nombre del dispositivo en AWS y el broker de AWS.
En el código env.h, debes integrar los siguientes certificados en este orden:
- Punto de enlace de Amazon Trust Services (Amazon trust services endpoint)
- Certificado del dispositivo (Device certificate)
- Clave privada (Private key file)
Conclusión
La integración del Internet de las Cosas (IoT) con la Inteligencia Artificial Generativa abre nuevas posibilidades. Este proyecto combina hardware accesible y servicios de AWS para crear una aplicación que responde dinámicamente al detectar un aumento en la temperatura, generando contenido entretenido y personalizado.
A lo largo del desarrollo, enfrenté desafíos significativos debido a mi inexperiencia con Arduino IDE y el funcionamiento de la ESP8266. Afortunadamente, conté con el valioso apoyo de Marcos Sepúlveda, quien me guió en temas como MQTT y los detalles técnicos de este módulo, y de Elizabeth Fuentes, quien proporcionó algunos de los materiales necesarios y me ayudó a tener una visión más clara del proyecto.
Uno de los principales retos fue que la ESP8266 solo acepta peticiones HTTP y no HTTPS. Inicialmente, consideré crear una API Gateway, pero solo permite peticiones HTTPS. Sin embargo, otra opción era usar una instancia EC2 para mantener una API; lamentablemente, esta opción incrementaría los costos de manera significativa. Con el apoyo de Elizabeth, exploré otras alternativas y decidí implementar una función Lambda que enviara las respuestas por MQTT directamente al ESP8266. Anteriormente, Marcos me explicó que la ESP8266 podía no solamente enviar datos, si no también recibir datos a través de MQTT, lo que facilitó esta solución.
Este proyecto me permitió aprender sobre las limitaciones técnicas de la ESP8266 y sobre cómo superar problemas complejos con creatividad y colaboración. Agradezco el apoyo recibido y estoy satisfecho de haber completado este desafío.
Top comments (0)