Programmierung von Mobiltelefonen mit Python

48
Folie 1 Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009 Programmierung von Mobiltelefonen mit Python Symbian S60 Andreas Schreiber <[email protected]> PyCologne – Python User Group Köln, 11.02.2009

description

Programmierung von Mobiltelefonen mit S60-Betriebssystem mit PyS60 (Vortrag Python User Group Köln).

Transcript of Programmierung von Mobiltelefonen mit Python

Page 1: Programmierung von Mobiltelefonen mit Python

Folie 1Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Programmierung von Mobiltelefonen mit PythonSymbian S60

Andreas Schreiber <[email protected]>

PyCologne – Python User Group Köln, 11.02.2009

Page 2: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 2

Smartphones

Kombination aus Mobiltelefon („Handy“)Personal Digital Assistant (PDA)

Viele Funktionen und ProtokolleTelefonie, PIM, Web-Browser, SMS, MMS, E-Mail, VoIP, Multimedia, Radio, Digitalkamera, GPS, DVB-H, … GSM, UMTS, GRPS, HSCSD, WLAN, Bluetooth, IR, USB, …

BetriebssystemSmartphones haben vollständige, erweiterbare BetriebssystemeHandys haben vordefinierte Oberfläche; nur begrenzt erweiterbar (z.B. durch Java)

Page 3: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 3

Betriebssysteme für Smartphones

Liste: http://de.wikipedia.org/wiki/Smartphone#Betriebssysteme

Linux

Android

Openmoko

Mac OS X (Apple iPhone)

Palm OS

RIM BlackBerry

Symbian OS

UIQ (Sony Ericsson)

Series 80 (Nokia Communicator)

Series 60 (Nokia N-series & E-series, Siemens, Samsung, Motorola, Panasonic)

Windows

Page 4: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 4

Symbian OS und S60

Symbian OS

Betriebssystem für Smartphones und PDAs

Microkernel, 32bit, Single User

GUI-zentriertes Applikations-Framework

S60

Benutzeroberfläche für Smartphones

Aktuell: S60 3rd Edition

Entwicklungsumgebungen

C++, Java, Web Widgets

(Flash Lite), (Python)

A schematic diagram of the S60 platform architecture.

Quelle: S60 Platform: Introductory Guide. Nokia Corporation, 2007.http://www.s60.com/business/developers/documents

Page 5: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 5

Python for S60 (PyS60)

Portierung von Python auf S60-Plattform

Entwicklung von NOKIA

Open-Source-Lizenz (Apache Version 2 und Python)

Stable Release

Aktuelle Version: 1.4.5 (03.12.2008)

Verfügbar bei Sourceforgehttp://sourceforge.net/projects/pys60

Development Release

Aktuelle Version: 1.9.1 (24.01.2009)

Verfügbar bei maemo.orghttps://garage.maemo.org/projects/pys60

Page 6: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 6

Installation von PyS60Version 1.9.1 unter Windows

1. Herunterladen des Installationspaketes(für Windows: PythonForS60_1.9.1_Setup.exe)

2. Der Installer installiert:

a. PyS60 Application Packager Ensymble

b. Python Dokumentation

c. Symbian Installationsdateien

3. Installation der Python Runtime und der Dependencies auf dem Smartphone

Page 7: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 7

Page 8: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 8

“Hello World”

import appuifwappuifw.app.title = u„Hello World"appuifw.note(u"Hello World!", 'info')

Page 9: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 9

Start des Python-Interpreters

Page 10: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 10

Ausführen von Python-Code (1)Skripte (“Run script”)

Page 11: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 11

Ausführen von Python-Code (2)Interaktive Konsole

Page 12: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 12

Ausführen von Python-Code (3)Bluetooth-Konsole

Page 13: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 13

Bluetooth ConsoleMicrosoft HyperTerminal

Page 14: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 14

Python APITypen und Bibliotheken von PyS60

Alle Built-In-Typen von Python 2.5.1 sind vorhanden

Python Standard Library

Viele der Standard-Module laufen

Python-Extensions für S60: Native C++-Erweiterungen

Built-in Extensions:

e32: API für die Services der Symbian OS Platform

appuifw: API für das UI Application Framework

Dynamisch nachladbare Extensions:

sysinfo, graphics, camera, keycapture, topwindow, gles, glcanvas, sensor, audio, telephone, messaging, inbox, location, positioning, calendar, contacts, e32db, logs

Entwicklung eigener Extensions per Python/C API möglich

Page 15: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 15

Python S60-Module (1)Betriebssystem-Zugriff und -Information

e32

Zugriff auf Betriebssystem-Funktion von Symbian, die nicht durch GUI-Module oder die Python Standard Library abgedeckt sind, z.B. Scheduler, Process-Management, Drive-Liste, (Py-)S60-Versionen

sysinfo

Systeminformationen, z.B. aktiviertes Profil, Batteriestatus, Displaygröße, gesamter und freier Speicherplatz, OS Version, Signalstärke

Page 16: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 16

Python S60-Module (2)Benutzerschnittstelle und Grafik (I)

appuifw

API für das S60 GUI Application Framework

graphics

Grafik- und Bildfunktionen, z.B. Laden, Speichern, Rotieren & Skalieren von Bildern, Erstellen von Grafiken mit Grafikprimitiven und Screenshots

camera

Aufnahme von Fotos und Video, Einstellen der Kamera-Parameter

keycapture

Abfangen von Tastatur-Events

topwindow

Einblenden von Fenstern über Applikationen, dargestellt wird ein graphics.Image

Page 17: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 17

Python S60-Module (3)Benutzerschnittstelle und Grafik (II)

gles

Python API für OpenGL ES 2D/3D Grafik. Siehe OpenGL ES Standard bei Khronos (http://www.khronos.org/opengles/)

glcanvas

UI Steuerung für OpenGL ES Grafik

sensor

Zugriff auf physikalische Sensoren (Bewegung/Acceleration, Antippen/Tapping, Rotation)

Page 18: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 18

Python S60-Module (4)Audio und Kommunikation

audio

Audio-Funktionen, z.B. Aufnahme, Abspielen von Audio-Dateien, Lautstärkeregelung, Sprachausgabe (text-to-speech)

telephone

Telefonie-Funktionen: Wählen, Auflegen und Rückruf

messaging

Senden von SMS und MMS

inbox

Zugriff auf Message-Folder (Inbox, Outbox, Sent und Draft)

location

Abfrage der GSM-Funkzellen-Informationen

positioning

Zugriff auf GPS-Empfänger

Page 19: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 19

Python S60-Module (5)Datenmanagement

contacts

Zugriff auf Adressbuch (ContactDb), z.B. Suchen nach Kontakten, Anzeigen von Gruppen, Ändern von Kontaktinformationen, Import/Export von vCards

calendar

Zugriff auf die Kalender-Datenbank (CalendarDb), z.B. Hinzufügen und Ändern von Terminen, Ereignissen, Geburtstagen und Aufgaben, Behandlung wiederholender Einträge, Import/Export des vCalendar-Formats

e32db

Schnittstelle zur nativen Symbian Datenbank, z.B. Anlegen von Datenbanken und SQL-Abfragen

logs

Zugriff auf Telefon-Protokolle, z.B. Anrufe, SMS, Daten, Faxe, Mails

Page 20: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 20

Struktur von Applikationen (1)Visuelles Layout

Typisches visuelles Layout von S60-Applikationen

TitleTitleNavigation TabsNavigation Tabs

BodyBody

MenuMenu ExitExit

DialogDialog

Page 21: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 21

Struktur von Applikationen (2)Source-Code-Template

1. Import von Modulen

2. Screen Size setzen

3. Applications Menu

4. Exit key handler setzen

(Callback function)

5. Application title setzen

6. Application body

7. Active Objects

8. Main Loop

import appuifwimport e32

appuifw.app.screen = 'normal'

def item1(): print "item1 was selected.”

appuifw.app.menu = [(u"item 1", item1)]

def quit(): appuifw.app.set_exit()

app.exit_key_handler=quit

appuifw.app.title = u'Simple Application'

app_lock = e32.Ao_lock()# starts scheduler -> event processingapp_lock.wait()

Ausführliches Template unter:http://www.mobilenin.com/pys60/resources/app_skeleton_with_mainloop.py

Page 22: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 22

Graphical User Interface (appuifw) Basiselemente

Dialoge

note: popup note

query: Texteingabe mit einem Feld

multi_query: Texteingabe mit zwei Feldern

Menus

popup_menu: Einfaches Menu

Auswahllisten

selection_list: Einfache Listenauswahl (vgl. „Radio buttons“)

multi_selection_list: Mehrfachauswahl (vgl. „Check boxes“)

Page 23: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 23

Graphical User Interface (appuifw) Screen Size

Drei Formate für Applikationen

Rotation der Anzeige ist möglich (portrait, landscape)

normal large full

Page 24: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 24

PackagingEnsymble Developer Utilities

Aufgaben

Erzeugung von SIS-Packages

Merge von SIS-Packages

Signing von Packages

Implementierung

Python-Module und command line tools

GUI „PyS60 Application Packager“ (Qt)

Page 25: Programmierung von Mobiltelefonen mit Python

Folie 25Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

BeispieleBeispiele

Page 26: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 26

Beispiel „Versenden einer SMS“ (1)Source Code

import appuifwimport messaging

data = appuifw.query(u"what are you doing?", "text")

receiver = "+49172940****"

if appuifw.query(u"Send message?", "query") == True: messaging.sms_send(receiver, data)

appuifw.note(u"Message sent.", "info")else: appuifw.note(u"Messages not sent!", "info")

send_sms.py

Page 27: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 27

Beispiel „Versenden einer SMS“ (2)Ausführung

Page 28: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 28

Beispiel „Versenden einer SMS“ (3)Erfolgskontrolle beim Empfänger

Page 29: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 29

Beispiel „SMS-Empfang und Sound“ (1)Funktionen

Empfang von Befehlen per SMS („record“, „stop“, „play“, „clear“)

Aufzeichnen und Abspielen von Audio

sms_sound_demo.py

Page 30: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 30

Beispiel „SMS-Empfang und Sound“ (2)Source Code: Sound-Operationenclass SoundRecorder: filename = 'e:\\boo.wav' # Drive E: is SD card mySound = None def record(self): self.mySound = audio.Sound.open(self.filename) self.mySound.record() def play(self): try: self.mySound = audio.Sound.open(self.filename) self.mySound.play() except: appuifw.note(u"No sound recorded!", "error") def stop(self): if self.mySound: self.mySound.stop() self.mySound.close() def clear(self): self.stop() os.remove(self.filename)

Page 31: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 31

Beispiel „SMS-Empfang und Sound“ (3)Source Code: SMS-Empfangrecorder = SoundRecorder()

def message_received(msg_id): box = inbox.Inbox() sms_text = box.content(msg_id) appuifw.note(u"sms content: " + sms_text , "info") if sms_text == "play": recorder.play() elif sms_text == "record": recorder.record() elif sms_text == "stop": recorder.stop() elif sms_text == "clear": recorder.clear() app_lock.signal()

box = inbox.Inbox()box.bind(message_received)

Page 32: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 32

Beispiel „Kontakte-Datenbank“

import contacts

db = contacts.open() print u"Searching contacts…"found = db.find('guy') # search in name, email, etc.

for guy in found: firstname = guy.find('first_name')[0].value company = guy.find('company_name')[0].value email_address = guy.find('email_address')[0].value print u"%s\n %s\n %s" %

(firstname, company, email_address)

contacts_demo.py

Page 33: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 33

Beispiel „Kamera und File-Upload“ (1)Aufnahme von Bildern

import time

import appuifwimport camera

filename = time.strftime("n95-%Y%m%d%H%M%S.jpg", time.gmtime())

image = camera.take_photo()image.save(filename)appuifw.note(u"Photo saved to %s" % filename, 'info')

if imageToURL(filename) == 200: appuifw.note(u"Photo uploaded successfully.", 'info')else: appuifw.note(u"Photo upload failed!", 'error')

camera_upload.py

Page 34: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 34

Kamera-EinstellungenOptionen von camera.take_photo()

def take_photo( mode='RGB16', size=(640, 480), zoom=0, flash='none', exposure='auto', white_balance='auto'):

Page 35: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 35

Beispiel „Kamera und File-Upload“ (2)Hochladen auf Server mit httplib

import httplib, urllib, base64, os.pathdef imageToURL(aPath): data = open(aPath, 'rb').read() # read binary data of picture encodedData = base64.encodestring(data) # encoded it to base64 headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain",} params = urllib.urlencode({u'fileName':

os.path.split(aPath)[1], u'data':encodedData}) conn = httplib.HTTPConnection("www.onyame.de") conn.request("POST", "/image_uploader.php", params, headers) response = conn.getresponse()

conn.close() return response.status

Quelle: http://wiki.forum.nokia.com/index.php/How_to_upload_a_file_to_server_with_application/x-www-form-urlencoded

Page 36: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 36

Beispiel „Kamera und File-Upload“ (3)Hochladen auf Server

Page 37: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 37

Beispiel „Kamera und File-Upload“ (4)Erfolgskontrolle

http://www.onyame.de/upload/fb.php

Page 38: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 38

Beispiel „Mandelbrot-Menge“ (1)Rahmenprogrammimport e32from appuifw import * app.screen = 'full'app.body = canvas = Canvas()width, height = canvas.size xaxis = width/2yaxis = height/1.5scale = 60iterations = 25 # <<iteration>> lock = e32.Ao_lock()app.exit_key_handler = lock.signallock.wait()

mandelbrot.py

Page 39: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 39

Beispiel „Mandelbrot-Menge“ (2)Iterationsschleifefor y in range(height): for x in range(width): magnitude = 0 z = 0+0j c = complex(float(y-yaxis)/scale,

float(x-xaxis)/scale) for i in range(iterations): z = z**2+c if abs(z) > 2: v = 765*i/iterations if v > 510: color = (255, 255, v%255) elif v > 255: color = (255, v%255, 0) else: color = (v%255, 0, 0) break else: color = (0, 0, 0) canvas.point((x, y), color) e32.ao_yield()

Page 40: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 40

Beispiel „Bewegungssensor“ (1)Abfrage der Beschleunigungssensoren

import sensor

sensors = sensor.sensors()

# Does this device have Accelerator Sensorif sensors.has_key('AccSensor'): SENSOR_ACC = True sensor_data = sensors['AccSensor'] sensor_acc = sensor.Sensor(sensor_data['id'], sensor_data['category']) sensor_acc.connect(handle_sensor_raw)

def handle_sensor_raw(a_data): if a_data.has_key('data_1'): acc_data_1 = a_data['data_1'] acc_data_2 = a_data['data_2'] acc_data_3 = a_data['data_3']

Page 41: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 41

Beispiel „Bewegungssensor“ (2)Graphische Aufbereitung: „Sensor Analyzer“

http://jouni.miettunen.googlepages.com/sensoranalyzer

Page 42: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 42

Beispiel „Location Based Service“Auswertung der GSM Cell ID

Send SMS to someone if caretan cell is nearimport location

HOME_CELL_ID = u"98521779"WIFE = u"+49173247****“

entries = [u"freu mich auf Dich!", u"hab Hunger.", u"hab schlechte Laune."]listbox = appuifw.Listbox(entries, shout)

home = 0while home == 0: country, provider, lac, cell = location.gsm_location() if (cell== HOME_CELL_ID): home = 1 message = u"Bin gleich zuhause und %s" % mood messaging.sms_send(WIFE, message)

cell_id_demo.py

Page 43: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 43

Beispiel „OpenGL“

http://tinyurl.com/pys60cube

Page 44: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 44

Links

Python for S60

http://opensource.nokia.com/projects/pythonfors60/index.html

http://sourceforge.net/projects/pys60 (Version 1.4.x)

https://garage.maemo.org/projects/pys60 (Version 1.9.x)

http://wiki.opensource.nokia.com/projects/Python_for_S60

Symbian S60

http://www.s60.com

Page 45: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 45

Anlaufstellen für Hilfe

Python for S60 discussion board at Forum Nokia

http://discussion.forum.nokia.com/forum/forumdisplay.php?forumid=102

IRC channel #pys60 bei Freenode.net

irc://chat.freenode.net/pys60

Google Group Python for S60

http://groups.google.com/group/py4S60

Google Group PythonS60

http://groups.google.com/group/pythons60

Beispiele / Code-Snippets

http://wiki.forum.nokia.com/index.php/Category:Python#Code_Examples_for_Python

http://snippets.dzone.com/tags/series60

Page 46: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 46

Python für andere mobile Geräte

Übersicht Python for Mobile Devices

http://www.awaretek.com/pymo.html

Page 47: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 47

Literatur

Jürgen Scheible, Ville Tuulos.Mobile Python: Rapid Prototyping of Applications on the Mobile Platform

http://www.mobilepythonbook.org

Page 48: Programmierung von Mobiltelefonen mit Python

Python User Group Köln > A. Schreiber > Programmierung von Mobiltelefonen mit Python > 11.02.2009

Folie 48

Fragen?Fragen?