Homepage Wiki Forum Buy

API mit Python

Aus GNUBLIN

Inhaltsverzeichnis


Wir haben unsere API jetzt auch in Python umgesetzt. In diesem Artikel zeigen wir, wie man die API in Python auf dem Gnublin und auf dem Raspberry Pi nutzen kann

Die neue Dokumentation der API findet man unter http://gnublin.org/gnublin-api/doc/html_de/index.html.

Mit Gnublin

Vorbereitungen

Bevor man die API in Python nutzen kann laden wir uns die folgenden beiden Dateien herunter:

root@gnublin:~$ wget https://raw.github.com/embeddedprojects/gnublin-api/master/python-module/gnublin/gnublin.py --no-check-certificate
root@gnublin:~$ wget https://github.com/embeddedprojects/gnublin-api/raw/master/python-module/gnublin/_gnublin.so --no-check-certificate

Die beiden Dateien holen wir dann direkt auf unser Gnublin.

Verwendung

Auf dem Gnublin wechselt man nun in den Ordner, wo die beiden Datien liegen und startet die Python Konsole mit dem Aufruf:

root@gnublin:~# python

als nächstes importieren wir das Python-Modul:

>>> import gnublin

wollen wir nun als Beispiel unsere GPIOs in python ansteuern, müssen wir zunächst ein GPIO Objekt erstellen:

>> gpio = gnublin.gnublin_gpio()

Ist das Objekt erstellt, kann man wie aus der C++ API gewohnt auf die Methoden der Klasse zugreifen:

Beispiel LED an/ausschalten:

>>> gpio.pinMode(3,'out')
1
>>> gpio.digitalWrite(3,1)
1
>>> gpio.digitalWrite(3,0)
1
>>>

Beispiel Programm LED blinken

Dieses Programm lässt die LED auf dem Gnublin blinken. Dazu legen wir eine Datei namens LED-blink.py an und schreiben folgenden Code in die Datei:

  1. import gnublin
  2. import time
  3. gpio = gnublin.gnublin_gpio()
  4. gpio.pinMode(3,'out')
  5.  
  6. while True:
  7. 	gpio.digitalWrite(3,1)
  8. 	time.sleep(0.5)
  9. 	gpio.digitalWrite(3,0)
  10. 	time.sleep(0.5)

Das Programm wird wie folgt ausgeführt:

root@gnublin:~# python LED-blink.py

Wollen wir das Programm beenden, drücken wir

STRG + C

Mit RaspberryPi

Die folgende Anleitung wurde unter Raspbian "wheezy" getestet! Siehe http://www.raspberrypi.org/downloads unter 'Raw Images'

Vorbereitungen

Das RaspberryPi muss gestartet sein und eine Verbindung in das Internet haben. Um die API mit Python nutzen zu können brauchen wir noch ein paar Programme. Wir installieren diese mit dem folgenden Befehl:

pi@raspberrypi ~ $ sudo apt-get install git swig2.0 python-dev

Jetzt kann man das Repository abholen:

pi@raspberrypi ~ $ git clone https://github.com/embeddedprojects/gnublin-api.git

Wechselt in das Verzeichnis:

pi@raspberrypi ~ $ cd gnublin-api

Bevor man die API übersetzen kann, muss man angeben, das die API auf einem RaspbberryPi laufen soll. Dazu ändert man in der Datei API-config.mk zwei Zeilen ab:

Folgenden Zeilen müssen auskommentiert werden: 2, 12, 17. Dafür muss bei folgenden zeilen das # am Anfang entfernt werden: 6, 14, 18. Die API-config.mk Datei sieht dann wie folgt aus:

  1. #Crosscompiler for Gnublin
  2. #CXX := arm-linux-gnueabi-g++
  3. #Crosscompiler for Raspberry Pi:
  4. #CXX := arm-linux-gnueabihf-g++
  5. #Compiler for onboard compilation:
  6. CXX := g++
  7.  
  8. #Compilerflags:
  9. CXXFLAGS = -Wall
  10.  
  11. #Architecture for gnublin:
  12. #Architecture = armel
  13. #Architecture for raspberryPi:
  14. Architecture = armhf
  15.  
  16. #Define which Board you want:
  17. #BOARD := GNUBLIN
  18. BOARD := RASPBERRY_PI
  19.  
  20. #DO NOT EDIT BEYOND THIS LINE!
  21. BOARDDEF := -DBOARD=$(BOARD)

Nun kann man die API übersetzen und die Python Module erstellen:

pi@raspberrypi ~ $ make python-module

Die Warnings können ignoriert werden:

Warning 314: 'print' is a python keyword, renaming to '_print'
Warning 314: 'print' is a python keyword, renaming to '_print'
Warning 314: 'print' is a python keyword, renaming to '_print'

Die API braucht folgende Treiber:

pi@raspberrypi ~ $ sudo modprobe spi-bcm2708
pi@raspberrypi ~ $ sudo modprobe i2c-bcm2708
pi@raspberrypi ~ $ sudo modprobe i2c-dev


Diese befinden sich in der aktuellen RaspberryPi Version.

Optional kann man die Treiber fest in die Datei /etc/modules eintragen, diese werden dann beim booten automatisch geladen:

spi-bcm2708
i2c-bcm2708
i2c-dev

Pro Zeile ein Modul. Die Treiber werden allerdings erst bei einem neustart geladen!

Verwendung

Auf dem RaspberryPi startet man die Python Konsole mit dem Aufruf:

root@gnublin:~# sudo python

sudo ist nötig, damit wir auf die Gerätedateien wie i2c, gpio, usw zugreifen dürfen

als nächstes importieren wir das Python-Modul:

>>> import gnublin

wollen wir nun als Beispiel den Temperatursensor in python ansteuern, müssen wir zunächst ein Objekt erstellen:

>> lm75 = gnublin.gnublin_module_lm75()

Ist das Objekt erstellt, kann man wie aus der C++ API gewohnt auf die Methoden der Klasse zugreifen:

Beispiel Temperatur auslesen:

>>> lm75.getTemp()
23
>>> lm75.getTempFloat()
23.125
>>>

Eigene Python-Programme können wir so aufrufen:

pi@raspberrypi ~ $ python MeinProgramm.py
In anderen Sprachen