Nokia N9 | Nokia N900 | Aava Mobile | Nokia N810 | Nokia N800 | Nokia 770

Навигаторы: Приложения, Игры, Игры WebOS, Видео, Барахолка
Обсуждения: Приложения, Игры, Игры WebOS, Эмуляторы, Видео, Темы, Обои, Программы для PC

База знаний (FAQ) | Установка deb-файлов | Как обновить прошивку

Если у Вас есть интересные сведения, которые стоит разместить в новостях, то можете их выложить самостоятельно. Этим заслужите благодарность участников и администрации нашего сообщества. Подробнее...

Программирование на Python

Поделиться:

В настоящей статье рассказывается о том как создавать приложения для Maemo, используя Python, начиная с настройки среды разработки и заканчивая созданием пакета, готового к установке и использованию. В качестве примера разрабатывается приложение Bluetooth-сканнера для Nokia N900.

Существенное большинство приложений для Maemo, написаны на C. Но программирование на C требует определенных навыков и знания платформы. Для Maemo 5 существует полнофункциональный интерпретатор языка Python с богатым набором библиотек. Используя его можно несложно создавать свои приложения для Maemo.

Обсудить статью можно на форуме.

Содержание

Среда разработки

Интерпретатор Python доступен в виде пакета maemo-python-device-env в диспетчере приложений. Убедиться, что интерпретатор установился правильно, можно, открыв X Terminal и набрав команду python. После этого ты окажешься в приветственной консоли интерпретатора:

Python 2.5.4 (r254:67916, Oct 9 2009, 00:02:36)
[GCC 4.2.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

В принципе можно попробовать запустить какой-нибудь несложный сценарий на Python'е уже сейчас, используя специально заготовленный bash-скрипт: run-standalone.sh <название_скрипта.py>. Для этого подошел бы стандартный текстовый редактор, но это не сильно удобно. Конечно, можно заниматься разработкой скрипта на компьютере и далее вручную перекидывать его на телефон по SSH/SCP или еще каким-нибудь, но и это не лучший вариант: о человеческой отладке пришлось бы забыть. Впрочем, все эти заботы не к чему, потому как для разработки Python-приложений для Maemo есть замечательная IDE — Pluthon. Основанная на всем известном Eclipse’е, она позволяет разрабатывать и отлаживать скрипт на компьютере, а тестировать его прямо на телефоне. Причем этот вариант подходит для любой платформы: винды, линукса или мака. Для запуска понадобится лишь скачать два архива с pluthon.garage.maemo.org и распаковать их в одну папку. Помимо этого требуется, чтобы в системе был установлен JRE (http://java.sun.com).


Подготовка проекта

Позаимствованный у PyDev редактор кода предоставляет все прелести IDE: автодополнение кода, сниппеты, подсказки — все, что и без того может ускорить разработку. Далее схема действия Pluthon очень простая: разрабатываемый скрипт по команде на запуск перебрасывается через SSH на телефон и уже на мобильной платформе начинается его исполнение. По этой причине важно, чтобы на N900 был установлен OpenSSH сервер, это легко делается через менеджер пакетов (подробнее читай в статье прошлого номера). Особенно приятно, что телефон вовсе необязательно подключать по USB к компьютеру: намного удобнее это сделать через беспроводные Bluetooth или Wi-fi. Попробуем?

Для начала создадим новый проект (меню File -> Pluthon Project -> Empty Python Project), далее жмем Next и выбираем способ удаленного подключения к телефону. Какой бы способ ты ни выбрал — USB, Bluetooth, WLAN ad-hoc — не поленись зайти в настройки. Здесь необходимо правильно указать IP-адрес девайса, а также имя пользователя для работы в системе. Чтобы не было проблем я обычно отлаживаю программы под рутом, хотя это и может быть небезопасно. Далее нажатием на кнопку Finish мы создаем проект.

Тут надо сказать, что по умолчанию Python установлен в «голом» виде, в нем практически нет готовых модулей. Поэтому все приходится устанавливать дополнительно в виде специального пакета PyMaemo, представляющего собой сборку сортированных модулей для платформы Maemo. Нас в первую очередь интересуют два модуля:

  • PyMaemo/HildonDesktop, предоставляющий привязки для использования интерфейса Maemo;
  • PyBluez — обертка для простого использования встроенного Bluetooth.

В ином бы случай, PyMaemo пришлось устанавливать вручную, но Pluthon в момент создания нового проекта предлагает проверить мобильное устройство на наличие необходимых для комфортной разработки библиотек. В случае необходимости, все подкачивается из инета и устанавливается автоматически, а тебе остается лишь смотреть на сообщения в логе.


Приступаем к разработке

Теперь, вернемся к нашей задаче — нам необходимо просканировать Bluetooth-эфир. Установив PyMaemo, который включает обертку PyBluez, мы сильно облегчили себе задачу, потому как у нас больше нет необходимости заморачиваться по поводу низкоуровнего взаимодействия с BT-модулем (вот они прелести Python!). Библиотека все сделает сама: главное не забыть ее импортировать, поэтому делаем это в первую очередь:

import bluetooth

Операция по поиску беспроводных устройств в эфире называется Discover и реализована в библиотеке bluetooth как один из методов. Причем в качестве параметров можно указать, определять ли имена устройств (их числовой идентификатор, например, step_nokia, N900-phone и т.д.) или нет. В ответ функция возвратит список, в котором будут имена устройств и их MAC-адреса — естественно в случае, если таковые имеются. Присвоим результат сканирования переменной nearby_devices:

nearby_devices = bluetooth.discover_devices(lookup_names = True)

Теперь остается только вывести результат сканирования. Для простоты примера представим, что имеем дело с обычном консольным приложением и для вывода будем использовать стандартную функцию для вывода текстовых данных:

print "found %d devices" % len(nearby_devices)
for addr, name in nearby_devices:
  print " %s - %s" % (addr, name)

Теперь соединяем все вместе и через меню Run -> Run отдаем команду на запуск, предварительно проверив, что на телефоне включен Bluetooth. В момент первого запуска Pluthon поинтересуется, каким образом ему переносить исходник на мобильное устройство: безопасно монтировать удаленный диск или копировать скрипт по SSH. Второй вариант не требует настройки, поэтому будем использовать его. Единственное, что нужно, — это ввести пароль пользователя, который ты ранее указывал в момент настройки подключения. Если ты так же, как и я, указал root, то вспомни тот пароль, который указав в момент установки приложения rootsh.

В случае успеха, в панели для отладки PluThon отобразится вывод скрипта: имена всех найденных устройств, а также их MAC-адреса. Можно также запустить сценарий из консоли: передав название скрипта в качестве аргумента run-standalone.sh. Правда, прямо скажем, что на мобильное приложение это пока явно непохоже.


Создаем интерфейс через Qt

Чего не хватает нашей программе, так это полноценного графического интерфейса. К счастью, существует несколько вариантов наверстать упущенное. Можно, как и для более ранних версий Maemo, использовать библиотеку GTK. Но раз уж компания Nokia приобрела небезызвестный набор библиотек Qt и тем более портировала его для Maemo5, то было бы глупо отказываться от использования новой технологии. Причем если ты уже имел опыт разработки с использованием Qt, то ничего ровным счетом не изменится: на N900 все работает точно так же, как и под виндой или обычным линуксом. Вплоть до того, что можно взять готовые примеры и без труда запустить их на мобильной платформе!

Поскольку приложение мы разрабатываем на Python, то необходимо установить для Qt необходимые привязки: PyQt (www.riverbankcomputing.co.uk) или PySide (www.pyside.org). Мы будем использовать первый вариант. Для этого, как в Debian или Ubuntu воспользуемся пакетным менеджером apt-get. Открываем консоль, переходим в режим рута (sudo gainroot) и далее набираем команду для инсталляции PyQt (пакет называется python2.5-qt4):

apt-get install python2.5-qt4

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

import sys from PyQt4 import QtGui, QtCore import bluetooth

Далее создаем класс с нашим основным окном и обозначим для него заголовок «N900 Bluetooth-scanner»:

class MainWindow(QMainWindow):
  def __init__(self, *args):
    QMainWindow.__init__(self, *args)
    self.setWindowTitle('N900 Bluetooth scanner')

Главным компонентом окна ListBox, в который мы поместим вывод информации о найденных устройствах:

self.listbox=AssociativeListBox(self)

Как и в предыдущем примере получаем информацию об устройствах в эфире с помощью метода discover_devices() и добавляем имя и MAC-адрес устройства в наш Listbox, используя цикл:

nearby_devices = bluetooth.discover_devices(lookup_names = True)
for addr, name in nearby_devices:
  self.listbox.insertItem(addr, name)

Далее создаем экземпляр объект нашего окна и запускаем цикл с обработчиком событий:

app = QtGui.QApplication(sys.argv)
qb = MainWindow()
qb.show()
sys.exit(app.exec_())

Теперь можно оформить наше приложение в виде Debian-пакета, готового к установке. В этом опять же нас выручит среда разработки Pluthon. Достаточно запустить специальный мастер через меню Export -> PluThon -> Export to Debian Package, после чего выбрав платформу Maemo, получить готовый к распространению пакет.


Дальнейшая разработка

Теперь, когда наша программа получило очертания обычного для N900 приложение и выполняет вполне конкретную цель, можно дополнить интерфейс дополнительными элементами. Я добавил кнопку «Начать сканирование» и реализовал сканирование эфира по запросу, а используя базу «MAC-адрес – производитель», реализовал определение имени производителя. Исходники мы выложили на наш DVD. Более того, возможности PyBluez позволяют легко определить, какие сервисы предоставляет беспроводное устройство, а значит, ты без труда сможешь реализовать и такую возможность!

Важно, что для начала разработки приложения не надо морочить голову с изучением новой платформы. Используя уже имеющиеся знаний Pythonа и библиотеку Qt, мы сходу смогли разработать работоспособное приложение для Nokia N900. Осталось выложить его в девелоперский репозитарий :).


Ссылки

Создатель сайта и оформления Кирилл Чувилин aka KiRiK, на странице использованы скрипты проекта MediaWiki.