Synkroniserad video tryptic med hallon pajer och laptop skärmar (9 / 10 steg)

Steg 9: kod

Här är koden. Du kommer att behöva installera pyomxplayer, pexpect och pyOSC. Också, beroende på omxplayer version, kan du behöva ändra pyomxplayer på det sätt det försök att parsa omxplayer's utdata. Detta skript fungerar för både master och slav baserat på värdnamnet. Här är den grundläggande processen:

  • När alla maskiner startar upp, de kopiera den relevanta median till ram-enheten, och starta den i omxplayer i pausläge
  • Slavarna sedan gå in i en start loop skicka en "färdig" adress till master tills de höra tillbaka.
  • Master går in i en slinga för att kontrollera om båda slavar är redo, lyssnar efter en "färdig" adress från var och en.
  • När befälhavaren bestämmer som både slavar är redo, skickar den en "lyssna" adress till slavar och slavar kommit ur deras start loop.
  • Från och med nu ut, befälhavaren styr slavar genom OSC att återaktivera/paus/spola tillbaka filmerna på obestämd tid.
  • Maskiner antingen starta om eller stänga när specifika GPIO stiftet blir inställd på master.

< p > #! / usr/bin/python < br >
importera OSC
importera threading, socket, shutil
importera OMXPlayer från pyomxplayer
från att importera sömn

'''
Thomas Hollier, 2015.

'''

värd = {"master": "192.168.11.45", "slave1": "192.168.11.46", "slave2": "192.168.11.47"}
filmer = {'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 "kopiera %s till/var/ramdisk" % filmer [värdnamn]
shutil.Copy (filmer [värdnamn], "/ var/ramdisk /")
filmer [värdnamn] = filmer [värdnamn] .replace ("/ home/pi/media", "/ var/ramdisk")

Tryck "spela filmen från %s" % filmer [värdnamn]
OMX = OMXPlayer(movies[hostname])
Sleep(5)
OMX.toggle_pause()
Sleep(1)
OMX.Rewind()
Sleep(1)

def reboot():
kommandot = "/ usr/bin/sudo/sbin/shutdown - r nu"
importera underprocess
processen = underprocess. Popen(Command.Split(), stdout = underprocess. PIPE)
output = process.communicate() [0]
skriver ut

def poweroff():
kommandot = "/ usr/bin/sudo/sbin/shutdown -h nu"
importera underprocess
processen = underprocess. Popen(Command.Split(), stdout = underprocess. PIPE)
output = process.communicate() [0]
skriver ut

om hostname == "master":
def gpio_check():
importera RPi.GPIO som GPIO
GPIO.setmode (GPIO. BCM)

GPIO.setup (23, GPIO. IN, pull_up_down = GPIO. PUD_UP)
GPIO.setup (24, GPIO. IN, pull_up_down = GPIO. PUD_UP)
samtidigt sant:
input_state = GPIO.input(23)
om input_state == False:
skriva ut ("upptäckt en omstart begäran: knappen 23 nedtryckt")
send_reboot(Slaves['slave1'][2])
send_reboot(Slaves['slave2'][2])
Sleep(.3)
reboot()

input_state = GPIO.input(24)
om input_state == False:
skriva ut ("upptäckt en poweroff begäran: knappen 24 nedtryckt")
send_poweroff(Slaves['slave1'][2])
send_poweroff(Slaves['slave2'][2])
skriva ut ("knappen 24 pressad")
Sleep(.3)
Poweroff()
Sleep(.1)

gpio_thread = threading. Thread(Target=gpio_check)
gpio_thread.start()

# Skicka lyssna
def send_listen(slaveServer):
skriva ut "uppstod slav", slaveServer
MSG = OSC. OSCMessage()
msg.setAddress("/listen") # set OSC adress
MSG.append ("master. \nThe master pausa för 20 sekunder.") # int
slaveServer.send(msg) # skicka den!

# Skicka play kommando
def send_play(slaveServer):
Print "skickar spela till", slaveServer
MSG = OSC. OSCMessage()
msg.setAddress("/play") # set OSC adress
MSG.append ("master") # int
slaveServer.send(msg) # skicka den!

# Skicka toggle_pause kommando
def send_toggle_pause(slaveServer):
Print "skickar toggle_pause till", slaveServer
MSG = OSC. OSCMessage()
msg.setAddress("/toggle_pause") # set OSC adress
MSG.append ("master") # int
slaveServer.send(msg) # skicka den!

# Skicka rewind kommando
def send_rewind(slaveServer):
Print "Skicka spola tillbaka till", slaveServer
MSG = OSC. OSCMessage()
msg.setAddress("/rewind") # set OSC adress
MSG.append ("master") # int
slaveServer.send(msg) # skicka den!

# Skicka omstart kommando
def send_reboot(slaveServer):
Print "sändande omstart till", slaveServer
MSG = OSC. OSCMessage()
msg.setAddress("/reboot") # set OSC adress
MSG.append ("master") # int
slaveServer.send(msg) # skicka den!

# Skicka poweroff kommando
def send_poweroff(slaveServer):
Print "Skicka poweroff till", slaveServer
MSG = OSC. OSCMessage()
msg.setAddress("/poweroff") # set OSC adress
MSG.append ("master") # int
slaveServer.send(msg) # skicka den!

# hanterare för redo adress
def ready_handler (addr, taggar, grejer, källa):
om inte slavar [grejer [0]] [0]:
slavar [grejer [0]] [0] = sant
skriva ut "ställa in %s till klar" % saker [0]

# setup klienter att skicka meddelanden till
slavesReady = False
C1 = OSC. OSCClient()
C2 = OSC. OSCClient()
slavar = {"slave1": [falsk, (värd ['slave1'], 9000), c1], "slave2": [falsk, (värd ['slave2'], 9000), c2]}

# Ställ in själv för att ta emot meddelanden
receive_address = värdar ["master"], 9000
s = OSC. OSCServer(receive_address) # basic
s.addDefaultHandlers()
s.addMsgHandler ("/ ready", ready_handler) # lägga vår funktion

# Starta OSCServer
skriva ut "\nStarting OSCServer. Använd ctrl-C för att sluta."
St = threading. Tråd (target = s.serve_forever)
St.start()

# Ställ in klienter att skicka meddelanden till
slavar ['slave1'] [2] .Anslut (slavar ['slave1'] [1]) # Ange adress för alla meddelanden som följande
slavar ['slave2'] [2] .Anslut (slavar ['slave2'] [1]) # Ange adress för alla meddelanden som följande

#########
# upprätta kommunikation

skriva ut "Master väntar på att höra från slavar."
# Befälhavaren väntar tills båda slavar är redo
samtidigt inte slavesReady:
Sleep(.01)
om slavar ['slave1'] [0] och slavar ['slave2'] [0]:
slavesReady = sant
skriva ut "master har hört från båda slavar"

# Befälhavaren berättar slavar att lyssna
send_listen(Slaves['slave1'][2])
send_listen(Slaves['slave2'][2])
skriva ut "master har sa slavar att lyssna"
skriva ut "Pausa i 20 sekunder"

# fånga andan
Sleep(20)

#########
# mediakontroll

# Vi går in i en oändlig loop där vi
# återaktivera, vänta på filmlängd
# paus, vänta, spola tillbaka, vänta, återaktivera
skriva ut "in huvudloop"
samtidigt sant:
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)

annat:
thisName = hostname
thisIP = värdar [värdnamn], 9000
masterStatus = {"vaken": [False], "play": [False]}
masterAddress = värdar ["master"], 9000

def send_ready(c):
MSG = OSC. OSCMessage()
msg.setAddress("/ready") # set OSC adress
MSG.append(thisName) # int
försök:
c.send(MSG)
utom:
passera

def listen_handler (lägga till, taggar, saker, källa):
skriva ut "Jag blev tillsagd att lyssna av %s" % grejer [0]
masterStatus ["vaken"] [0] = sant

def play_handler (lägga till, taggar, saker, källa):
skriva ut "Jag blev tillsagd att spela genom %s" % grejer [0]
masterStatus ['spela'] [0] = sant

def toggle_pause_handler (lägga till, taggar, saker, källa):
skriva ut "Jag blev tillsagd att toggle_pause av %s" % grejer [0]
OMX.toggle_pause()

def rewind_handler (lägga till, taggar, saker, källa):
skriva ut "Jag blev tillsagd att spola av %s" % grejer [0]
OMX.Rewind()
masterStatus ["vaken'] = False

def reboot_handler (lägga till, taggar, saker, källa):
skriva ut "Jag blev tillsagd att starta av %s" % grejer [0]
reboot()

def poweroff_handler (lägga till, taggar, saker, källa):
skriva ut "Jag blev tillsagd att avstängning av %s" % grejer [0]
Poweroff()

###########
# skapa en klient för att skicka meddelanden till master
c = OSC. OSCClient()
c.connect (masterAddress)

###########
# lyssna på meddelanden från master
receive_address = thisIP
s = OSC. OSCServer(receive_address) # basic

# definiera hanterare
s.addDefaultHandlers()
s.addMsgHandler ("/ lyssna", listen_handler)
s.addMsgHandler ("/ spela", play_handler)
s.addMsgHandler ("/ toggle_pause", toggle_pause_handler)
s.addMsgHandler ("/ spola tillbaka", rewind_handler)
s.addMsgHandler ("/ starta om", reboot_handler)
s.addMsgHandler ("/ avstängning", poweroff_handler)

# Starta OSCServer
skriva ut "\nStarting OSCServer. Använd ctrl-C för att sluta."
St = threading. Tråd (target = s.serve_forever)
St.start()

skriva ut "%s ansluter till befälhavaren." % hostname
samtidigt sant:
#########i##
# fortsätter att skicka redo signaler förrän herre skickar ett meddelande
# på adressen /listen som får oss ut denna loop
samtidigt inte masterStatus ["vaken"] [0]:
Sleep(.01)
send_ready(c)

##########
# När befälhavaren har tagit kontroll, vi gör ingenting
# och låt huvudenheten uppspelningen genom hanterare < /p >

Se Steg
Relaterade Ämnen

Akryl hölje med laserskärare och band värmare

akryl (Plexiglas(tm)) är bra material för att skapa kapslingar för elektroniska projekt. I detta Instructables, ska jag illustrera stegen i skapa en 2-delat inhägnad med laserskuren akryl och en remsa värmare för att gör böjar. I det här fallet är ka...

Hallon paj tvål

Steg 1: material Hi! För detta instructable behöver du:Vit tvål basKlart eller ogenomskinlig tvål basEn knivHallon doftVanilj doftHotellpoolen behållareKaramellfärgSilikon brownie panSpettGnugga alkoholSteg 2: smältning Smälta några av din vita tvål...

Hur man gör en hallon paj med en raspberry pi

Som en ingenjör arbetsdag och natt med robotar och program är jag trött på att kallas "Matlagning Disabled" av min flickvän, så jag beslöt att göra en riktig hallon paj på min tekniska förmåga med Raspberry Pi, 14/3, som kallas Pi-dagen, eller ä...

NOAA satellitsignaler med PVC QFH antenn och Laptop

Detta instructable täcker allt du behöver att komma igång i att kunna ta emot APT (bild automatlåda) signalerna från satelliterna NOAA (NOAA-15, 18 och 19) flög över (och kan vara en grund för att lyssna på andra satelliter).Allt börjar med en enkel...

Krämig citron och hallon paj

ha kul med receptet kombinerar två av mina favorit frukt - hallon och citron - till en underbar paj, full av söta snd syrlig citron grädde och toppad med hallon och rostade mandel, allt förpackat i en fin en knaprig cookie skorpa.och det finns nästan...

Förvandla ett 1970-flipperspel till en atom synkroniserad väckarklocka med hjälp av en gps och en arduino

En av de vanliga problem som pinball samlare är om att sätta nästa. Tanken kom till mig en dag - Tänk om jag kunde re-syfte flipperspelet? Jag kan då ersätta en befintlig apparat med pin och mitt problem skulle kunna lösas. Med detta i åtanke konvert...

Hemgjord notebook stand med låda och en laptop kylning

Ställ för bärbara datorer med låda och en laptop kylning...

Omforma en akustisk gitarr i en Dobro med aluminium paj kastruller och faltning

detta Instructable är i konsten av ljud Contest. Om du gillar det, Visa mig lite kärlek!Jag arbetar på ett fjärrsamtal projekt med min före detta gitarristen. Han befann sig i ett alternativt land spår en dag, fastställs vissa spår, och bad mig att g...

Hacking Spy Video Trakr med Frickin' Laser balkar... Och missiler!

Artighet av CPT Hans.Jag köpte en USB-drivna skum missil bärraket, som har pan & tilt, och även en inriktning på laser! Jag driver den från den Trakr interna USB-porten, och styra det med GPIO raderna.Steg 1: Original kontrollstyrelsen var ganska sof...

Vattenmelon och fetaost sallad med hallon och körvel vinägrett

Idag kommer vi att göra en vattenmelon och fetaost sallad med körvel och hallon vinägrett. Där kommer att lära dig hur man skalar en vattenmelon, rosta några mandlar, göra vissa gurka ringar, gör en vinägrett och sedan slutligen plattan det upp. Varj...

Baked Alaska Ice cream Pie (3,14 lager med hallon glass!)

Jag velat alltid åka till Alaska för aurora. Men jag fick aldrig chansen för det...Men hey, åtminstone låt oss resa med våra tungor först med detta bakade Alaska Ice cream Pie så att vi kan sätta aurora på våra middagsbord!Du kan göra en super lätt v...

Adafruit choklad hallon paj skomakare

ingen reflow ugn behövs.Göra denna hackable öppen källkod pudding paj.Chokladpudding, Cool Whip dessert toppning, kakaopulver, hallon sylt och en choklad/vanilj smörgås cookie skorpa.Denna paj har en smak som påminner om de fantastiska Jell Ring chok...

Gjutjärn persika hallon paj

Växa upp, min pappa alltid gjorde fantastiska körsbär och äpple skomakare över en lägereld i gjutjärn holländska ugn. Vi skulle kasta en av dessa tillsammans på far/dotter läger varje år och det var alltid en stor hit.Jag bestämde mig att prova en va...

Att bygga robotar med Raspberry Pi och Python

målet med denna handledning är att hjälpa dig att börja programmering med Python att styra din Arduino robotar med en Raspberry PI. Vi går över grunderna som installation och några enkla exempel att styra din robot från en Python GUI från Raspberry P...

Kom igång med Atmel AVR och BASCOM

Jag har sett massor av Instructables visar hur man kan arbeta med mikroprocessorer, men de alla antar att du har arbetat med dem tidigare och vet vad du gör. Jag har inte sett en Instructable som tar dig från ingenting och bygger på varje steg.Vad vi...

Trådlös anslagstavla med SIM-300 och EK-TM4C1294XL

Tja älskade jag bara idén med en trådlös anslagstavlan som visar meddelandet när några sms skickas till den. På så sätt kan du intim det berörda folket om varsel eller information även om du inte är fysiskt närvarande på plats. Detta kan användas i h...

Lätt Peasy vit choklad hallon paj

jag har inte gjort en hallon paj på ett tag och jag trodde det skulle vara bättre än kombinera tårta hallon med söta konfekt som vit choklad. Nyckeln till detta är dock att få hög kvalitet vit choklad som smälter lätt! Skorpan är hem-gjord med kärlek...

Lätt hallon paj

Hej alla!Sommaren är snart här, och jag har redan massor av hallon i min trädgård. Jag gillar bara äta dem utan något, men du kan skapa en massa goda saker med dem. Idag ska jag göra en hallon paj. Jag hittade detta recept på Internet. Jag har ändrat...

Hallon paj för en!

Bara 155 kalorier är i denna petit hallon tårta!Steg 1: Samla dina ingredienser.För detta recept behöver du:· 1/3 kopp färska hallon· En fryst tårta skal (en liten pajskalet cirka fyra inches i diameter)· 1 tsk socker· 1/8 tesked färsk citronsaft· 2...