1 - Erste Schritte¶
Wir möchten hier an einem einfachen Beispiel zeigen, wie man mit Tinkerforge arbeitet. Wir schreiben ein kleines Programm, welches die Temperatur misst und dann jede Sekunde ausgibt. Dazu benötigen wir die folgenden Komponenten:
- Master-Brick
- Temperature-Bricklet
- 7pol-10pol-Verbindungskabel zum verbinden der Master-Brick mit dem Bricklet
- Mini-USB-Kabel zum Verbinden der Master-Brick mit dem Computer
Nun verbindet man die Master-Brick mit dem Temperature-Bricklet und schliesst die Master-Brick dann mit dem USB-Kabel an den Computer an.
Phase 1 - Testen¶
Mit dem Programm «Brick Viewer» kann man die Bausteine sehr schnell testen und bei komplizierteren Bausteinen die richtigen Einstellungen suchen:
Bricks und Bricklets mit dem Brick Viewer Testen
Verbinden
Nach dem Starten des «Brick Viewer» sollte man das folgenden Fenster sehen:
Bei Host und Port muss mann üblicherweise nichts ändern. Wenn man auf Connect klickt, werden alle mit dem Computer verbundenen Bauteile erkannt.
Bauteile testen
Man kann nun auf eins der angezeigten Bricks oder Bricklets klicken. Es werden dann, ja nach Bauteil, Messwerte oder mögliche Einstellungen angezeigt. In unserem Fall wird eine Temperaturmessung gestartet und graphisch dargestellt.
Für die Programmierung wichtig ist die UID des Bricklets, welche man rechts oben findet. Die UID ist die Adresse, mit der man das Bricklets dann ansteuert. In diesem Fall hat das Bricklets die UID KF7.
Phase 2 - Programmieren¶
Ein einfaches Programm, welches die Temperatur einmal ausliest, sieht etwa so aus:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Adressierung
HOST = "localhost" # (1)
PORT = 4223
temperatureBrickletUID = "KF7" # UID aus dem Brick Viewer
# Import der Funktionen
from tinkerforge.ip_connection import IPConnection
from tinkerforge.bricklet_temperature_v2 import BrickletTemperatureV2
# Verbindung herstellen
ipcon = IPConnection()
tempBricklet = BrickletTemperatureV2(temperatureBrickletUID, ipcon)
ipcon.connect(HOST, PORT)
# Das Hauptprogramm
temperature = tempBricklet.get_temperature()
print("aktuelle Temperatur: " + str(temperature/100.0) + " °C")
# Programm wird beendet, wenn eine beliebige Taste gedrückt wird
input("Press key to exit\n")
ipcon.disconnect()
-
Das sind die Parameter, welche wir kennen müssen, um das Temperature-Bricklet anzusteuern:
HOST = "localhost"
bedeutet, dass wir die Master-Brick per USB am Computer haben. Das ist der Normalfall. Falls man die Master-Brick mit der WLAN-Extension erweitert hat, müsste man hier deren IP angeben.PORT = 4223
gibt an, auf welchem Port die Master-Brick auf Befehle hört. Wir werden hier NIE was anderes brauchen!- Jedes Bricklet und jede Brick hat eine eigene UID! Mit
temperatureBrickletUID = "KF7"
wird diese für die spätere Verwendung unter der VariabletemperatureBrickletUID
abgespeichert.
simple.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Adressierung
HOST = "localhost" # (1)
PORT = 4223
temperatureBrickletUID = "KF7" # UID aus dem Brick Viewer
# Import der Funktionen
from tinkerforge.ip_connection import IPConnection
from tinkerforge.bricklet_temperature_v2 import BrickletTemperatureV2
# Verbindung herstellen
ipcon = IPConnection()
tempBricklet = BrickletTemperatureV2(temperatureBrickletUID, ipcon)
ipcon.connect(HOST, PORT)
# Das Hauptprogramm
temperature = tempBricklet.get_temperature()
print("aktuelle Temperatur: " + str(temperature/100.0) + " °C")
# Programm wird beendet, wenn eine beliebige Taste gedrückt wird
input("Press key to exit\n")
ipcon.disconnect()
-
Das sind die Parameter, welche wir kennen müssen, um das Temperature-Bricklet anzusteuern:
HOST = "localhost"
bedeutet, dass wir die Master-Brick per USB am Computer haben. Das ist der Normalfall. Falls man die Master-Brick mit der WLAN-Extension erweitert hat, müsste man hier deren IP angeben.PORT = 4223
gibt an, auf welchem Port die Master-Brick auf Befehle hört. Wir werden hier NIE was anderes brauchen!- Jedes Bricklet und jede Brick hat eine eigene UID! Mit
temperatureBrickletUID = "KF7"
wird diese für die spätere Verwendung unter der VariabletemperatureBrickletUID
abgespeichert.
Wir gehen das Programm jetzt mal schrittweise durch:
1. Adressierung
# Adressierung
HOST = "localhost"
PORT = 4223
temperatureBrickletUID = "KF7" # UID aus dem Brick Viewer
HOST = "localhost"
bedeutet, dass wir die Master-Brick per USB am Computer haben. Das ist der Normalfall. Falls man die Master-Brick mit der WLAN-Extension erweitert hat, müsste man hier deren IP angeben.PORT = 4223
gibt an, auf welchem Port die Master-Brick auf Befehle hört. Wir werden hier NIE was anderes brauchen!- Jedes Bricklet und jede Brick hat eine eigene UID! Mit
temperatureBrickletUID = "KF7"
wird diese für die spätere Verwendung unter der VariabletemperatureBrickletUID
abgespeichert.
2. Import der Funktionen
# Import der Funktionen
from tinkerforge.ip_connection import IPConnection
from tinkerforge.bricklet_temperature_v2 import BrickletTemperatureV2
from tinkerforge.ip_connection import IPConnection
wird für jedes Tinkerforge-Programm benötigt.from tinkerforge.bricklet_temperature_v2 import BrickletTemperatureV2
importiert die Funktionen des Temperature-Bricklet. Hier können dann auch noch weitere Importierungen von anderen Bricklets folgen.
3. Verbindung herstellen
# Verbindung herstellen
ipcon = IPConnection()
tempBricklet = BrickletTemperatureV2(temperatureBrickletUID, ipcon)
ipcon.connect(HOST, PORT)
- Mit
ipcon = IPConnection()
wird eine neue Verbindung erzeugt tempBricklet = BrickletTemperatureV2(temperatureBrickletUID, ipcon)
erstellt ein ObjekttempBricklet
, mit welchem dann im Hauptprogramm auf das Temperature-Bricklet zugegriffen wird, um die Temperatur auszulesen.ipcon.connect(HOST, PORT)
stellt die Verbindung dann zum Bricklet her. Das Programm kann ab jetzt auf das Bricklet zugreifen.
4. Funktionen oder Callbacks im Hauptprogramm
# Das Hauptprogramm
temperature = tempBricklet.get_temperature()
print("aktuelle Temperatur: " + str(temperature/100.0) + " °C")
# Programm wird beendet, wenn eine beliebige Taste gedrückt wird
input("Press key to exit\n")
ipcon.disconnect()
- Die Temperature wird mit
tempBricklet.get_temperature()
ausgelesen und in der Variabletemperature
abgespeichert. print("Temperature: " + str(temperature/100.0) + " °C")
gibt den Wert vontemperature
dann im Terminal aus. Durch 100 wird geteilt, weil der Sensor auf 0.01 °C messen kann, es aber einfacher ist, ganze Zahlen zu übergeben.tempBricklet.get_temperature()
gibt also die Temperatur immer in der Einheit 1/100 °C zurück. 2210 enspricht also 22.10 °C.ipcon.disconnect()
beendet die Verbindung zu allen Tinkerforge-Bauteilen. Danach ist das Programm fertig
Zusammenfassung
Um mit einem Tinkerforge-Bauteil zu arbeitenm muss man immer die folgenden Code-Fragmente einbauen:
- Adressierung: Ganz am Anfang des Programms werden jeweils die UIDs der Bauteile eingegeben. Die UIDs können mit dem BrickViewer aus Phase 1 ermittelt werden
- Import der Funktionen: Jedes Bricklet oder jede Brick hat ihre eigenen Funktionen, mit denen sie angesprochen oder ausgelesen werden, diese werden nach der Adressierung importiert.
- Verbindung herstellen: Als letztes wird im Programm eine Verbindung hergestellt.
- Funktionen oder Callbacks im Hauptprogramm: Mit Hilfe von Auslesefunktionen können die Bricks oder Bricklets im Hauptprogramm angesprochen/ausgelesen werden. Vielfach möchte man aber ein Auslesung regelmässig oder nur unter bestimmten Umständen durchführen. Dazu eignen sich die speziell dafür entwickelten Callback-Funktionen. Auf diese wird im nächsten Punkt der Einleitung 2 - Callbackfunktionen eingegangen.
Beim Menu links unter Bricks oder Bricklets findet man alle Bauteile, welche wir im Makerspace haben. Zum Beispiel für das Temperature-Bricklet. Auf den jeweiligen Seiten sind die wichtigen Befehle, um die obigen Punkte 1 - 4 auszuführen, für all diese Bauteile aufgeführt. Dort findest man ebenfalls einen Link zur Tinkerforge-Seite, auf welcher tiefer gehende Informationen und Beispielprogramme zu den Bauteilen zu finden sind.