Infrared Remote Py-control – VLC hacking!
L’Infrared Remote Py-Control system, come recita il titolo, è un Sistema infrarossi di controllo remoto, costruito attraverso una board di prototipazione (arduino) programmata per inviare i comandi ricevuti, in seriale, e un comune telecomando e ricevitore infrarossi. In questa piccola dimostrazione, un client in python riceve i comandi seriali e attraverso l’interfaccia COM e la libreria pywin32 ci si interfaccia al software di riproduzione multimediale, VLC. Ad ogni comando seriale vengono associati dei comandi già noti al player VLC per comandare la riproduzione video.
Codice client in Python:
''' I vari KEYCODE abbinati ad ogni tasto della tastiera: http://win32com.goermezer.de/content/view/136/284/ oppure direttamente dal sito di microsoft: http://msdn.microsoft.com/en-us/library/8c6yea83 ''' import serial, sys import win32com.client import win32api import win32gui #LETTURA DEI DATI DA SERIALE: SERIALPORT = raw_input("Inserire la porta seriale a cui e' connesso il dispositivo: ") # Set up serial port try: ser = serial.Serial(SERIALPORT, 9600) #inizializziamo la connessione e settiamo la porta con frequenza a 9600 shell = win32com.client.Dispatch("WScript.Shell") #istruzione per poter interagire col sistema operativo. except serial.SerialException: print "no device connected - exiting\n" sys.exit() #FUNZIONI PER IL CONTROLLO DI VLC: def vol_piu(): print "Aumento volume...\n" win32api.Sleep(100) shell.SendKeys("^{UP}") def vol_meno(): print "Abbasso volume...\n" win32api.Sleep(100) shell.SendKeys("^{DOWN}") def big_screen(): print "Schermo intero\n" win32api.Sleep(100) shell.SendKeys("f") def start_pause(): print "Riprendi/Pausa\n" win32api.Sleep(100) shell.SendKeys(" ") #equivale al tasto SPACE def fast(): print "Piu veloce...\n" win32api.Sleep(100) shell.SendKeys("{+}") def slow(): print "Piu lento...\n" win32api.Sleep(100) shell.SendKeys("{-}") def stop(): print "Stop!\n" win32api.Sleep(100) shell.SendKeys("s") def muto(): print "Muto...\n" win32api.Sleep(100) shell.SendKeys("m") def select_vlc(): print "Porto in primo piano finestra VLC\n" win32api.Sleep(100) shell.AppActivate("- Lettore Multimediale VLC") #permette di portare in primo piano la finestra col nome fra virgolette def title(): print "Titolo finestra: " win32api.Sleep(100) title_window = win32gui.GetWindowText(win32gui.GetForegroundWindow()) print title_window signals = {"1FE609F\r\n" : vol_piu, "1FEA05F\r\n" : vol_meno, "1FE20DF\r\n" : select_vlc, "1FE58A7\r\n" : big_screen, "1FE807F\r\n" : start_pause, "1FEC03F\r\n" : fast, "1FE40BF\r\n" : slow, "1FE10EF\r\n" : stop, "1FE7887\r\n" : muto, "1FE906F\r\n" : title, } # LETTURA CICLICA COMANDI DA SERIALE. while (1): z = ser.readline() print z if signals.get(z): #Se i segnali ricevuti sono presenti nel dizionario, processa la relativa funzione associata. signals[z]() |
Codice per microcontrollore:
#include <IRremote.h> /* Ricevitore infrarosso. (la parte frontale del ricevitore è quella con la mezza sfera). primo piedino: è il segnale collegato al pin digitale 7. (è il primo piedino partendo da sinistra). secondo piedino: è il GND, collegato ad una resistenza 330ohm e poi al pin GND. (piedino centrale). terzo piedino: collegato a 5V (piedino a destra). Sfrutta la libreria IRremote.h (non presente di default). Sito con esempi di codice per la ricezione e l'invio: http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html */ int RECV_PIN = 7; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); irrecv.resume(); // Receive the next value } } |
Qui di seguito un piccolo video esempio dell’infrared remote py-control, abbinato al software VLC. Nota bene, le possibili applicazioni di questo concept sono pressocchè infinite, se hai qualchea idea, qualche miglioramento, commenta. Buona visione:
Rocco Musolino
Commenti