Programação e Linux.

quinta-feira, 21 de agosto de 2008

Slides palestra de 'Python no Celular' CeSOL

Ontem dia (20/08/2008) fiz minha palestra no CESOL, sobre python e Series 60, Mostrei como usar os recursos disponíveis no celulares Series 60 da Nokia usando Python como linguagem
No primeiro momento eu falei sobre python, nokia, symbian, a implemetação do python para o Series 60.

Após isto iniciei a parte dinâmica (slides 22 e 23) da palestra onde eu abria um console remoto (meu computador conectado no console python do celular) e fazia pequenos scripts para usar as funcionalidades do celular usando apenas python. O meu roteiro desta parte segue abaixo:
############################
# Abrir tres terminais
# Ligar o rfcomm
sdptool add --channel=2 SP
sudo rfcomm listen rfcomm2 2

####
# ir no celular e ativar o console bluetooth
#####
# Abrir o minicom em outro terminal

minicom
#######################
# no terceiro terminal
# procurar dispositivos

sudo hcitool scan

######################################
# DENTRO DO MINICOM
######################################
# PYTHON
# Coisas basicas
import os

# nome do os
os.name

# diretorio atual
os.getcwd()

os.listdir(u"e:\\")

# mostrar a hora atual
import time
time.ctime()


################################3
# SMS

# enviar um sms
import messaging
messaging.sms_send('08584166618', u'Somente um teste')

# receber um sms
import inbox
i = inbox.Inbox()

# receber sms
def my(msgid):
print msgid

i.bind(my)

########
# Aqui vai aparecer uma mensagem com o numero (copiar para abaixo)

# entao mostrar a mensagem
i.content(1049305)
i.address(1049305)
i.time(1049305)

# formatar para o tempo correto
from e32db import format_time
format_time(i.time(1049305))

#########
# Ligar para alguem

import telephone

telephone.dial('88752334')

telephone.hang_up()


#########################
# Agenda

import contacts

# mostrar contatos:
db = contacts.open()
for i in db:
print db[i].title

# adicionar um contato
c = db.add_contact()
c.add_field(u"first_name", value=u"CESOL")
c.add_field(u"last_name", value=u"UFC")
c.add_field(type=u"mobile_number", value=u"2008")
c.commit()

# Mostrar os contatos
for i in db:
print db[i].title

# Mostrar meu contato
c
c.id
db[c.id]

for e in c:
print e.type, e.value

# exportar um vcard
vcards = db.export_vcards([c.id])

# gravar o arquivo

filename = u"e:\\test.vcf"
f = open(filename, "w")
f.write(vcards)
f.close()


# PEDIR PARA LIGAR O BLUETOOTH
# enviar para alguem da plateia
# sudo hcitool scan

from e32socket import *
cel1 = "00:17:E3:F9:D6:D3"
#cel1 = '00:09:DD:50:0C:C5'
phone = bt_obex_discover(cel1)
bt_obex_send_file(phone[0], phone[1].values()[0], filename)


# apagar o contato
del db[c.id]
# Mostrar os contatos
for i in db:
print db[i].title

# reimportar o contato
db.import_vcards(vcards)

###########################
# Parte grafica (fazer um aplicativo)

# mexer no celular

# fazer um hello world

from appuifw import *

# desenhar o hello world
t = Text()
t.set(u"Hello python")
app.body = t

# como ninguem ta vendo, vamos tirar um screenshot da tela e enviar para alguem

import graphics

pc = '00:09:DD:50:0C:C5'
phone = bt_obex_discover(pc)
image = graphics.screenshot()
filename =(u'e:\\pic001.jpg')
image.save(filename)
bt_obex_send_file(phone[0], phone[1].values()[0], filename)

# enviar para eu mesmo
# ligar o bluetooth obex server

# fazer funcao para realizar screenshot e enviar para alguem
def ss(to='00:09:DD:50:0C:C5'):
phone = bt_obex_discover(to)
image = graphics.screenshot()
file =(u'e:\\pic001.jpg')
image.save(file)
bt_obex_send_file(phone[0], phone[1].values()[0], file)

#ss()

###
# Desenhar um retangulo

# mexer no celular

from random import randrange
app.body = canvas = Canvas()
color = randrange(0xffffff)
canvas.rectangle((0, 0, 100, 100), fill=color)

# enviar para eu mesmo
ss()

# desenhar uma seta de mouse
x,y = 20,20
arrow = [(0,0), (0,10), (2,8), (4,12), (6,11), (4,7), (7,7)]
canvas.polygon([(x+dx,y+dy) for dx,dy in arrow], 0, 0xffffff)

# enviar para mim mesmo
ss()

###################
# Camera
import camera
image = camera.take_photo()

# enviar para alguem
filename =(u'e:\\pic001.jpg')
image.save(filename)

cel1 = '00:17:E3:F9:D6:D3'
# cel1 = '00:09:DD:50:0C:C5'
phone = bt_obex_discover(cel1)
bt_obex_send_file(phone[0], phone[1].values()[0], filename)

# fazer um sistema de monitoramento?
# usar gprs/internet

#################
# Arquivo de audio?

import audio

filename = u"e:\\audio.wav"
s = audio.Sound.open(filename)

# gravar
s.record()

# parar
s.stop()

# tocar
s.play()

# fechar
s.close()

enviar para alguem
cel1 = '00:17:E3:F9:D6:D3'
# cel1 = '00:09:DD:50:0C:C5'
phone = bt_obex_discover(cel1)
bt_obex_send_file(phone[0], phone[1].values()[0], filename)

# apagar o arquivo
os.unlink(filename)

# Fazer um Servico jornalistico?

5 comentários:

Unknown disse...

Links para mais informações

WEB:
http://www.mobilenin.com/pys60/menu.htm
http://snippets.dzone.com/tags/series60
http://snippets.dzone.com/tag/pys60
http://wiki.opensource.nokia.com/projects/Python_for_S60
http://www.forum.nokia.com/info/sw.nokia.com

LIVRO:
Mobile Python - Jurgen Scheible and Ville Tuulos

Unknown disse...

Site do python para Series 60:
http://opensource.nokia.com/projects/pythonfors60/

Unknown disse...

Como acessar o console bluetooth:
http://wiki.opensource.nokia.com/projects/PyS60_Bluetooth_console

Anônimo disse...

Como consigo emular o symbian em um Linux? O emulador só tem pra windows :\

Unknown disse...

Infelizmente o emulador só funciona em windows, algumas pessoas conseguiram fazer as versões antigas do emulador (antes do S60 3rd) rodar no wine, mas nunca fiz isto. Eu uso uma Máquina Virtual windows para rodar o emulador.