Tríptico con tartas de frambuesa y pantallas de ordenador portátil sincronizado video (9 / 10 paso)

Paso 9: código

Aquí está el código. Usted necesitará instalar pyomxplayer, pexpect y pyOSC. También, dependiendo de la versión de omxplayer, puede que necesite modificar pyomxplayer por la forma en que intenta analizar la salida de omxplayer. Este script trabaja para el amo y el esclavo basado en el nombre de host. Aquí es el proceso básico:

  • Cuando arrancar todas las máquinas, copiar el contenido en la unidad de ram y lanzarlo en omxplayer en pausa
  • Los esclavos entonces entran en un bucle de arranque enviando una dirección de "lista" al maestro hasta que escuchan nuevamente.
  • El maestro entra en un bucle para comprobar si ambos esclavos están listos, escuchar para una dirección de "lista" de cada uno.
  • Cuando el maestro determina tanto esclavos están listos, envía una dirección de "escuchar" a los esclavos y los esclavos salen de su bucle de arranque.
  • De aquí encendido hacia fuera, el maestro controla a los esclavos a través de OSC para reanudar/pausa/rebobinar las peliculas indefinidamente.
  • Las máquinas de reinician o apagar cuando el pin GPIO específico se establece en el maestro.
< p > #! / usr/bin/python < br > Importar OSC import threading, zócalo, shutil de importación pyomxplayer OMXPlayer de importación sueño ''' Thomas Hollier, 2015. ''' hosts = {'master': '192.168.11.45', 'slave1': '192.168.11.46', 'slave2': '192.168.11.47'} películas = {'master':'/home/pi/media/movie_lf.mov', 'slave1':'/home/pi/media/movie_cn.mov', 'slave2':'/home/pi/media/movie_rt.mov'} movieLength = 60 * 5 hostname = socket.gethostname() print "copia de %s a/var/ramdisk" % películas [hostname] shutil.copy (películas [hostname], "/ var/ramdisk /") películas [hostname] = películas [hostname] .replace ('/ home/pi/medios de comunicación', '/ var/ramdisk') impresión "reproducir película de %s" % películas [hostname] omx = OMXPlayer(movies[hostname]) sleep(5) omx.toggle_pause() sleep(1) omx.rewind() sleep(1) def reboot() : comando = "/ usr/bin/sudo/sbin/shutdown - r ahora" importar proceso subproceso = subproceso. Popen(Command.Split(), stdout = subproceso. Salida de la tubería) = process.communicate() [0] impresión def poweroff(): comando = "/ usr/bin/sudo/sbin/shutdown -h ahora" importar proceso subproceso = subproceso. Popen(Command.Split(), stdout = subproceso. Salida de la tubería) = process.communicate() [0] impresión si nombre == 'master': def gpio_check(): importar RPi.GPIO como GPIO.setmode(GPIO. GPIO BCM) GPIO.setup (23, GPIO. IN, pull_up_down = GPIO. PUD_UP) GPIO.setup (24, GPIO. IN, pull_up_down = GPIO. PUD_UP) mientras que True: input_state = GPIO.input(23) si input_state == False: imprimir (' detecta una solicitud de reinicio: presiona el botón 23') send_reboot(slaves['slave1'][2]) send_reboot(slaves['slave2'][2]) sleep(.3) reboot() input_state = GPIO.input(24) si input_state == False: imprimir (' detecta una solicitud poweroff: presiona el botón 24') send_poweroff(slaves['slave1'][2]) send_poweroff(slaves['slave2'][2]) imprimir ('24 el pulsador') sleep(.3) poweroff() sleep(.1) gpio_thread = threading. Thread(Target=gpio_check) gpio_thread.start() # enviar escuchar def send_listen(slaveServer): impresión "auxiliar de consulta", slaveServer msg = OSC. OSCMessage() msg.setAddress("/listen") # set OSC dirección msg.append ("el maestro de maestro. \nThe es una pausa durante 20 segundos.") # int slaveServer.send(msg) # enviarlo! # enviar juego comando def send_play(slaveServer): print "enviando el juego a", slaveServer msg = OSC. OSCMessage() msg.setAddress("/play") # set OSC dirección msg.append ("el maestro") # int slaveServer.send(msg) # enviarlo! # enviar toggle_pause comando def send_toggle_pause(slaveServer): print "enviando toggle_pause a", slaveServer msg = OSC. OSCMessage() msg.setAddress("/toggle_pause") # set OSC dirección msg.append ("el maestro") # int slaveServer.send(msg) # enviarlo! # enviar rebobinado comando def send_rewind(slaveServer): print "rebobinado a enviar", slaveServer msg = OSC. OSCMessage() msg.setAddress("/rewind") # set OSC dirección msg.append ("el maestro") # int slaveServer.send(msg) # enviarlo! # enviar reboot comando def send_reboot(slaveServer): print "reboot a enviar", slaveServer msg = OSC. OSCMessage() msg.setAddress("/reboot") # set OSC dirección msg.append ("el maestro") # int slaveServer.send(msg) # enviarlo! # Envíe poweroff comando def send_poweroff(slaveServer): print "enviar apagado a", slaveServer msg = OSC. OSCMessage() msg.setAddress("/poweroff") # set OSC dirección msg.append ("el maestro") # int slaveServer.send(msg) # enviar
! controlador de # dirección lista def ready_handler (addr, etiquetas, material, origen): Si no esclavos [cosas [0]] [0]: esclavos [cosas [0]] [0] = True impresión "ajuste de %s para listos" % cosas [0] # configuración clientes para enviar mensajes a slavesReady = False c1 = OSC. OSCClient() c2 = OSC. OSCClient() esclavos = {'slave1': [False, (alberga ['slave1'], 9000), c1], 'slave2': [False, (alberga ['slave2'], 9000), c2]} # auto configurado para recibir mensajes receive_address = hosts ['maestra'], 9000 s = OSC. OSCServer(receive_address) # s.addDefaultHandlers() básica s.addMsgHandler ("por listo" ready_handler) # añadir la función # OSCServer iniciar impresión "\nStarting OSCServer. Use ctrl-C para dejar de fumar."st = threading. Del hilo de rosca (objetivo = s.serve_forever) st.start() # configurar clientes para enviar mensajes a esclavos ['slave1'] [2] .connect (esclavos ['slave1'] [1]) # set la dirección de todos los esclavos mensajes siguientes ['slave2'] [2] .connect (esclavos ['slave2'] [1]) # establece la dirección de todos los mensajes de siguientes ### # establecer comunicación Imprimir "Maestro está esperando para oír de los esclavos." # el maestro espera hasta que ambos esclavos están listos mientras no slavesReady : sleep(.01) si esclavos ['slave1'] [0] y esclavos ['slave2'] [0]: slavesReady = True Imprimir "el maestro ha oído de ambos esclavos" # el maestro le dice a los esclavos para escuchar send_listen(slaves['slave1'][2]) send_listen(slaves['slave2'][2]) impresión "el maestro ha dicho a los esclavos a escuchar" Imprimir "Pausa de 20 segundos" captura de # nuestra respiración sleep(20) ### medios # controlan # entramos en un bucle infinito donde nos # activar , espere a que la pausa de # de longitud de película, esperar, retroceder, esperar, reanudar impresión "entrando en bucle principal" aunque la verdad: send_toggle_pause(slaves['slave1'][2]) send_toggle_pause(slaves['slave2'][2]) omx.toggle_pause() sleep(movieLength) send_toggle_pause(slaves['slave1'][2]) send_toggle_pause(slaves['slave2'][2]) omx.toggle_pause() sleep(2) send_rewind(slaves['slave1'][2]) send_rewind(slaves['slave2'][2]) omx.rewind() sleep(2) más : thisName = thisIP nombre de host = host [host], 9000 masterStatus = {'despierta': [falso], 'play': [falso]} masterAddress = hosts ['maestra'], 9000 def send_ready(c): msg = OSC. Trate de OSCMessage() msg.setAddress("/ready") # set OSC dirección msg.append(thisName) # int: c.send(msg) excepto: pase def listen_handler (añadir, etiquetas, material, origen): print "Me dijeron que escuche por %s" % cosas masterStatus [0] ['despiertos'] [0] = True def play_handler (añadir, etiquetas, material, origen): print "Me dijo para jugar por %s" % cosas masterStatus [0] [juego] [0] = True def toggle_pause_handler (añadir etiquetas, materia, origen): impresión "Me dijeron que toggle_pause por %s" % de la materia [0] omx.toggle_pause() def rewind_handler (añadir, etiquetas, material, origen): print "Me dijeron que rebobinar por %s" % de la materia masterStatus de omx.rewind() [0] ['despiertos'] = False def reboot_handler (añadir, etiquetas, material, origen): print "Me dijeron que reiniciar por %s" % de la materia [0] reboot() def poweroff_handler (añadir, etiquetas, material origen): impresión "Me dijo a poweroff %s" % de la materia [0] poweroff() ### # crear un cliente para enviar mensajes al maestro c = OSC. OSCClient() c.connect (masterAddress) ### # escuchar mensajes del maestro receive_address = thisIP s = OSC. OSCServer(receive_address) # basic # definir controladores s.addDefaultHandlers() s.addMsgHandler ("/ escuchar", listen_handler) s.addMsgHandler ("por jugar" play_handler) s.addMsgHandler ("/ toggle_pause", toggle_pause_handler) s.addMsgHandler ("/ rewind", rewind_handler) s.addMsgHandler ("/ reiniciar", reboot_handler) s.addMsgHandler ("/ poweroff", poweroff_handler) # OSCServer empezar a imprimir "\nStarting OSCServer. Use ctrl-C para dejar de fumar."st = threading. Del hilo de rosca (objetivo = s.serve_forever) st.start() de impresión "%s conexión al maestro." % nombre de equipo aunque la verdad: #i ## ## # seguir enviándonos listo señales hasta que el maestro envía un mensaje # en la dirección /listen que nos lleva fuera de este bucle mientras no masterStatus ['despierto'] [0]: sleep(.01) send_ready(c) ### # una vez que el maestro ha tomado el control, no hacemos nada y permiten la reproducción de la unidad principal a través de controladores < /p >

Artículos Relacionados

Convertir una pantalla de ordenador portátil en un espejo

Convertir una pantalla de ordenador portátil en un espejo

Hola, este es mi primer instructivo, así que cualquier crítica y comentarios son bienvenidos! Y lo siento por mi inglés, soy un chico poco frenchy =) algunas fotos no son de muy buena calidad, pido disculpas por eso., pero parece bastante claros para
Soporte notebook casera con cajón y un enfriamiento del ordenador portátil

Soporte notebook casera con cajón y un enfriamiento del ordenador portátil

soporte para portátil con cajón y un enfriamiento del ordenador portátil
Convertir una pantalla de ordenador portátil roto en una mesa de luz portátil para dibujo

Convertir una pantalla de ordenador portátil roto en una mesa de luz portátil para dibujo

Un amigo me donó este viejo ordenador portátil, que tenía una pantalla LCD rota. El portátil era viejo pero funcionaba bien. No tenía ninguna intención de gastar dinero para que lo reparen, que simplemente no vale la pena el dinero. En su lugar sólo
Reparación de bisagras rotas de una pantalla de ordenador portátil.

Reparación de bisagras rotas de una pantalla de ordenador portátil.

Imaginar que, un día precioso, eres comfortaby sentada en el sofá, están abriendo el laptop tapa yyyyyy grietas de una de las bisagras... Un desastre lo que usted piensa, usted tiene que pagar costo indignante para la reparación en el taller de servi
Cómo limpiar la pantalla del ordenador portátil

Cómo limpiar la pantalla del ordenador portátil

Está a 5 minutos y usted puede conseguir una pantalla limpia ;)Paso 1: Ver el videoEsto también ayuda a mantener el polvo lejos!Paso 2: #1Saque el cable del cargador y apaga su ordenador portátilPaso 3: #2Mezclar vinagre normal y agua (50% - 50%)Toma
Organizar dispositivos USB con la piel de la utilidad del ordenador portátil

Organizar dispositivos USB con la piel de la utilidad del ordenador portátil

piel de la utilidad del ordenador portátil organiza dispositivos USB ligeros convenientemente usando el velcro.Como parte de la generación móvil, quería resolver los problemas con la ubicación y el espacio para dispositivos USB.Profesional y estudian
Laser-corte Protector de la pantalla del ordenador portátil

Laser-corte Protector de la pantalla del ordenador portátil

lotes de laptops tienen este molesto problema donde sus pantallas va a tocar el teclado, cuando el portátil cerrado. Con el tiempo, las teclas se poner aceites de dedo sobre la pantalla y desgastar poco a poco las marcas en su superficie. Ocurre más
Cómo limpiar un televisor de pantalla plana, Monitor de la computadora o pantalla del ordenador portátil

Cómo limpiar un televisor de pantalla plana, Monitor de la computadora o pantalla del ordenador portátil

Este video te muestra la forma correcta de limpiar su TV de pantalla plana,monitor o laptop pantalla de ordenador, mientras no dañarla con productos químicos ásperos o toallas de papel.
Ilusión de la pantalla del ordenador portátil!!!!

Ilusión de la pantalla del ordenador portátil!!!!

Haga clic aquí para el vídeo...También Compruebe mi instructables otros
Cómo utilizar Pi2 frambuesa con una pantalla de computadora portátil usando VNC Server

Cómo utilizar Pi2 frambuesa con una pantalla de computadora portátil usando VNC Server

¡ Ah! Su tiempo de Navidad y usted encontrara una Frambuesa Pi2, experimentar con, bien Felicidades por eso!!.Pero para realmente utilizar la frambuesa, necesitas una pantalla para ver la salida. Esta máquina maravillosa tiene una salida HDMI pero al
Reemplazar la pantalla de un portátil de Samsung NP300E5A-A01UB

Reemplazar la pantalla de un portátil de Samsung NP300E5A-A01UB

[pantalla Laptop usada en este Instructable obtenida de http://www.LaptopScreen.com]Si accidentalmente han dañado la pantalla actual o sólo quiere pasar de una pantalla mate a otra brillante, este Instructable le guiará por los pasos de sustituir la
Cómo reemplazar la pantalla en un portátil de Hp Pavilion dv7

Cómo reemplazar la pantalla en un portátil de Hp Pavilion dv7

este instructable le mostrará cómo cambiar la pantalla de un portátil de Hp Pavilion DV7 serie.Antes de continuar: hay varios modelos diferentes de esta laptop, algunos de los modelos requieren que desarma el portátil entero para sustituir la pantall
Ordenador portátil DIY frambuesa Pi 2

Ordenador portátil DIY frambuesa Pi 2

En este artículo, se le proyecto DIY frambuesa Pi portátil. Necesitaba un ordenador mini bajo costo con alta movilidad pero entonces decidí hacer mi propio y comienzo a este proyecto. La mayoría de las piezas (cuente con frambuesa pi 2 y su algunos d
Conectar su frambuesa Pi a una computadora portátil de Linux

Conectar su frambuesa Pi a una computadora portátil de Linux

He estado involucrado con el frambuesa Pi (RasPi) ahora para más de cuatro meses y encontré con cinco ordenadores en mi área de trabajo y necesarios para reducir su huella y monitores en mi banco de trabajo/escritorio. Al leer un artículo acerca de c