Este proyecto mostrará cómo podemos utilizar IoT para crear aulas remotas inteligentes y económicas para zonas rurales utilizando Raspberry Pi y su módulo de cámara. Si un profesor enseña en una ciudad lejana, esta sesión se puede transmitir en vivo a zonas rurales. A través de estas aplicaciones, los niños de las zonas rurales pueden obtener educación de calidad en un lugar remoto por una pequeña tarifa.
Este tipo de aplicaciones ya están disponibles en el mercado, pero son caras, por lo que necesitamos una solución barata que las familias de estos niños puedan permitirse.
Componentes necesarios
Herramientas y bibliotecas necesarias
Herramientas
- PythonIDE 3.0
- Visor VNC
- Cualquier navegador web del cliente
Bibliotecas de Python
- Servidor de socket – enlace
- Picamera: se puede instalar siguiendo los comandos en la terminal
$ sudo apt-get install python-picamera python3-picamera
Informaciones técnicas
Nuestro dispositivo se puede implementar en cualquier lugar y grabará y transmitirá en vivo en su dirección. Esta aplicación funciona en el modelo cliente-servidor utilizando TCP/HTTP como protocolo de comunicación. Por lo tanto, se puede acceder a la transmisión desde cualquier lugar (si el firewall lo permite) en un navegador web.
Usaremos la Raspberry Pi para procesar y como servidor que transmitirá los datos multimedia recibidos de la cámara a una dirección IP específica de la Raspberry Pi. Para la conectividad a Internet podemos utilizar Wi-Fi o cualquier módem de Internet.
Escribiremos un script de Python que se encargará de todos los procesos técnicos, como habilitar la red y configurar Raspberry Pi como servidor de transmisión de medios.
Diagrama de bloques/algoritmo

Figura 1 Comunicación cliente-servidor
La Raspberry Pi se conecta directamente al modelo de cámara mediante su conector de cable y el módem proporciona a la Raspberry Pi una dirección IP válida con conectividad a Internet. Una conexión TCP/HTTP comparte todos los datos multimedia entre la Raspberry Pi y el módem.
Los clientes acceden a Raspberry Pi (servidor de transmisión) utilizando dispositivos con acceso a Internet, como teléfonos celulares y computadoras portátiles. Raspberry Pi tiene un buen navegador porque la transmisión es HTTP.
Como funciona
Una vez que todas las conexiones estén activas y en funcionamiento, iniciamos nuestro script que se transmitirá en la dirección IP de Raspberry Pi. Para entender esto, siga los puntos a continuación.
- La cámara comienza a grabar y guardar fotos en un archivo “mjpg” cuando se activa el script.
- La cámara reemplaza continuamente la transmisión dentro de un solo archivo.
- Se crea un servidor dentro del sistema usando una función y este archivo de imagen se pasa dentro de esa función. El servidor también abre un puerto en el sistema para que los clientes puedan acceder al servidor a través de la red.
- Se escribe un código/página HTML para manejar el archivo de imagen en las páginas web. Esta página HTML muestra esta imagen y continúa actualizándose para mostrar que los cambios en las imágenes se pueden ver como videos.
- Ahora, si un cliente logra conectarse al servidor, será recibido con esa página HTML y, por lo tanto, el cliente podrá ver la imagen en formato de video.
- Si hay varios clientes conectados, se utiliza subprocesos múltiples y se abre una nueva página para cada cliente.
- Cuando un cliente se desconecta, el flujo para ese cliente específico se interrumpe.
- El servidor siempre escucha al cliente en el puerto que abrió.
Entendiendo el código fuente
Entendamos el código fuente y sus funciones esenciales.
Hay tres funciones de controlador, una función principal y una plantilla de página HTML en nuestro código.
plantilla de página HTML
La etiqueta de título muestra el título principal de la página cuando un cliente inicia sesión.
La etiqueta
es un encabezado en nuestra página principal.
Demostración de transmisión de PiCamera MJPEG
La línea "
Salida de transmisión (objeto)
Esta función crea suficiente búfer de datos para guardar el archivo continuo. También proporciona un nuevo marco para la conexión del cliente.
devolver self.buffer.write(buf)
StreamingHandler(servidor.BaseHTTPRequestHandler)
Esta función maneja clientes en solicitudes HTTP. Escribe el encabezado principal con la siguiente información.
Si un cliente intenta acceder al servidor solo por su dirección, le muestra la página completa.
self.send_header('Local', '/index.html')
Si se accede a la página index.html, escribe la página con el contenido y muestra lo que se escribió en la parte de la página.
También especifica el tipo de contenido en la página principal para que los clientes (navegadores) puedan comprender el tipo de contenido y actuar en consecuencia.
self.send_header('Tipo de contenido', 'multipart/x-mixed-replace; límite=FRAME')
Esta transmisión es una transmisión de tipo marco con contenido de varias partes (multimedia).
StreamingServer(socketserver.ThreadingMixIn, servidor.HTTPServer)
Esta función de servidor maneja la parte de red y crea un nuevo socket para cada cliente. También permite múltiples conexiones de clientes mediante subprocesos múltiples.
Función principal
El script de la función principal es el código para registrar la transmisión y pasarla a las funciones anteriores.
cámara.start_recording(salida,formato='mjpeg')
La cámara comienza a grabar y escribe en el archivo en formato mjpeg.
La dirección es el objeto que pasa el puerto del servidor y la dirección IP, lo que significa que admitirá la disponibilidad del servidor en cada dirección IP a la que esté asignado el sistema.
dirección = (”, 8000)
El servidor vincula la dirección y el contenido del objeto, que es la función "StreamingHandler"
servidor = StreamingServer(dirección, StreamingHandler)
Esta línea le dice al servidor que continúe brindando el servicio hasta que finalice el script.
servidor.serve_forever
Así es como podemos encontrar una solución sencilla y económica para aulas remotas inteligentes en zonas rurales.