Si tiene un montón de películas, programas u otros archivos de video locales y no puede decidir cuál mirar, puede hacer que Raspberry Pi elija por usted, con solo tocar un botón. Para ser justos, hay formas más fáciles de reproducir un video aleatorio, ya sea desde archivos locales o en la web, pero no son tan divertidas como este proyecto. ¡Así que tome las palomitas de maíz y comencemos a construir y codificar nuestro propio reproductor de video aleatorio Raspberry Pi!
Hardware
Construir el circuito para este proyecto es simple. Solo necesitamos tres botones, conectados al GPIO en los pines 2,3,4 y cada uno de estos botones también debe estar conectado a GND, para esto podemos usar un solo pin GND en el Pi y un cable de puente hembra a macho . Conectado al riel – de una placa de prueba significa que tenemos múltiples conexiones GND que se pueden conectar a través de los dos cables de puente macho a macho. Consulte el diagrama en la descarga de este proyecto para obtener más información. Cuando el hardware esté construido, conecte todos los accesorios necesarios para su Pi e inicie el escritorio de Raspbian.
Software
Al igual que con la mayoría de los proyectos Pi, antes de hacer cualquier otra cosa, deberá configurar su Raspberry Pi con una copia actual del sistema operativo Raspbian. Si no quiere usar un teclado y un mouse dedicados, puede crear una Raspberry Pi sin cabeza a la que acceda desde otra computadora a través de VNC.
Antes de que podamos escribir cualquier código de Python, necesitamos instalar dos bibliotecas que nos ayudarán a crear el proyecto. Abra una Terminal y escriba lo siguiente, recuerde presionar Enter al final de cada línea.
$ sudo pip3 instalar glob$ sudo pip3 instalar teclado
Hablaremos más sobre ellos más adelante. Por ahora abra el editor de Python 3, que se encuentra en el menú Programación y haga clic en Archivo >> Nuevo para crear un nuevo archivo en blanco. Inmediatamente haga clic en Archivo >> Guardar en la nueva ventana. ¡Guarde el código como VideoPlayer.py y recuerde guardarlo con frecuencia!
Así que ahora comenzamos a escribir el código y nuestro primer acto es importar las bibliotecas que necesitamos. Las primeras tres bibliotecas se utilizan para detectar las pulsaciones de botones (GPIO Zero), evitar que el código se ejecute una vez y salga (pausa) y para elegir un video aleatorio (opción).
del botón de importación gpiozero de la pausa de importación de la señal de la elección de importación aleatoria
Las últimas tres importaciones son una biblioteca que usaremos para enumerar el contenido de un directorio (glob), ejecutar comandos de terminal (subproceso) y la última es una biblioteca para emular un teclado (keyboard).
importar globiimportar subprocesoimportar teclado
Continuando, creamos tres funciones, bloques de código que luego podemos reutilizar llamando a su nombre. La primera función se llama «reproducir_video» y primero crea una lista (un objeto de almacenamiento de datos) llamada «videos».
def reproducir_video():videos = []
Para llenar la lista con información, específicamente una lista de todos los videos que podemos reproducir, usamos un bucle for, que iterará sobre cada archivo en un directorio, siempre que sea un archivo de video mp4. Para esto usamos “glob” para acceder al directorio “/media/pi/Videos” que en realidad es una memoria USB llamada “Videos” llena de archivos mp4. Cambie esto para que coincida con el nombre de su directorio elegido lleno de videos. Cada vez que se encuentra un mp4, se agrega a la lista de «videos» que acabamos de crear.
para archivo en glob.glob(«/media/pi/Videos/*.mp4»): videos.append(archivo)
Entonces, ahora verifiquemos que la lista se haya llenado con nombres de archivo imprimiendo el contenido de la lista en el shell de Python.
imprimir (vídeos)
Luego, elegiremos un video aleatorio de la lista y lo almacenaremos en una variable llamada «elegido», nuevamente imprimimos esto en el shell de Python.
Luego, elegiremos un video aleatorio de la lista y lo almacenaremos en una variable llamada «elegido», nuevamente imprimimos esto en el shell de Python elegido = elección (videos) imprimir (elegido) imprimir (elegido)
La última línea de esta función usa la clase Popen de la biblioteca de subprocesos para ejecutar un comando como si estuviéramos sentados en la terminal, y este comando es para abrir el reproductor multimedia omxplayer y luego reproducir el video elegido.
subproceso.Popen([‘omxplayer’,(elegido)])
La siguiente función se llama «stop_video» y, como puede adivinar, detendrá el video que se está reproduciendo actualmente. Para ello utilizamos la biblioteca del teclado, en concreto la función “presionar_y_liberar” para simular presionar la tecla “q”.
def stop_video(): teclado.pulsar_y_liberar(‘q’)
La última función se llama “pause_video” y emula presionar la barra espaciadora en el teclado, que es como omxplayer pausa el video.
def pause_video(): teclado.presionar_y_liberar(‘espacio’)
Con las funciones creadas, lo siguiente que necesitamos es decirle a nuestro código dónde están conectados nuestros botones. Tenemos tres botones conectados, randomiser (play), stop y pause_button. Estos botones están conectados al GPIO en los pines 2, 3 y 4 respectivamente.
aleatorizador = Botón (2) detener = Botón (3) pausa_botón = Botón (4)
Bien, vamos a la última parte, y esta es la parte que busca cuando se presiona un botón y reacciona en consecuencia. Pero primero envolvemos esta sección en un controlador de excepciones. Intentará ejecutar el código, pero si el usuario presiona CTRL + C, el código saldrá. Entonces, para la sección de prueba, nuestro código primero imprimirá tres líneas en el shell, estas son las instrucciones para el usuario. Notarás “n” entre cada color. Esta es la abreviatura de Python para insertar una nueva línea entre cada una de las instrucciones.
intente: imprimir («Presione el botón VERDE para comenzar, AMARILLO para pausar, ROJO para detener»)
Nuestros tres botones están esperando ser presionados, y usando la biblioteca GPIO Zero llamamos a la clase «when_pressed» para detectar cuándo se presiona cada uno de los botones. Cuando esto sucede, se ejecuta la función correspondiente. Entonces, cuando presionamos el botón verde aleatorio (reproducir), elegirá aleatoriamente un video de la memoria USB y lo reproducirá. Notará que las funciones no tienen un () al final del nombre de la función. Esto se debe a que si lo hicieran, el código se ejecutaría automáticamente. En este momento están listos para funcionar bajo demanda.
randomiser.when_pressed = play_video stop.when_pressed = stop_video pause_button.when_pressed = pause_video
La última línea de esta sección es una simple pausa (), y se usa para mantener el código en ejecución, y no solo para salir después de ejecutarlo una vez.
pausa()
Pero, ¿qué sucede si el usuario presiona CTRL + C? Bueno, esto es una «Interrupción del teclado» y, si eso ocurre, simplemente imprimiremos una línea vacía y luego «Salir» en la pantalla.
excepto KeyboardInterrupt: print(«nEXIT»)
Así que ahora guarde su código y abra una Terminal en el directorio donde guardó el código. Para usar el código, necesitamos ejecutarlo con sudo (poderes de root) ya que la biblioteca de teclado utilizada en el proyecto solo se puede usar como root / sudo.
Para ejecutar el tipo de código:
$ sudo python3 VideoPlayer.py
Cuando esté listo, presione el botón verde para reproducir el video elegido al azar, para pausar presione amarillo y para detener presione rojo. ¡Disfruta de tu velada y no derrames las palomitas de maíz!
Puede incrustar el proyecto en una caja resistente, para que las manos pequeñas no rompan la electrónica. También puede usar botones de estilo arcade que son mucho más robustos y es menos probable que se rompan.
El código completo
Si solo desea copiar y pegar el contenido en el archivo VideoPlayer.py, aquí está:
from gpiozero botón de importación de señal importación pausa de elección de importación aleatoria importación globimport subproceso importación tecladodef play_video(): videos = [] for file in glob.glob(«/media/pi/Videos/*.mp4»): videos.append(file)print( videos)elegido = elección(videos) print(elegido) print(elegido)subproceso.Popen([‘omxplayer’,(elegido)]) def stop_video()keyboard.press_and_release(‘q’)def pause_video()keyboard.press_and_release( ‘espacio’)aleatorizador – Botón(2)detener = Botón(3)botón_pausa = Botón(4)intentar:imprimir(«Presione el botón VERDE para comenzarnAMARILLO para pausarROJO para detener»)aleatorizador.cuando_presiona = reproducir_videoparar.cuando_presiona = detener_videobotón_pausa.cuando_presiona = pause_video pause() excepto KeyboardInterrupt: print(«nEXIT»)Biblioteca de teclado y privacidad
En este proyecto, usamos la biblioteca Keyboard Python para emular un teclado usando solo los botones que controlaban la reproducción, la pausa y la detención de la reproducción de video. La biblioteca del teclado es bastante poderosa y se puede usar para presionar cualquier tecla, por lo que podemos automatizar múltiples pulsaciones de teclas desde un solo botón (útil para salir de vim). La biblioteca también se puede usar para escribir texto en la pantalla, en un de manera similar a la escena de Neo «sigue al conejo blanco» de The Matrix. Pero la función más peligrosa de esta biblioteca es que se puede usar para registrar cada pulsación de tecla en la máquina de destino.
Estas pulsaciones de teclas pueden grabarse en una lista, luego guardarse en un archivo y luego usarse para fines nefastos. Así que seamos claros niños, adultos. Grabar las pulsaciones de teclas de un usuario sin su consentimiento es ilegal y puede causarte muchos problemas con la escuela, el trabajo o las autoridades. ¡Así que no lo hagas! Dicho esto, se puede usar como una herramienta poderosa al depurar la forma en que un usuario interactúa con su código, por lo que para las pruebas de software (con el consentimiento del público en general y los evaluadores internos) puede ver qué teclas estaban presionando justo antes del código. encerrado / se volvió termonuclear!
La biblioteca Keyboard funciona con Linux y Windows y es muy divertido jugar con ella. Para leer un poco más sobre esta biblioteca, diríjase a esta publicación de blog https://bigl.es/tuesday-tooling-record-replay-keystrokes-with-python/ y vea algunos ejemplos de cómo se puede usar.
Este artículo apareció originalmente en Linux Format Magazine.