Cómo construir una caja para mascotas inteligente con M5StickC Plus2
Introducción
Con el rápido desarrollo de la tecnología del Internet de las Cosas (IoT), la Caja Inteligente para Mascotas ha surgido como un nuevo campo de aplicación. Los dueños de mascotas están cada vez más preocupados por la calidad de vida de sus mascotas, pero las cajas tradicionales para mascotas carecen de control automatizado y monitoreo ambiental. La Caja Inteligente para Mascotas, al integrar sensores y sistemas de control automatizado, es capaz de monitorear y ajustar el entorno de vida de las mascotas en tiempo real.
Este proyecto utiliza tecnología IoT y una variedad de módulos de sensores para monitorear parámetros como temperatura, humedad, concentración de CO₂ e intensidad de luz dentro de la caja para mascotas, asegurando que el ambiente siempre se mantenga dentro de un rango cómodo. Además, el proyecto incorpora funcionalidad de control remoto a través de una plataforma en la nube, permitiendo a los usuarios ver datos ambientales y ajustar dispositivos como humidificadores, ventiladores y almohadillas térmicas en cualquier momento. La Caja Inteligente para Mascotas facilita a los dueños de mascotas gestionar el ambiente de sus mascotas, mejorando la calidad de vida de las mascotas.
¿Qué es M5StickC Plus2?
-
Diseño Compacto: Midiendo solo 54mm × 54mm, es fácil de llevar e integrar en varios proyectos.
-
Pantalla incorporada: Una pantalla TFT a color de 1.14 pulgadas que soporta múltiples fuentes y gráficos.
-
Sensores Multifuncionales: Incluye un acelerómetro, giroscopio, sensores de temperatura y humedad, entre otros, adecuados para diversos escenarios de aplicación.
-
Altavoz incorporado: Soporta la reproducción de audio, ideal para retroalimentación de sonido y funciones de alarma.
-
Interfaces Ricas: Soporta GPIO, I2C, UART y otras interfaces de comunicación, facilitando la expansión de periféricos.
-
Batería de Alimentación: La batería integrada soporta un funcionamiento a largo plazo, adecuada para aplicaciones móviles.
Esta sección describe el hardware y construye el entorno.
1. Hardware utilizado
2. Método de Conexión
Conexión M5StickC Plus 2 y PaHub:
Conexiones de PaHub y Sensores:
-
El Canal 0 en el PaHub está conectado al SCD40 Sensor de CO2.
-
El Canal 1 en el PaHub está conectado al Sensor de Temperatura Infrarrojo MLX90614.
-
El Canal 2 en el PaHub está conectado a PbHub.
PbHub y Periférico Conexiones:
-
El Canal 0 en el PbHub está conectado a un sensor de luz.
-
El canal 2 en el PbHub está conectado al módulo de cámara (utilizado solo para alimentación).
-
El Canal 3 en el PbHub controla el humidificador a través de un relé.
-
El Canal 4 en el PbHub controla la almohadilla térmica a través de un relé.
-
El Canal 5 en el PbHub controla la luz UVA a través de un relé.
-
El Canal 1 en el PbHub controla el ventilador a través de un relé (opcional).
Configuración del software
1. Entorno de software
Desarrollo Ambiente:
Para algunas de las bibliotecas utilizadas por el sensor, ve directamente a PIO Home -> Libraries -> Registry -> y busca una palabra clave.
Bibliotecas requeridas:
-
M5GFX – Utilizado para la visualización de gráficos y texto, controlando la pantalla M5Stack.
-
M5Unified – Proporciona una interfaz de API unificada para un control más fácil de los dispositivos M5Stack.
-
IRremote – Para recibir y transmitir señales IR para comunicarse con otros dispositivos.
-
M5StickCPlus2 – Controla la placa M5StickC Plus2, gestionando la inicialización y operación del dispositivo.
-
Sensirion I2C SCD4x – Para controlar el sensor ambiental SCD40 para leer la temperatura, la humedad y los niveles de CO2.
-
ArduinoJson – Utilizado para procesar y analizar datos JSON para subir datos de sensores a la plataforma en la nube.
-
M5Unit-HUB y M5Unit-PbHub – Para interactuar con los módulos PaHub y PbHub, expandiendo las interfaces I2C y GPIO, y conectando dispositivos externos adicionales.
-
TimerOne – Para controlar intervalos de tiempo, asegurando la recolección regular de datos del sensor.
-
PubSubClient – Implementa la comunicación MQTT para intercambiar datos con la plataforma en la nube.
-
Biblioteca Adafruit MLX90614 – Utilizada para controlar el sensor de temperatura infrarrojo MLX90614 para leer la temperatura inferior de la caja para mascotas.
2. Estructura del código
-
Conexión WiFi:Se conecta a la red a través de WiFi, lo que permite el acceso a la plataforma en la nube para la suscripción y publicación de datos.
-
MQTT Comunicación:Utiliza la biblioteca PubSubClient para implementar la comunicación MQTT, subiendo datos ambientales a la plataforma en la nube y recibiendo instrucciones de ella.
-
Recuperación de Datos del Sensor: Cada dato del sensor se lee periódicamente y se carga utilizando un método de sondeo:
-
SCD40: Lee la temperatura, la humedad y la concentración de CO2.
-
MLX90614: Lee los datos del sensor de temperatura (temperatura inferior).
-
Control de Dispositivos:Controla relés para encender y apagar dispositivos, como almohadillas térmicas, humidificadores, luces UVA, etc. Los dispositivos se pueden controlar automáticamente o manualmente estableciendo la temperatura y la humedad objetivo.
3. Plataforma IoT y Carga de Datos
-
Selección de Plataforma: Usamos Alibaba Cloud IoT para subir datos y gestionar dispositivos de forma remota.
-
Conexión y Vinculación del Dispositivo: Sigue el tutorial de configuración para vincular tu dispositivo con la plataforma en la nube.
-
Carga de Datos: Los datos del sensor se cargan a través del protocolo MQTT en formato JSON.
// Parse the received JSON message void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); // Convert the received payload to a string char msg[length + 1]; for (unsigned int i = 0; i < length; i++) { msg[i] = (char)payload[i]; } msg[length] = '\0'; // Null terminator for the string // Output the received message Serial.println(msg); // Parse the JSON data JsonDocument doc; // Use JsonDocument to parse JSON DeserializationError error = deserializeJson(doc, msg); // Parse the message into a JSON object // Check if parsing was successful if (error) { Serial.printf("deserializeJson() failed: "); Serial.println(error.f_str()); return; // Exit if parsing failed } // Get the temperature value and print it, correctly retrieving the target_temperature from the nested "params" field if (doc["params"]["target_temperature"].is()) { target_temperature = doc["params"]["target_temperature"]; Serial.print("Temperatura objetivo recibida: "); Serial.println(target_temperature); } // Get the humidity value and print it, correctly retrieving the target_humidity from the nested "params" field if (doc["params"]["target_humidity"].is ()) { target_humidity = doc["params"]["target_humidity"]; Serial.print("Recibido target_humidity: "); Serial.println(target_humidity); } }
4. Llamada de retorno para recibir datos de la plataforma en la nube
// Parse the received JSON message void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); // Convert the received payload to a string char msg[length + 1]; for (unsigned int i = 0; i < length; i++) { msg[i] = (char)payload[i]; } msg[length] = '\0'; // Null terminator for the string // Output the received message Serial.println(msg); // Parse the JSON data JsonDocument doc; // Use JsonDocument to parse JSON DeserializationError error = deserializeJson(doc, msg); // Parse the message into a JSON object // Check if parsing was successful if (error) { Serial.printf("deserializeJson() failed: "); Serial.println(error.f_str()); return; // Exit if parsing failed } // Get the temperature value and print it, correctly retrieving the target_temperature from the nested "params" field if (doc["params"]["target_temperature"].is()) { target_temperature = doc["params"]["target_temperature"]; Serial.print("Temperatura objetivo recibida: "); Serial.println(target_temperature); } // Get the humidity value and print it, correctly retrieving the target_humidity from the nested "params" field if (doc["params"]["target_humidity"].is ()) { target_humidity = doc["params"]["target_humidity"]; Serial.print("Recibido target_humidity: "); Serial.println(target_humidity); } }
Internet de las cosas Configuración de la Plataforma
1. Alibaba Cloud Internet de las cosas:
-
Inicie sesión en la plataforma IoT de Alibaba Cloud, cree un nuevo proyecto y configure los nombres de los dispositivos, las claves de producto, etc.
-
Recupera el ID del cliente, nombre de usuario, contraseña y asegúrate de que la configuración de comunicación MQTT sea correcta.
2. Control de la aplicación:
-
Crea un producto en la plataforma IoT de Alibaba Cloud y configura la interfaz para el control de dispositivos.
-
Utiliza el SDK de Alibaba Cloud para desarrollar una aplicación móvil que permita la monitorización en tiempo real y el control remoto de dispositivos.
Notas y Problemas Comunes
1. Inicialización del sensor:
-
El sensor de CO2 SCD40 requiere aproximadamente 6 segundos para la inicialización antes de que estén disponibles lecturas precisas.
-
El sensor MLX90614 requiere que la velocidad del bus I2C se establezca en 100kHz para funcionar correctamente.
2. Conflictos de Dispositivos:
-
Asegúrese de que las direcciones I2C para los módulos PaHub y PbHub sean únicas para evitar conflictos.
-
Asigne diferentes canales para sensores y periféricos en PaHub para evitar interferencias.
3. Depuración y Mejoramiento:
-
Ajuste la conexión del dispositivo y los intervalos de carga de datos para evitar cargas de datos excesivas y reducir la carga en la plataforma en la nube.
-
Si no se reciben datos en la plataforma en la nube, asegúrese de que las conexiones de los dispositivos sean estables y verifique la configuración de MQTT.
Casos de uso
1. Ambiental Monitoreo y Gestión:
2. Control Remoto y Ajustes:
3. Automatización:
4. Monitoreo de mascotas:
5. Uso versátil:
Posibilidades Futuras y Expansión
1. Entornos para Mascotas Acuáticas:
2. Características de bricolaje y personalización:
3. Salud Escucha:
4. Inteligencia en la Nube y Automatización:
Conclusión
Deja un comentario
Todos los comentarios del blog se revisan antes de publicarlos.