Python Online
Home    
buttons

7. FERNSTEUERUNG VIA BLUETOOTH

 

 

DU LERNST HIER...

 

wie du eine Bluetooth-Kommunikation zwischen zwei Bluetooth-fähigen Robotern aufbauen kannst und wie du den Callibot fernsteuern kannst.

 

 

SENDEN UND EMPFANGEN

 

Das im TigerJython integrierte Modul radio ermöglicht die Programmierung einfacher Anwendungen, bei welchen zwei Roboter miteinander über das Bluetooth kommunizieren. Dabei kann jeder Roboter gleichzeitig ein Sender und ein Empfänger sein. Zuerst schalten beide Roboter mit radio.on() das Sende-/Empfangsgerät ein. Dabei wird eine Bluetooth-Verbindung erstellt. Nachfolgend kann jeder mit radio.send(msg) eine Message (als String) an den anderen Roboter senden, die dort in einen Empfangsbuffer gespeichert wird.  Mit radio.receive() holst du die Message und der Buffer wird gelöscht.

 

 

MUSTERBEISPIELE

 
Beispiel 1: Button-Klick auf Calliope bewirkt eine Pfeilanzeige auf Callibot

Beim Drücken des Buttons A auf dem Calliope wird die Massage "left" geschickt. Der Callibot empfängt diese Massage und zeigt auf seinem Display ein Links-Pfeil an. Beim Drücken des Buttons B auf dem Calliope wird die Message "right" geschickt und der Callibot zeigt ein Rechts-Pfeil an. Da jeder Calliope gleichzeitig ein Sender und Empfänger ist, kannst du umgekehrt mit Drücken der Buttons auf dem Callibot, die Pfeilanzeige auf dem Calliope bewirken.

 Sender Empfänger

Lade das Programm zuerst auf den Callibot und schalte die Stromversorgung ein. Dann kannst du das USB-Kabel wegnehmen und es für die Übertragung und Programmausführung auf dem zweiten Calliope verwenden.

Mit radio.on() wird die Verbindung aufgebaut. Danach wartet in einer endlosen Schleife jedes Gerät, ob ein Button gedrück wird (dann sendet es eine Message), oder ob es eine Message erhält (dann führt es den entsprechenden Befehl aus).
Die Zeile display.show(Image.ARROW_E) bewirkt die Anzeige eines Linkspfeils.

Programm:

import radio
from calliope_mini import *

radio.on()
while True:
    if button_a.was_pressed():
        radio.send("left")
    elif button_b.was_pressed():
        radio.send("right")
    rec = radio.receive()
    if rec != None:
        if rec == "left":
            display.show(Image.ARROW_E)
        elif rec == "right":
            display.show(Image.ARROW_W)
    sleep(10)


Beispiel 2: Callibot mit einem zweiten Calliope steuern

Da du den fahrenden Callibot-Roboter steuern willst, verwendest du in diesem Beispiel den Calliope als Sender und den Callibot als Empfänger. Da der Sender nicht alle Callibot-Befehle braucht und umgekehrt, ist es sinnvoll, zwei verschiedene Programme zu verwenden.

Die Steuerung erfolgt wie folgt:

  • Button A gedrückt: links fahren (Zustand LEFT)
  • Button B gedrückt: rechts fahren (Zustand RIGHT)
  • Beide Buttons gedrückt: geradeaus fahren (Zustand FORWARD)
  • Kein Button gedrückt: anhalten (Zustand STOP)

Die sogenannte Zustandsprogrammierung ist in diesem Beispiel sehr sinnvoll. Es hat keinen Sinn alle 10 Millisekunden eine Message "FORWARD" zu senden, wenn der andere Roboter bereits geradeaus fährt. Eine Massage wird nur dann geschickt, wenn der Zustand geändert hat (oldState != state).

Programm für den Calliope:

import radio
from calliope_mini import *

radio.on()
display.show(Image.YES)
state = "STOP"
oldState = ""
while True:
    if button_a.is_pressed() and button_b.is_pressed():
        state = "FORWARD" 
    elif button_a.is_pressed():
        state = "LEFT"
    elif button_b.is_pressed():
        state = "RIGHT"
    else:
        state = "STOP"
    if oldState != state:
        radio.send(state)
        oldState = state   
    sleep(10)

Auf dem Callibot wird nach dem Programmstart ein "Ok"-Zeichen angezeigt, damit du weisst, dass er bereits ist. Danach wartet er auf die Befehle, die er via Bluetooth empfängt. Falls er Message "FORWARD" erhält, führt er den Befehl forward() aus und bleibt in diesem Zustand, bis er eine neue Message erhält. Mit "LEFT" bewegt er sich auf einem Linksbogen, mit "STOP" hält er an.

Programm für den Callibot:

from callibot import *
from calliope_mini import *
import radio

radio.on()
display.show(Image.YES)
while True:
    rec = radio.receive()    
    if rec == "FORWARD":
        forward()    
    elif rec == "LEFT":
        leftArc(0.2)
    elif rec == "RIGHT":
        rightArc(0.2) 
    elif rec == "STOP":
        stop()     
    sleep(10)

Damit du dich mit dem Steuergerät frei bewegen kannst, kannst du nach dem Programmdownload für Stromversorgung des Calliope eine Powerbank oder eine Andere Smartphone-Ladequelle verwenden.

 

 

MERKE DIR...

 

Damit du die Befehle für die Bluetooth-Kommunikation verwenden kannst, musst du das Modul radio importieren. Mit radio.on() wird die Verbindung aufgebaut. Mit radio.send(msg) wird eine Message verschickt, mit radio.receive() wird sie am anderen Gerät empfangen und in einem Empfangsbuffer so lange gespeichert, bis man sie abgeholt hat.

 

 

ZUM SELBST LÖSEN

 

 

1.

Mit Klick auf den Button A auf dem Calliope wird auf dem Callibot die Melodie "JUMP_UP" abgespielt. Mit Klick auf den Button B wird die Melodie "JUMP_DOWN" abgespielt..

 

2.

Mit Klick auf den Button A wird der Roboter in die Vorwärtsbewegung versetzt und auf dem Display erscheint ein Vorwärts-Pfeil, mit Klick auf den Button B hält der Roboter an und auf dem Display erscheint das Image NO. Damit du siehst, ob die beide Geräte bereits sind, soll auf beiden nach dem Start das Image YES angezeigt werden.

3.

Mit Hilfe eines zweiten Calliope sollst du den Callibot durch einen Parcours steuern, indem du ihm mit Klick auf die Buttons A und B mitteilst, ob er geradeaus fahren oder links bzw. rechts abbiegen soll.