Пишем программу на Python под Symbian в Ubuntu

06 ноября 2009, обновлена 09 ноября 2009

Если бы я знал, что программы для Symbian можно писать на таком удобном API к такому простому языку, как Python, я бы вообще никогда не задумывался о выборе телефона, а сразу брал Нокию (любую Нокию на Symbian S60, а то и SE на UIQ). (Ну да, погуглил, оказывается, на Android тоже есть питоновский API, а вот на Windows Mobile ничего такого нету). Короче, взялся пробовать.

Все нижеописанное проверялось на Nokia 5800 + Ubuntu Karmic. С Питоном я никогда дел не имел, кроме разве что недолгого колупания в Django, так что про него могу говорить глупости. Поправляйте, пожалуйста.

Установка Python в телефон – PyS60

Качаем Python и PythonScriptShell. Второй пакет не подписан, подписать можно на Symbian Signed, после чего оба пакета благополучно устанавливаются в телефон. Первый никак себя не проявляет, зато второй добавляет консоль, работающую по блютусу или прямо с телефона, а также интерпретатор.

Документация

Документация по питону, в частности – документация по платформе S60. Она очень подробная, практически как учебник.

Настройка Python Bluetooth Console

Пробрасываем порт для Bluetooth (единоразово)

sudo apt-get install bluez-utils # если еще чего-то надо, отписывайтесь
 
sdptool add-channel=2 SP

Открываем порт на прослушивание (перед соединением)

rfcomm listen rfcomm2 2

Теперь запускаем на телефоне консоль, просим подключиться к компьютеру. rfcomm на это должен заявить, что соединение установлено. Осталось открыть консоль (rfcomm не убиваем):

screen /dev/rfcomm2

Пишем питоновский код, он выполняется на телефоне. По-моему, это удобно только для проверки возможностей телефона на лету, например, попробуй:

import audio
audio.say("This is the phone talking")

Редактирование файлов на телефоне с помощью obexfs

Зачем вообще копировать скрипты на телефон? Давай писать их прямо там.

Товарищи питоновцы придумали ряд велосипедов для передачи файлов между телефоном и компьютером, и, так сказать, облегченной отладки. Не пойму, зачем, если есть старый добрый протокол OBEX. Однако GVFS-модуль (тот самый, который «Обзор файлов на устройстве» из gnome-bluetooth) не позволил мне редактировать файлы в vim. Зато obexfs позволил:

sudo apt-get install obexfs
 
# узнаем MAC-адрес телефона
hciconfig reset
hcitool scan
# монтируем
mkdir ~/phone
obexfs -b MA:CA:DD:RE:SS ~/phone
# готово!
cd ~/phone/E:/data/python
vim helloworld.py

Напомню, что в питоновской консоли есть возможность запускать скрипты из папки E:\data\python. Невероятно удобно, никаких эмуляторов не нужно.

Кстати, obexfs работает и без блютуса, то есть по USB.

UPD 9.11.2009: увы, obexfs не хочет передавать дату изменения файлов. Поэтому я не рекомендую использовать его ни для чего, кроме отладки скриптов. А еще питон отказывается подключать модули без даты изменения, потому я написал скрипт, который ее проставляет автоматически.

Эмулятор appuifw на wxWidgets

А еще можно отлаживать GUI на Linux. Для этого добрые люди написали библиотечку PyS60-compat
правда, она не на 100% совместима с телефонным API, так что использовать ее надо осторожно. Может, дело в каких-то тонкостях питона, которые я пока не знаю, но примитивная программа, запустившаяся у меня на компьютере, отказалась работать на телефоне, пока я не поменял кавычки на двойные.

Нечто работающее

А вот и кусок работающего кода. Это так, чтоб скопипастить и проверить, что все работает.

Да, русские символы, как и многие другие, вполне поддерживаются, поскольку API использует UTF-8.

# -*- coding: utf-8 -*-
import appuifw, e32
 
# Событие на выбор элемента в списке
def lbox_observe():
  appuifw.note(items[lb.current()])
 
# Событие на кнопку выхода
def quit()
  app_lock.signal()  
 
# Настройка приложения
appuifw.app.title = u"Listbox"  
appuifw.app.screen = 'normal'   
appuifw.app.exit_key_handler = quit  
 
# Элементы списка
items = [u"1",u"2",u"проверка",u"an item",u"foobar"]
 
# Создаем список и показываем его
lb = appuifw.Listbox(items, lbox_observe)
appuifw.app.body = lb
 
# Основной поток приложения окончен, ждем сигнала о завершении работы
app_lock = e32.Ao_lock()  
app_lock.wait()

Что еще?

Куча примеров из книги Mobile Python Book.
Всякие полезности в Nokia Wiki.

Еще хорошо бы разобраться с созданием SIS-пакетов в Ubuntu, но мне это в ближайшее время ни к чему.



Тринадцать комментариев. Напиши еще один
  1. 970e82d420c09c000ce27c4dd129e03c # 24 января 2010 George написал:

    Дзякую! :)

  2. 5162c229847d4eb2ed8ba34a2b3f239d # 15 марта 2010 Greenfield написал:

    Даешь графику на питоне!!! В родной прошивке от нокии есть скрипты например змейки на питоне. Но мобилы у меня нет а поглядеть как делается хочется.

  3. 98aef38b96fafb846ab3d432a1ad9a7a # 31 августа 2010 a10n@n написал:

    Вопрос к автору или знающим, я сделал всё как написано у автора но при попытке подключить блютус консоль получаю сообщение об ошибке на телефоне
    dyscovery failed: permission denied.
    Conection failed.
    done.

    Как с этим быть и как его лечить, у меня Nokia n97

    1. 777894ea5153122bfa6b83f5bbf23622 # 31 августа 2010 Леонид Шевцов (автор) написал:

      А телефон с компьютером спарен? Возможно, дело в этом.

  4. 760bcc00c441fc021ef48f3d5002210f # 28 сентября 2010 руслан написал:

    я на PyS60 н один год программы пишу) пример вообще неработающий)

  5. F1e3898d099d7f7412146d0021d5935b # 25 октября 2010 Oxygen (o2g.org.ru) написал:

    Вау, мечтал пописать программок для телефончика. Ня! Правда, что-то даже лень вникать, не у каждого же Nokia на Symbian

  6. F1e3898d099d7f7412146d0021d5935b # 25 октября 2010 Oxygen (o2g.org.ru) написал:

    Не могли бы вы плиз указать, какие именно файлы скачивать, а то я скачал версию 2.0 binaries, а там чего-то не хватает…

  7. F1e3898d099d7f7412146d0021d5935b # 25 октября 2010 Oxygen (o2g.org.ru) написал:

    При подключении консоль питона выдаёт No serial ports found

  8. F1e3898d099d7f7412146d0021d5935b # 25 октября 2010 Oxygen (o2g.org.ru) написал:

    Ошибка детектед!
    правильно так:
    sdptool add —channel=3 SP
    add[пробел][два дефиса]channel

  9. F1e3898d099d7f7412146d0021d5935b # 25 октября 2010 Oxygen (o2g.org.ru) написал:

    Вопрос к автору или знающим, я сделал всё как написано у автора но при попытке подключить блютус консоль получаю сообщение об ошибке на телефонеdyscovery failed: permission denied.Conection failed.done.
    --
    Просто выполняй rfcomm с sudo:
    rfcomm listen rfcomm2 2
    Эта команда создаёт новое устройство в /dev, а на это, как известно, нужны права.

  10. 4bad190dde45e7766356c2cdd9580da0 # 19 декабря 2010 Чарли написал:

    Небольшая ошибочка
    def quit() –> def quit():

    За статью огромное спс;)

  11. 4bad190dde45e7766356c2cdd9580da0 # 19 декабря 2010 Чарли написал:

    Есть вопрос:

    Заинтересовал «Эмулятор appuifw на wxWidgets»
    Но при запуске скриптов окошко появляется и сразу пропадает, с чем это может быть связано?

  12. 3d361879edcae91e3805021a719c5087 # 29 марта 2011 myfreeweb (myfreeweb.ru) написал:

    Для ведроида на Python можно писать только мелкие скрипты, а не нормальные приложения, а для WinMo как раз есть Python: http://sourceforge.net/projects/pythonce/

(нужна разметка?)

  • **жирный**
  • > цитата

отменить