La siguiente situación es conocida por muchos: vamos a hacer un viaje largo en coche que dura horas, pero los niños no aguantan y al poco rato de haber comenzado ya empiezan a preguntar cuanto queda o si hemos llegado ya. Para hacerles más ameno el viaje se les ponen películas para que vayan entretenidos una buena parte del viaje.
El objetivo de este artículo es reutilizar las tablets android e ipad (también funciona con los móviles) que tenemos por casa para que reproduzcan los vídeos que hay almacenados en una raspberry pi zero mediante wifi. Así los niños estarán entretenidos en el coche, en un restaurante, en la sala de espera espera del médico, etc., además cada uno podrá ver una película distinta y no tendremos que realizar ninguna inversión grande para lograrlo más allá de una tarjeta SD y una raspberry pi zero w.
Lo primero es descargarse la última versión del sistema operativo Raspbian Lite desde la web oficial.
Después hay que grabarla en una tarjeta SD (recomiendo una con class 10). Aquí se explica cómo hacerlo desde varios sistemas operativos.
Esta creará dos particiones. En la que es FAT32 y está etiquetada como boot hay que:
- Crear un fichero vacío llamado ssh o ssh.txt para habilitar la conexión ssh a la raspberry pi.
- Crear otro fichero llamado wpa_supplicant.conf e introducir en este lo siguiente (cambiando los valores ssid y psk por los de la red wifi correspondiente):
1 2 3 4 5 6 7 8 9 |
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=ES network={ ssid="CAMBIAR POR EL NOMBRE DE TU RED WIFI" psk="CAMBIAR POR LA CLAVE DE TU RED WIFI" key_mgmt=WPA-PSK } |
Ahora hay que introducir la tarjeta SD en la raspberry pi y alimentarla mediante un cargador usb de al menos 500mA.
Si todo va bien se podrá conectar a la raspberry mediante ssh a la IP que le ha dado el router.
Para asegurarse que instalaremos las últimas versiones del software hay que hacer una actualización de los repositorios:
1 |
sudo apt-get update |
Instalar hostapd (para que la raspberry haga de punto de acceso), dnsmasq (para que pueda dar direcciones IP), samba (para compartir ficheros) y lighttpd (para poder apagar la raspberry desde el navegador):
1 |
sudo apt-get install hostapd dnsmasq samba lighttpd |
Para que los dispositivos se conecten a una red wifi creada por las raspberry hay que configurar el hostpad, para ello crear con el usuario root el fichero /etc/hostapd/hostapd.conf con el siguiente contenido (cambiando los valores ssid y wpa_passphrase por los de la red wifi que vamos a crear y el valor channel por el *canal de la red wifi del router):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
interface=uap0 driver=nl80211 ssid=CAMBIAR POR EL NOMBRE DE LA NUEVA RED WIFI hw_mode=g channel=CAMBIAR POR EL CANAL DE LA RED WIFI DEL ROUTER wmm_enabled=0 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=CAMBIAR POR LA CLAVE DE LA NUEVA RED WIFI wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP |
*Cuando estamos en casa, para que funcionen correctamente en la raspberry tanto la red wifi creada como la red wifi que hemos configurado al principio para conectarse, hay que configurar el mismo canal wifi porque la raspberry no permite trabajar con varios canales a la vez.
Editar con el usuario root el fichero /etc/default/hostapd y añadir el siguiente contenido:
1 |
DAEMON_CONF="/etc/hostapd/hostapd.conf" |
Después, cada vez que arranque la raspberry hay que ejecutar un script para activar correctamente la red wifi creada, para ello crear con el usuario root el fichero /usr/local/bin/hostapdstart con el siguiente contenido:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin iw dev wlan0 interface add uap0 type __ap sysctl net.ipv4.ip_forward=1 iptables -t nat -A POSTROUTING -s 192.168.50.0/24 ! -d 192.168.50.0/24 -j MASQUERADE ifdown wlan0 ip link set dev uap0 up ip addr add 192.168.50.1/24 broadcast 192.168.50.255 dev uap0 sleep 1 hostapd -B -P /run/hostapd.pid /etc/hostapd/hostapd.conf & sleep 1 service hostapd restart ifup wlan0 service dnsmasq restart |
y editar con el usuario root el fichero /etc/rc.local y poner antes de la linea que tiene exit 0 el siguiente contenido:
1 |
/bin/bash /usr/local/bin/hostapdstart |
A continuación hay que configurar el dnsmasq para que de IPs a los dispositivos que se conecten a la raspberry en la subred 192.168.50.0/24, para ello editar con el usuario root el fichero /etc/dnsmasq.conf y añadir al final del fichero el siguiente contenido:
1 2 3 4 5 6 7 |
interface=lo,uap0 no-dhcp-interface=lo,wlan0 bind-interfaces server=8.8.8.8 domain-needed bogus-priv dhcp-range=192.168.50.50,192.168.50.150,12h |
Después hay que configurar la raspberry para que se conecte a nuestro router (otra vez como al principio), para ello editar con el usuario root el fichero /etc/network/interfaces y añadir al final el siguiente contenido:
1 2 3 4 |
auto wlan0 iface wlan0 inet dhcp wpa-ssid "CAMBIAR POR EL NOMBRE DE TU RED WIFI" wpa-psk "CAMBIAR POR LA CLAVE DE TU RED WIFI" |
Para compartir los ficheros se tiene que configurar samba. Primero ejecutar:
1 2 3 4 |
mkdir /home/pi/share chmod 755 /home/pi/share cd /home/pi/share umask 133 |
Después añadir con el usuario root al final del fichero /etc/samba/smb.conf el siguiente contenido:
1 2 3 4 5 6 7 8 9 10 11 12 |
[Peliculas] comment=Carpeta de peliculas path=/home/pi/share browseable=Yes writeable=No guest ok=yes create mask=0777 directory mask=0777 public=yes read only = yes force user = nobody force group = nogroup |
En la carpeta /home/pi/share es donde se deben almacenar los vídeos que luego se quieran reproducir. Puedes enchufar un disco usb a la rasberry para copiar los vídeos; descargarlos de una NAS, de una página web, etc.; instalar un cliente de torrent o lo que se te ocurra.
Para apagar la raspberry fácilmente desde el navegador, hay que dar permisos de sudo a lighttpd, por tanto ejecutar:
1 |
sudo visudo |
Y añadir al final el siguiente contenido:
1 |
www-data ALL = NOPASSWD: /sbin/shutdown |
Después activar el módulo cgi para lighttpd:
1 |
sudo lighty-enable-mod cgi |
Sustituir con el usuaro root el fichero /etc/lighttpd/conf-enabled/10-cgi.conf con el siguiente contenido:
1 2 3 4 5 |
server.modules += ( "mod_cgi" ) $HTTP["url"] =~ "^/apaga.sh" { cgi.assign = ( ".sh" => "/bin/sh" ) } |
Crear con el usuario root el fichero /var/www/html/index.html con el siguiente contenido:
1 2 3 4 5 6 |
<html> <body> <h1>Apagando raspberry</h1> <iframe src="apaga.sh" style="visibility:hidden"></iframe> </body> </html> |
Crear con el usuario root el fichero /var/www/html/apaga.sh con el siguiente contenido:
1 2 |
#!/bin/sh sudo shutdown -h now |
Como último paso en la raspberry, ejecutar:
1 |
sudo raspi-config |
Para que no haga falta esperar conexión a la red, seleccionar 3-Boot Options/B2 Wait for Network at Boot/NO y para tener la máxima memoria posible 7 Advanced Options/A3 Memory Split, poner 16 y pulsar OK. Seleccionar Finish y decir si a reiniciar la raspberry.
Finalmente instalar la aplicación VLC de videolan en los dispositivos, después configurarlos para que se conecten a la red wifi de la raspberry, arrancar el VLC, seleccionar la opción Red local, elegir RASPBERRYPI, escoger la carpeta Peliculas y pulsar sobre la película que se quiera reproducir.
En el coche, la rasberry se puede alimentar con un cargador de mechero a USB, en otro lugares se puede alimentar mediante una powerbank.
Para apagar la raspberry, sólo hay que abrir un navegador en uno de los dispositivos y acceder a la dirección http://192.168.50.1
Por último agradecer a este mensaje en los foros de la raspberry donde se explica cómo hacer funcionar como punto de acceso a la vez que cliente.
Espero que os sea tan útil como a mi para amenizar la espera a los niños o incluso utilizarlo tu sólo cuando vas en transporte público o estás en un hotel.
Buenos días,
Primero de todo, felicitarte por el tutorial. Tras mucho buscar, no he encontrado nada tan completo para configurar mi pi zero como servidor de streaming, y llevo más de 1 año buscando!
Quería comentarte: ¿sabes si con las últimas versiones de Raspberry pi OS funciona?
Gracias!
Hola. No he llegado a probarlo, pero entiendo que el software es muy estándar y debería funcionar en cualquier distribución Linux.
Hola!
Gracias por la respuesta. Otra pregunta tengo : ¿Sabes si sería posible configurarlo para que utilice directamente las películas almacendadas en la unidad usb (disco duro) en lugar de tener que copiarlas a la tarjeta SD?
Gracias!
Si, en el en el campo path del fichero /etc/samba/smb.conf puedes configurar la ruta del usb que monte el linux.