Usare il cellulare come mouse del pc

mouseL’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: