Вы находитесь на странице: 1из 12

Introduo_ao_Python_para_S60

Contents
1 Tutorial de Python para S60 1.1 Introduo 1.2 Montando o ambiente de trabalho 1.2.1 Instalando o SDK/Emulador 1.2.2 Instalando no celular 1.2.3 Testando programas PyS60 1.3 Os mdulos do PyS60 1.3.1 Eventos e callbacks 1.3.2 Funes assncronas 1.3.3 Mdulos especficos do PyS60 1.4 Desenvolvendo 1.4.1 Ligando a cmera

Tutorial de Python para S60


Introduo
Antes de partirmos para a ao vamos apresentar os atores envolvidos nesse tutorial: Python Linguagem de programao dinmica que implementa vrios paradigmas de desenvolvimento, fcil de aprender e usar, criada em 1991 por Guido van Rossum. Seu nome derivado do grupo humorstico britnico Monty Python. Mais informaes em http://www.python.org Serie 60 (S60) Linha de celulares smartphones da Nokia que vm equipada com o sistema operacional Symbian. Atualmente existem 3 "edies" da Serie 60 e em cada uma delas uma verso diferente do Symbian usada. Dentro de cada edio ainda existe uma subdiviso de Feature Packs para distinguir entre dispositivos que possuem determinadas funcionalidades (ex. Wi-Fi, Bluetooth, Cmera, etc.). Uma lista completa das edies, FPs e dispositivos podem ser obtidas em http://www.forum.nokia.com/devices/matrix_all_1.html Mais informaes sobre a Serie 60 em http://www.s60.com Tutorial de Python para S60 1

Introduo_ao_Python_para_S60 Symbian Sistema operacional proprietrio para dispositivos mveis desenvolvido pela Symbian e custeado por um consrcio formado por empresas como Nokia, Sony/Ericsson e Samsung. Atualmente ela pertence inteiramente Nokia e existem rumores de que o cdigo fonte dele ser disponibilizado como Open Source. Mais informaes em http://www.symbian.com Forum Nokia Portal para desenvolvedores de software para celulares da Nokia. L possvel encontrar o SDK para desenvolvimento C++ e Java para Serie 60 bem como uma srie de artigos, tutoriais, exemplos, ferramentas e recursos para desenvolvedores. Python para S60 Projeto Open Source custeado pela Nokia que j foi suportado oficialmente pela Nokia mas atualmente segue sua vida no mundo Open Source. O Python para S60 utiliza a verso 2.2 do Python (que uma verso consideravelmente antiga visto que o Python est indo para a verso 2.6). O ponto central de informaes sobre o PyS60 (para abreviar)0 o site do projeto em http://pys60.sf.net.

Montando o ambiente de trabalho


Iremos descrever neste tutorial como montar o ambiente de trabalho para desenvolvimento em Python utilizando o Windows mas no site do PyS60 voc pode encontrar informaes sobre como desenvolver para PyS60 usando tanto o Linux quanto o MacOS X (que consideravelmente mais fcil do que usando Windows). Apesar de existir um emulador para celulares S60 no SDK C++ da Nokia ele no implementa todas as funcionalidades disponveis em um aparelho real (tais como cmera, comunicao via GSM ou conectividade Bluetooth) portanto extremamente recomendvel dispor de um aparelho S60 real para acompanhar este tutorial at o fim. Qualquer edio pode ser usada mas eu recomendo algum aparelho "3rd Edition". O celular que eu usei para desenvolver o tutorial um Nokia N95 que um dispositivo "3rd Edition Feature Pack 1", portanto, se alguma coisa no funcionar conforme descrito aqui em seu celular verifique se isso no est acontecendo por causa da verso diferente do dispositivo/SDK.

Instalando o SDK/Emulador
Se voc j dispe de um celular S60 a instalao do SDK opcional. O SDK C++ da Nokia depende da instalao do Perl em seu computador. Eu recomendo a instalao do ActivePerl da ActiveState (http://www.activestate.com/store/download.aspx?prdGUID=81fbce82-6bd5-49bc-a915-08d58c2648ca) pois para instal-lo basta rodar o instalador). Depois de ter baixado o SDK C++ do site Forum Nokia chegado o momento de instal-lo. Para isso basta descompactar o arquivo .zip que voc acabou de baixar e rodar o instalador (setup.exe) que est dentro dele e seguir as instrues. Se voc no alterou o local padro de instalao provvel que voc tenha agora um diretrio C:\Symbian em seu computador. Agora que voc j instalou o SDK C++ e o emulador em seu computador chegou o momento de baixar e instalar o PyS60 para rodar dentro do emulador. Para isso s baixar o PythonForS60_1_4_4_SDK_XXX.zip (substituindo o XXX pela verso do SDK que voc havia baixado). Introduo 2

Introduo_ao_Python_para_S60 Depois que voc descompactou este arquivo .zip basta copiar o contedo dele dentro de C:\Symbian\X.X\S60_3rd_FP1\Epoc32 (ou o diretrio equivalente dependendo da verso de SDK que voc instalou). Pronto. J temos o Python instalado pra funcionar dentro do emulador. Para execut-lo basta entrar na opo do menu "Iniciar"->Programas->S60 Developer Tools->SDK->Emulator (tenha pacincia pois o emulador vai demorar pra comear a funcionar) ir na opo "Installed" e escolher "Python".

Instalando no celular
Para instalar o PyS60 no seu celular voc precisa baixar a verso adequada do PyS60 para seu celular em http://sourceforge.net/project/showfiles.php?group_id=154155 Ser necessrio baixar dois arquivos com a extenso SIS: PythonForS60_1_4_4_VERSAO.SIS Esse pacote tem o interpretador do Python propriamente dito. PythonScriptShell_1_4_4_VERSAO.SIS Esse pacote disponibiliza a opo "Python" no menu "Aplicativos" do seu celular e ainda acompanha alguns exemplos de cdigo. Agora s usar o Nokia PC Suite para instalar esses pacotes em seu celular que a opo "Python" ir aparecer no seu menu de aplicaes:

Menu "Aplicaes"

Tela inicial do Python

Testando programas PyS60


Agora falta o ltimo passo que precisa ser executado antes de partirmos para o desenvolvimento de uma aplicao para S60: enviar um programa Python para o aparelho para testar. Para isso vamos fazer um pequeno programa chamado "ola_mundo.py" com o seguinte contedo:

Instalando o SDK/Emulador

Introduo_ao_Python_para_S60
import appuifw appuifw.note(u"Ol Mundo!", "info")

Para fazer esse programa voc pode usar um editor de textos comum como o Notepad do Windows (eu costumo usar o Notepad++ para isso). Depois que voc gravou o seu pequeno programa necessrio envi-lo para o diretrio C:\Python ou E:\Python (no caso do seu celular ter um carto de memria) para podermos execut-lo. No exemplo abaixo eu estou conectando o meu celular atravs da USB mas essa comunicao tambm pode ser feita via conexo Bluetooth. Note que tambm preciso ter o Nokia PC Suite Instalado para que tudo funcione corretamente:

Copiando "ola_mundo.py" para E:\Python Depois que a gente fez a cpia chegado o momento de executar o nosso primeiro aplicativo Python para S60:

Testando programas PyS60

Introduo_ao_Python_para_S60

Escolhendo a opo "Run Script" Escolhendo o nosso programa Assim que o nosso programa comear a rodar ele ir mostrar uma caixa de dilogo com a nossa mensagem de saudao:

Nossas saudaes! Agora que j sabemos como fazer um pequeno programa para PyS60, envi-lo para o celular e execut-lo chegou o momento de apresentar uma viso mais aprofundada das funcionalidades disponveis para o desenvolvimento de aplicaes Python para dispositivos mveis.

Os mdulos do PyS60
As limitaes de memria e de poder de processamento dos dispositivos mveis obrigam o desenvolvedor a tomar mais cuidado com o desenvolvimento de suas aplicaes. Isso no foi diferente ao se portar o interpretador Python para o ambiente Symbian. Os mdulos do PyS60 5

Introduo_ao_Python_para_S60 Pequenas mudanas no interpretador fazem com que o garbage collector do Python no faa a coleta de lixo de objetos que continham referncias circulares (A referencia B que referencia A), portanto, importante tomar cuidado para que esse tipo de situao no ocorra. Alm desse tipo de cuidado o desenvolvedor tem que cuidar para sempre "desligar" os recursos que no esto sendo usados e, sempre que possvel, por o seu programa "pra dormir" pois desta forma o Symbian ir diminuir o clock do processador que causar uma economia considervel de bateria.

Eventos e callbacks
Para facilitar a vida do programador no desenvolvimento de aplicaes que consumam poucos recursos os mdulos Python especficos para a plataforma S60 usam e abusam do conceito de eventos e callbacks. Esse conceito simples: a aplicao fica "dormindo" at que um evento ocorra (tecla pressionada, sinal de relgio, etc) e dispare uma funo pr-determinada (callback).

Funes assncronas
Alm do conceito de eventos e callbacks descrito acima os mdulos que acompanham o PyS60 tambm possuem vrias funes que se comportam de maneira assncrona, ou seja, elas retornam antes de terminar de executar a sua tarefa. Nesses casos bastante comum que essas funes executem uma chamada uma funo callback para 'avisar' de que sua tarefa foi concluda.

Mdulos especficos do PyS60


Iremos falar rapidamente sobre os mdulos do PyS60 a partir de agora mas por questo de espao no poderemos entrar em maiores detalhes sobre cada um deles ou at mesmo sobre suas funes. Para uma viso detalhada de cada um deles eu recomendo uma visita documentao oficial do Python para S60 que pode ser encontrada no endereo http://www.pythonbrasil.com.br/moin.cgi/DocumentacaoPython. Os mdulos especficos do PyS60 so: e32 Este mdulo fornece acesso s funes especficas do sistema operacional Symbian que no possuem relao direta com a interface com o usurio. Neste mdulo voc ir encontrar funes que retornam a verso do PyS60, se seu programa est rodando no emulador, a lista de todos os drives disponveis e funes e objetos que lidam com locks, threads, etc. sysinfo Este mdulo fornece funes que retornam dados do aparelho tais como qual o perfil escolhido (geral, reunio, silencioso, ...), o estado da carga da bateria, tamanho da tela, espao livre em disco, IMEI, potncia do sinal da rede telefnica, tipo de toque, informaes sobre a memria do aparelho, verso do firmware, etc. appuifw

Eventos e callbacks

Introduo_ao_Python_para_S60 Neste mdulo voc ir encontrar tudo o que tem relao com a interface grfica com o usurio (GUI). um dos mdulos mais importantes do PyS60. graphics Mdulo com funes grficas para manipulao de imagens, desenho de primitivas, impresso de textos em imagens, funes para tirar screenshots, etc. Esse mdulo tem total interoperabilidade com os mdulos camera e appuifw. camera Um dos mdulos mais interessantes do PyS60 por sua facilidade de uso. Este mdulo disponibiliza funes para manipular a(s) cmera(s) do celular permitindo que se tire fotografias ou que se grave vdeos com elas. gles Biblioteca que fornece uma API compatvel com OpenGL/ES para desenho de grficos 3D com acelerao (alguns dispositivos da S60 possuem um chip para acelerao grfica 3D). sensor Este mdulo d acesso aos sensores de acelerao, rotao e tapping (bater com o dedo na tela do celular aciona esse sensor). Vale lembrar que apenas alguns modelos de celulares S60 dispem desses sensores. audio Esse mdulo permite a manipulao total do sistema de udio do aparelho. Com ele possvel manipular tanto o auto-falante externo (tocando um MP3, por exemplo) quanto o udio de uma ligao telefnica (emitir um som no meio de uma conversa ou at mesmo grav-la). telephone Funcionalidades de telefonia tais como fazer uma ligao ou atender uma chamada esto neste mdulo. messaging Esse mdulo tem as funes responsveis pelo envio de SMS e MMS. inbox, contacts, calendar Manipulam respectivamente a caixa de entrada de mensagens (SMS/MMS), os contatos da agenda e os eventos de calendrio. Esses mdulos so extremamente poderosos. location, positioning Mdulos de localizao que utilizam respectivamente os dados da rede GSM e dados do GPS (interno ou externo) do aparelho. e32db Mini banco de dados relacional que permite manipulao utilizando SQL (ser substitudo pelo SQLite em verses futuras do PyS60). socket Mdulo que j acompanha o Python e recebeu adies para suportar conexes via Bluetooth.

Desenvolvendo
A filosofia do Python diz que a linguagem tem "batteries included" (baterias inclusas) e isso significa que a linguagem sempre deve vir acompanhada de uma biblioteca padro bastante completa e poderosa. Isso no diferente no Python para S60 onde temos alguns mdulos da biblioteca padro do Python (apenas uma parcela dos mdulos padres) e mais algumas bibliotecas especficas para o desenvolvimento para S60. Obviamente, por questes de espao, no iremos descrever ou usar todos os mdulos neste tutorial mas se voc deseja obter informaes detalhadas sobre o que est disponvel para essa plataforma eu recomendo enormemente uma lida na documentao oficial do PyS60 que pode ser baixada no site do projeto listado na Mdulos especficos do PyS60 7

Introduo_ao_Python_para_S60 primeira parte deste tutorial (disponvel em formato PDF). Para ilustrar o desenvolvimento de uma aplicao Python para S60 iremos utilizar um exemplo bastante simples de uma aplicao que tira uma foto e a envia via MMS para um nmero de telefone informado. Todas as aplicaes PyS60 podem usar o esqueleto abaixo para ser desenvolvida (para aqueles que ainda no conhecem Python eu recomendo a leitura do Tutorial da Linguagem disponvel em http://www.pythonbrasil.com.br/moin.cgi/DocumentacaoPython):
import e32 import appuifw class MinhaAplicacao(object): # Define uma classe MinhaApp def __init__(self): # Cria um objeto "trava" ir "segurar" # a nossa aplicao rodando self.trava = e32.Ao_lock() def executa(self): # Aqui vai nossa applicacao # =========================

# atribui uma chamada "callback" para # o mtodo "sai()" quando o usurio # escolher a opo "Sair" no celular # Obs: note que o mtodo "sai()" # no tem os parnteses porque a funo # no executada imediatamente appuifw.app.exit_key_handler = self.sai # aguarda segura a execuo at que # "trava" receba um sinal self.trava.wait() def sai(self): # envia o sinal para "trava" self.trava.signal() if __name__ == '__main__': aplicacao = MinhaAplicacao() aplicacao.executa()

Essa aplicao no far nada de interessante ainda. A nica coisa que fizemos at agora foi organiz-la dentro de uma classe "MinhaAplicacao" que implementa o mtodo ".executa()" onde programamos a opo de "Sair" da aplicao usando um "ActiveObject Lock" do Symbian. Essa "trava" necessria pois as aplicaes no universo Symbian so desenvolvidas para trabalharem no modelo assncrono, ou seja, as funes retornam imediatamente aps serem chamadas mesmo antes de terem concludo as suas tarefas. Muitas funcionalidades do PyS60 tambm so implementadas usando o modelo de callback, ou seja, o programador associa funes eventos e quando esses eventos ocorrem a funo apropriada chamada. No nosso caso o mtodo ".sai()" executado sempre que um evento exit_key for disparado e esse evento ocorre quando acionamos o boto de opes direito do celular.

Desenvolvendo

Introduo_ao_Python_para_S60

Ligando a cmera
Um dos mdulos mais interessantes que acompanha o PyS60 o "camera". Com ele podemos facilmente acionar a cmera do nosso celular, tirar fotografias, manipular a foto, grav-la no carto de memria, envi-la para outros celulares, etc. Para tirar uma foto com a cmera basta executar os comandos:
import camera foto = camera.take_photo()

A funo ".take_photo()" do mdulo "camera" ir retornar um objeto do tipo "Image" contendo a imagem fotografada. Para gravar a imagem no carto de memria basta chamar o mtodo ".save()" deste objeto (note que o caracter "\" precisa ser duplicado para fazer escaping do mesmo):
foto.save("E:\\Images\\minha_foto.jpg")

Como vocs puderam ver extremamente simples tirar uma foto em Python mas isso tem um incoveniente: a foto tirada assim que a funo camera.take_photo() chamada mas o que est sendo fotografado no aparece na tela do celular, logo, voc no consegue ver o que est sendo fotografado. Para ver o que a cmera ir fotografar necessrio acionar o view finder da cmera (e deslig-lo imediatamente antes de tirar a fotografia). Vamos ento voltar ao nosso "esqueleto" de aplicao e adicionar um pouco mais de cdigo ele:
: import appuifw import camera : class MinhaAplicacao(object): def __init__(self): : # Vamos criar um objeto Canvas. Um # objeto Canvas permite a exibio # de imagens. self.canvas = appuifw.Canvas() def desenha_tela(self, imagem): self.canvas.blit(imagem) def executa(self): # define o ttulo da aplicao # o "u" antes da string diz que # ela est no formato Unicode appuifw.app.title = u"PyFoto" # Vamos definir que o corpo da aplicao # ser o objeto Canvas criado acima. appuifw.app.body = self.canvas # iniciamos o "view finder" que ir # executar self.desenha_tela() # constantemente onde iremos exibir # a imagem capturada pelo finder no Canvas camera.start_finder(self.desenha_tela) : def sai(self): # desliga o view finder camera.stop_finder()

Ligando a cmera

Introduo_ao_Python_para_S60
:

Executando esse teste vamos obter a seguinte tela:

Imagem da tela do meu computador Agora vamos adicionar uma opo "Tirar foto" ao nosso menu "Opes". Isso extremamente simples de se fazer... vamos voltar ao nosso cdigo e adicionar o seguinte trecho:
: class MinhaAplicacao(object): : def tira_foto(self): # Desliga o view finder camera.stop_finder() # Tira a foto e a grava em # E:\Images\foto.jpg foto = camera.take_photo() foto.save("E:\\Images\\foto.jpg") # Religa o view finder camera.start_finder(self.desenha_tela) def executa(self): : # ... aps a chamada camera.start_finder() # Cria uma opo "Tirar foto" no menu # Opes do celular que chama o mtodo # self.tira_foto() quando acionado appuifw.app.menu = [ (u"Tirar foto", self.tira_foto), ] :

Agora j podemos tirar a foto que ser gravada no arquivo E:\Images\foto.jpg (para futuramente envi-la via MMS):

Ligando a cmera

10

Introduo_ao_Python_para_S60

Opo "Tirar foto" No se assuste se a aplicao ficar com uma tela branca por alguns segundos pois o tempo necessrio para que o Python grave a foto recm tirada. Agora que temos a foto vamos envi-la via MMS para um nmero de celular informado. Para isso adicione o cdigo abaixo no nosso exemplo:
: import messaging class MinhaAplicacao(object): : def tira_foto(self): : # ...logo depois de foto.save(...) # Solicita o numero do telefone numero_fone = appuifw.query(u"Nmero do telefone", "text") # verifica se o numero foi informado e envia mensagem if numero_fone: messaging.mms_send( numero_fone, u"Foto tirada pelo PyFoto", "E:\\Images\\foto.jpg" )

Assim que a gente roda a nossa aplicao e tiramos uma foto j podemos informar o nmero do telefone do destinatrio e ver a mensagem depois de entregue (cuidado ao testar o envio de MMS pois isso poder incorrer em custos):

Ligando a cmera

11

Introduo_ao_Python_para_S60

Solicitando o nmero do telefone Mensagem recebida Obviamente podemos melhorar muitos aspectos da nossa aplicao como por exemplo: Reduzir o tamanho da imagem antes de envi-la para economizar dinheiro Buscar o nmero de telefone da nossa lista de contatos Girar a tela para aproveitarmos melhor o espao para o view finder Adicionar outras opes de envio (Flickr, Bluetooth, ...) Mas fica como exerccio para os leitores.

Ligando a cmera

12