Usare il cellulare come mouse del pc
L’unica limitazione (o quasi!), quando si impara a programmare in Python per Symbian, è la fantasia del programmatore.
Quest’ultima applicazione che ho appena creato permette di sfruttare il sensore accelerometro del cellulare per muovere il cursore del mouse sul pc.
Il principio di funzionamento è molto semplice: lo script sul cellulare legge le informazioni sul sensore e le invia tramite bluetooth al computer, sul quale è avviato un altro script che legge le informazioni via bluetooth e muove il cursore del mouse in base ai dati ricevuti.
Lo script da avviare sul cellulare è questo:
import e32 import socket import sensor import appuifw import key_codes conn = socket.socket(socket.AF_BT, socket.SOCK_STREAM) address, services = socket.bt_discover() service = services.keys()[0] channel = services[service] conn.connect((address, channel)) f = conn.makefile("rw", 0) print 'Connesso a %s sul canale %d' % (service, channel) click = False run = True def mouse(s): global click x = s['data_2'] y = s['data_1'] if click: click = False print >> f, 'LeftClick' else: print >> f, '%d,%d' % (x, y) def clicka(): global click click = 'LeftClick' def quit(): lock.signal() acc.disconnect() canvas = appuifw.Canvas() canvas.bind(key_codes.EKeySelect, clicka) appuifw.app.body = canvas sensors = sensor.sensors() id = sensors['AccSensor']['id'] cat = sensors['AccSensor']['category'] acc = sensor.Sensor(id, cat) acc.connect(mouse) lock = e32.Ao_lock() lock.wait()
Lo script da avviare sul pc è questo:
(richiede che sia installata la libreria win32api, scaricabile qui)
IMPORTANTE: Dovete modificare la stringa COM3 con il nome della porta COM utilizzata dalla vostra periferica bluetooth per la trasmissione seriale!
from win32api import GetCursorPos, SetCursorPos, mouse_event import win32con # Modificare 'COM3' con la porta COM utilizzata dalla vostra # periferica bluetooth per la trasmissione seriale dei dati porta = 'COM3' c = open(porta, 'rb', 0) while True: x, y = GetCursorPos() line = c.readline()[:-1] print line if line == 'LeftClick': mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0) mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0) else: sx, sy = line.split(',') sx = int(sx)/5 sy = int(sy)/5 x -= sx y -= sy SetCursorPos((x, y))
Segue un video dell’applicazione in funzione: