Índice das dicas

Programando em Python com o PyS60

Por Carlos E. Morimoto em 28 de dezembro de 2008 às 20h05

6

O PyS60 é, como o nome sugere, uma versão do Python que roda sobre o S60, oferecendo acesso aos módulos e recursos do sistema. Ele é uma boa opção de ferramenta de programação para smartphones, pois usa uma sintaxe simples, sem grandes diferenças em relação ao interpretador Python para PCs.

Você pode baixar o interpretador Python para o S60 através do:
http://opensource.nokia.com/projects/pythonfors60/

... ou diretamente no: http://sourceforge.net/projects/pys60

Podemos escrever um "olá mundo" em PyS60 com apenas duas linhas, importando o módulo "audio", que inclui as funções relacionadas à reprodução e gravação de áudio e o acesso ao sintetizador de voz. A partir daí, podemos usar a função "audio.say" para fazer o aparelho falar, veja só:

import audio
audio.say("Tenha um bom dia")

Se você preferir que a mensagem seja exibida em uma janela de texto, pode usar a função "appuifw.note", que faz parte do módulo "appuifw". Este é o módulo responsável por criar janelas e diálogos, por isso é usado por praticamente todos os programas:

import appuifw
appuifw.note(u"Tenha um bom dia")

Para fazer uma pergunta, e armazenar a resposta em uma variável, você poderia usar a seguinte função:

import appuifw
arquivo = appuifw.query(u"Digite o nome do arquivo", "text")

A função "appuifw.query" permite fazer perguntas, enquanto o "arquivo =" no início da linha faz com que o texto digitado seja armazenado na variável especificada, que pode ser usada para abrir ou salvar um arquivo, por exemplo.

A riqueza do Python está em permitir o acesso aos recursos do aparelho, tirando fotos, enviando ou recebendo arquivos, usando o acelerômetro, acessando a agenda de contatos, enviando mensagens SMS e assim por diante. Para tirar uma foto com a câmera, por exemplo, você usaria:

import camera
foto = camera.take_photo()
photo.save("E:\\foto.jpg")

Como pode imaginar, o módulo "camera" carrega as funções relacionadas à câmera, que permite tirar fotos, gravar vídeos, ativar o LED do flash e assim por diante. Uma das funções mais simples é a "camera.take_photo", que simplesmente tira uma foto na resolução máxima. Como queremos que a foto seja salva em um arquivo, salvamos a foto na variável "foto" e em seguida usamos a função "photo.save" para salvá-la no arquivo "foto.jpg", no diretório raiz do cartão de memória (visto pelo sistema como o drive E).

Com apenas estas três linhas, o programa não teria muita utilidade, já que ele iria sempre salvar a foto no mesmo arquivo. Entretanto, se você combinasse a função e tirar a foto com a ler uma variável do exemplo anterior, poderia fazer com que o programa perguntasse o nome do arquivo antes de salvar. A parti daí, Você poderia adicionar uma função para definir a resolução, enviar a foto por e-mail (ou via Bluetooth) e assim por diante. O interessante do Python é justamente oferecer uma curva de aprendizado mais suave, permitindo que você comece com scripts simples e vá gradualmente adicionando novos truques

A forma mais simples de rodar o programa é criar um arquivo de texto (você pode usar o notepad do Windows, o Gedit ou qualquer outro editor de texto puro) contendo os comandos e transferí-los para o smartphone. Salve seu arquivo de texto com a extensão ".py" e copie-o para a pasta "Python" do cartão de memória (ou da memória interna). Em seguida, abra o Python e use o "Options > Run Script" para executá-lo:

Uma forma bastante conveniente de trabalho é usar o perfil de transferência de arquivos do Bluetooth para acessar os arquivos do smartphone diretamente. Isso permite que você edite o script diretamente a partir do aparelho e possa executá-lo rapidamente a cada mudança para testar novas rotinas e corrigir os erros conforme eles apareçam.

Para scripts simples, como nesse primeiro exemplo, você também usar o console ("Opções > Interactive console"), que permite que você simplesmente escreva as instruções diretamente, com o sistema executando os comandos linha a linha:

Você pode ver mais exemplos de scripts em Python que executam as mais diversas funções (de um gravador de som a um servidor web) no Mobile Python: http://www.mobilenin.com/mobilepythonbook/examples.html

Outros sites com exemplos de código são o Cyke64 (http://cyke64.googlepages.com/), o DZone (http://snippets.dzone.com/tags/series60) e o Croozeus (http://www.croozeus.com/).

Outra parada obrigatória é o Wiki: http://wiki.opensource.nokia.com/projects/Python_for_S60

Na hora de distribuir os aplicativos que escrever, você tem a opção de simplesmente disponibilizar os arquivos .py, que podem ser executados dentro do interpretador, ou transformá-los em arquivos .sis, que se comportam como aplicativos nativos do sistema.

A segunda opção é a ideal se você pretende distribuir os aplicativos, já que melhora a apresentação e elimina o incômodo de precisar executá-los dentro do interpretador python. Uma vez empacotados, os programas aparecem no menu e são executados exatamente da mesma forma que outros aplicativos.

Você pode gerar os arquivos .sis com o Ensymble, disponível no: http://code.google.com/p/ensymble/

Você pode usá-lo tanto no Linux quanto no Windows (o comando é o mesmo nas duas plataformas). É necessário apenas que o interpretador Python esteja instalado. Ele já vem instalado por padrão no Linux e o instalador da versão Windows pode ser baixado no:
http://www.python.org/download/

Com o Python instalado, use o comando "python -V" para descobrir qual é a versão que está instalada:

$ python -V

Python 2.4.4

No site do Ensymble, você encontra diferentes versões do script, correspondentes às versões do Python. Como estou usando a versão 2.4.4 do Python, baixo o arquivo "ensymble_python2.4-0.27.py".

O uso é bastante simples. Coloque o arquivo dentro de uma pasta junto com o arquivo .py do seu aplicativo. Em seguida, acesse a pasta via terminal (no Windows use o prompt do DOS) e use o comando de conversão:

$ python ensymble_python2.4-0.27.py py2sis --vendor=GDH hello.py hello.sis

Dentro do comando, o "--vendor=" especifica o nome do desenvolvedor (ou seja, você), que é mostrado ao usuário quando ele instala o pacote. O "hello.py" é o arquivo de entrada, enquanto o "hello.sis" é o arquivo que será gerado. O nome do programa (que aparece nos menus) é por padrão o mesmo nome do arquivo, mas você pode especificar outro nome usando o parâmetro "--appname=Nome".

O script gera um arquivo .sis auto-assinado, que pode ser instalado diretamente em aparelhos com o S60 3ed. Como todo arquivo auto-assinado, ele exibe o tradicional aviso de segurança, mas, com exceção disso, a instalação ocorre sem percalços, como em qualquer outro aplicativo.

6 comentáriosPor Carlos E. Morimoto. Revisado 28 de dezembro de 2008 às 20h05

Comentários

 
por Marcelo (anônimo) em 7 de janeiro de 2009 às 09h55
A nova versão do pyS60, a 1.9, agora está no maemo: https://garage.maemo.org/frs/?group_id=854, agora com python 2.5
 
por Ederson (anônimo) em 30 de dezembro de 2008 às 10h17
Excelente, instalei no meu E51 e funcionou 100%, agora é só correr atras pra aprender a progmar phyton.

Alguém sabe onde posso achar o código fonte em phyton de um cliente SIP?

Abraços.
 
por Roerto (anônimo) em 30 de dezembro de 2008 às 08h54
Ótimo post, parabéns.
Só uma dúvida esse python funciona só no S60? bahhh e quando trocarem para um S70 S80 S90?? Será que irão manter a mesma estrutura.
 
por Marcos (anônimo) em 29 de dezembro de 2008 às 17h50
Muito bom o artigo mas não consegui baixar o arquivo pys60 dos links mencionados no início. Há alguma alternativa a isso?
 
por Marcelo (anônimo) em 28 de dezembro de 2008 às 22h37
Iniciativas como este post do Morimoto sobre Python PyS60 são muito bem vindas. É possível "brincar" com Python tanto no Linux (aqui uso Ubuntu) como também no Windows. E Python realmente tem uma curva de aprendizado bem suave se for comparado ao Java e mais ainda do que o SDK Android. Com Python S60 o programador ganha em produtividade.
 
por Avelino (anônimo) em 28 de dezembro de 2008 às 20h50
Bacana, obrigado pelo aprendizado, espero ter disciplina para aprender e colocar em prática o que foi ensinado