El Ojo del Huerto: Cámara Espía Wi-Fi
Nivel InicialDescripción: Convertiremos el ESP32-CAM en un servidor de transmisión de vídeo en tiempo real. Los niños aprenderán cómo viajan las imágenes por el aire mediante ondas Wi-Fi y cómo inspeccionar el estado macroscópico de las hojas y la tierra a distancia, controlando incluso la iluminación del cultivo desde un navegador.
1. Preparación del Entorno (La primera vez)
- Descarga e instala Arduino IDE desde la web oficial.
- Configura el acceso a los procesadores de Espressif: Ve a
Archivo>Preferencias. En el campo "Gestor de URLs Adicionales de Tarjetas", añade exactamente la siguiente dirección:https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json - Instala el controlador de la placa: Ve a
Herramientas>Placa>Gestor de Tarjetas. Escribe esp32 en el buscador e instala el paquete desarrollado por Espressif Systems.
2. Modificación del Código Oficial
- Abre el ejemplo nativo de la cámara: Ve a
Archivo>Ejemplos>ESP32>Camera>CameraWebServer. Se abrirá un proyecto con varias pestañas de código. - Selección del hardware: Por defecto, el archivo viene configurado para un modelo de cámara distinto. Debes buscar la lista de
#define CAMERA_MODEL_...en la pestaña principal. Añade dos barras inclinadas (//) delante de#define CAMERA_MODEL_ESP_EYEpara desactivarlo, y bórralas de la línea#define CAMERA_MODEL_AI_THINKERpara activarlo. Debe quedar así:// #define CAMERA_MODEL_ESP_EYE #define CAMERA_MODEL_AI_THINKER - Credenciales de Red: Localiza las variables
ssidypassworde introduce los datos exactos del Wi-Fi de tu casa:const char* ssid = "MiRedWifi_2G"; // Red de 2.4GHz obligatorio const char* password = "MiClaveSuperSecreta";
¡Alerta de Fallo Común!
El ESP32-CAM no tiene antena integrada de alta potencia. Si configuras el circuito en una habitación alejada del router de casa, la placa no conseguirá conectarse y el Monitor Serie escupirá puntos suspensivos indefinidamente. Realiza la primera prueba cerca del router.
3. Subida del Firmware al ESP32-CAM
- Encaja la placa ESP32-CAM sobre su base programadora USB (Placa de expansión / MB), asegurándote de que la cámara apunta hacia el lado opuesto del conector USB.
- Conéctala al ordenador mediante el cable Micro-USB.
- En el menú superior de Arduino IDE selecciona:
Herramientas>Placa>ESP32 Arduino> AI Thinker ESP32-CAMHerramientas>Puerto> Elige el puerto activo (ej. COM3 o COM4).
- Haz clic en el botón con icono de flecha hacia la derecha (Subir). Espera pacientemente hasta que la barra inferior indique "Subido con éxito".
4. Análisis y Control Remoto
- Abre el Monitor Serie (icono de la lupa arriba a la derecha).
- Cambia la velocidad de comunicación en el desplegable inferior a 115200 baudios.
- Pulsa una vez el pequeño botón físico RST situado en la parte inferior de la placa del ESP32-CAM para reiniciar el sistema.
- Lee los mensajes en pantalla. Al final verás una línea que dice:
Camera Ready! Use 'http://192.168.1.XX' to connect. - Escribe ese número en el navegador web de cualquier smartphone o tablet conectado al mismo Wi-Fi. Desplázate al final de la página web generada y pulsa Start Stream.
- Análisis del cultivo: Enseña a los niños a usar el control de resolución en pantalla. Activa el interruptor LED Toggle para encender el flash integrado: esto les permitirá comprobar de noche si la tierra brilla por la humedad o está seca y mate.
🎥 Apoyo Audiovisual Recomendado:
Ver Guía de Primeros PasosQué debes extraer de aquí: Utiliza este recurso exclusivamente para comprender de forma visual la orientación exacta en la que se encaja el módulo de la cámara sobre la placa de desarrollo con puerto USB de tipo MB, evitando romper los pines por presión inversa.
El Cineasta Botánico: Time-Lapse en MicroSD
Nivel MedioDescripción: Los jóvenes programarán la placa para automatizar un estudio de crecimiento botánico a medio plazo (fototropismo y germinación). La cámara capturará imágenes fijas a intervalos regulares, gestionará el almacenamiento local físico en una tarjeta MicroSD y entrará en estados de hibernación profunda (Deep Sleep) para proteger los componentes del calor continuo.
1. Acondicionamiento del Medio de Almacenamiento
- El ESP32-CAM utiliza ranuras de conexión por bus MMC de un solo hilo que exigen tarjetas con formato antiguo. Consigue una MicroSD de entre 4GB y 32GB de capacidad máxima.
- Introduce la tarjeta en el ordenador, haz clic derecho sobre la unidad y selecciona Formatear. Escoge imperativamente el sistema de archivos FAT32. Si utilizas exFAT o *NTFS*, el código devolverá error de lectura de hardware.
2. Lógica del Código Avanzado (Arquitectura del Script)
A diferencia de un ordenador, cuando el ESP32 entra en sueño profundo, borra su memoria RAM interna. Si guardamos la foto con el nombre fijo foto.jpg, en cada despertar el programa sobrescribirá la foto anterior. Solucionaremos esto utilizando la memoria no volátil EEPROM de la placa para guardar el número de la foto actual.
Crea un nuevo boceto vacío en Arduino IDE e implementa la siguiente estructura lógica combinando las librerías de control de cámara:
#include "esp_camera.h"
#include "Arduino.h"
#include "FS.h" // Sistema de archivos
#include "SD_MMC.h" // Control de la MicroSD dedicada
#include "EEPROM.h" // Memoria permanente para el contador
#define EEPROM_SIZE 2
#define TIME_TO_SLEEP 3600 // Intervalo de captura: 3600 segundos (1 hora)
void setup() {
Serial.begin(115200);
EEPROM.begin(EEPROM_SIZE);
// 1. Inicializar los pines de la cámara (Modelo AI-Thinker)
camera_config_t config;
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
// ... (Configuración estándar de la estructura de la cámara a resolución UXGA)
esp_err_t err = esp_camera_init(&config);
// 2. Arrancar la Tarjeta MicroSD
if(!SD_MMC.begin()){
Serial.println("Error: Tarjeta SD no detectada");
return;
}
// 3. Capturar frame de la planta
camera_fb_t * fb = esp_camera_fb_get();
if(!fb) { Serial.println("Fallo en captura"); return; }
// 4. Leer ID de foto actual de la EEPROM e incrementar
unsigned int pictureNumber = EEPROM.read(0) + (EEPROM.read(1) << 8);
pictureNumber++;
// Definir la ruta del archivo (Ejemplo: /planta_1.jpg)
String path = "/planta_" + String(pictureNumber) + ".jpg";
fs::FS &fs = SD_MMC;
File file = fs.open(path.c_str(), FILE_WRITE);
if(!file){
Serial.println("Error al abrir archivo para escritura");
} else {
file.write(fb->buf, fb->len); // Escribir los bytes de la imagen
Serial.printf("Guardado correctamente en: %s\n", path.c_str());
}
file.close();
esp_camera_fb_return(fb); // Liberar memoria de la cámara
// Guardar el nuevo número de foto en la EEPROM
EEPROM.write(0, pictureNumber & 0xFF);
EEPROM.write(1, (pictureNumber >> 8) & 0xFF);
EEPROM.commit();
// 5. Configurar temporizador e ir a Sueño Profundo
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * 1000000ULL);
Serial.println("Entrando en Deep Sleep...");
esp_deep_sleep_start();
}
void loop() {}
3. Despliegue en Campo y Procesado Final
- Inserta la MicroSD formateada en la ranura metálica trasera deslizando el anclaje hacia abajo para asegurar los pines.
- Carga el programa modificado en el dispositivo.
- Desconecta el cable del ordenador y alimenta el módulo fijándolo con cinta o un trípode apuntando directamente a una maceta o semillero. Puedes usar un cargador de pared común de 5V.
- El Montaje Audiovisual: Tras finalizar el ciclo de observación (ej. 5 días), extrae la tarjeta. En tu ordenador verás archivos correlativos desde
planta_1.jpghastaplanta_120.jpg. - Utiliza un software libre de edición (como VLC, FFmpeg o editores móviles como CapCut) para importar la secuencia completa de imágenes ordenadas por nombre, asignando una velocidad de exposición de 10 imágenes por segundo (0.1s por frame). El resultado revelará el movimiento natural imperceptible del crecimiento vegetal del cultivo.
🎥 Apoyo Audiovisual Recomendado:
Ver Tutorial de Captura en SDQué debes extraer de aquí: Examina la sección intermedia de este contenido especializado para copiar los bloques completos de definición de pines del objeto camera_config_t específicos para el hardware de tipo AI-Thinker. Evitará que la pantalla se muestre en negro por cruce de buses.
El Botánico IA: Inferencia de Machine Learning Local
Nivel AvanzadoDescripción: Introducción experimental avanzada al concepto de Edge Computing y TinyML. Los alumnos entrenarán una red neuronal de aprendizaje profundo (Convolutional Neural Network) para clasificar enfermedades del cultivo (ej: Hoja Sana vs Hoja con Clorosis/Plaga). El ESP32-CAM procesará la clasificación de forma interna y matemática sin enviar datos a la red.
1. Construcción de la Base de Datos Visual (Dataset)
- La Inteligencia Artificial requiere datos de ejemplo rigurosos. El grupo de alumnos debe recopilar un banco de imágenes de control.
- Utilizando el proyecto del Nivel 1 o cámaras móviles convencionales, captura al menos 40 fotografías de primer plano de hojas perfectamente sanas, bien iluminadas y enfocadas, y otras 40 fotografías de hojas enfermas de la misma especie (con manchas, hongos o roturas).
- Clasifica las imágenes en el ordenador en dos carpetas locales llamadas respectivamente:
sanasyenfermas.
2. Entrenamiento de la Red Neuronal con Edge Impulse
- Crea un perfil de desarrollo gratuito en la plataforma especializada Edge Impulse Studio (edgeimpulse.com).
- Crea un proyecto nuevo y ve a la sección
Data Acquisition>Upload existing data. Sube los archivos de la carpeta localsanasasignándoles la etiqueta de entrenamientosana. Repite la acción para la carpeta de patologías bajo la etiquetaenferma. - Navega hasta
Impulse Design:- Añade un bloque de procesamiento de tipo: Image Processing Block. Configura las dimensiones de análisis a 96 x 96 píxeles. (Esta reducción drástica es obligatoria para que la matriz matemática quepa dentro de la memoria RAM estática del ESP32).
- Añade un bloque de aprendizaje automático de tipo: Classification (Keras).
- Ve a la pestaña secundaria
Imagedentro del menú izquierdo y pulsa el botón Save parameters. Luego haz clic en la pestaña superior Generate features para transformar los píxeles de color RGB en vectores matemáticos normalizados de contraste y espectro cromático. - Accede a
Classifier. Configura el entrenamiento a 50 épocas con una tasa de aprendizaje de 0.005. Selecciona una arquitectura de red optimizada para microcontroladores como MobileNetV2 96x96 (0.1). Haz clic en Start Training. - Espera a que finalice la computación en la nube. Observa la matriz de confusión. Si el parámetro de precisión (Accuracy) es inferior al 75%, el modelo fallará en campo; revisa que las fotos no tengan fondos caóticos o sombras difusas y vuelve a entrenar.
Nota Científica para Alumnos
Al exportar el modelo usaremos optimización por cuantización (Int8). Este proceso convierte los pesos algebraicos de la red neuronal de números decimales complejos (Float32) a números enteros simples (Int8). Esto reduce el tamaño del modelo un 75% perdiendo apenas un 1% de precisión, haciendo viable la IA en un microchip de 5 euros.
3. Exportación y Programación de la IA en C++
- En el panel lateral de Edge Impulse, dirígete a la sección Deployment.
- En el listado de tecnologías de despliegue, selecciona el botón flotante Arduino Library. En las opciones inferiores, verifica que esté marcada la casilla Quantized (Int8) y haz clic en Build. La web compilará y descargará un archivo empaquetado comprimido en formato
.zip. - Abre tu Arduino IDE, dirígete a la pestaña superior
Programa>Incluir Librería>Añadir librería .ZIP...y selecciona el archivo recién descargado. - Ahora ve a
Archivo>Ejemplos> Busca el nombre exacto de tu librería exportada >esp32> esp32_cam. Este ejemplo autogenerado ya contiene la lógica estructural para encender la cámara y meter los píxeles del sensor directo a la red neuronal. - Asegúrate de comprobar la sección de mapeo de pines al inicio del código cargado y descomenta los pines asignados a la placa modelo
AI_THINKER. Sube el programa a tu placa a través del programador USB.
4. Validación en Tiempo Real
- Inicia el Monitor Serie configurando la salida fija a 115200 baudios.
- Sujeta una hoja real del cultivo frente al objetivo de la cámara a una distancia aproximada de 5 a 10 cm.
- El terminal del ordenador imprimirá de manera continua el retardo de inferencia seguido de las probabilidades estadísticas de la Red:
Esto significa que el procesador local deduce de manera autónoma con un 89.2% de certeza que la muestra inspeccionada presenta anomalías morfológicas, permitiendo un diagnóstico automatizado en campo sin necesidad de conectarse a servidores remotos externos.Predictions (DSP: 12 ms, Infe: 142 ms): enferma: 0.8923 sana: 0.1077
🎥 Apoyo Audiovisual Recomendado:
Ver Videotutorial de Edge ImpulseQué debes extraer de aquí: Aunque este vídeo se centra en la identificación de objetos móviles genéricos, debes usarlo paso a paso para guiarte de forma visual a través del flujo de la interfaz web de Edge Impulse: la creación del bloque de impulso de procesado, la revisión gráfica tridimensional de los clústeres de características cromáticas y la generación correcta de la librería comprimida para Arduino.