Python - Online
HomeTurtlegrafikGPanelRobotikDatenbanken
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 Roboter 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 micro:bit bewirkt eine Pfeilanzeige auf mbRobot

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

 
 Sender Empfänger

Lade das Programm zuerst auf den mbRobot und schalte die Stromversorgung ein. Dann kannst du das USB-Kabel wegnehmen und es für die Übertragung und Programmausführung auf dem zweiten micro:bit 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:

from microbit import *
import radio

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)
► In Zwischenablage kopieren


Beispiel 2: Roboter mit einem zweiten micro:bit steuern

Da du den fahrenden Roboter steuern willst, verwendest du in diesem Beispiel den micro:bit als Sender und den mbRobot als Empfänger. Da der Sender nicht alle mbRobot-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 Sender:

from microbit import *
import radio

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)
► In Zwischenablage kopieren

Auf dem mbRobot 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 Empfänger:

Programm für den Empfänger:

from mbRobot import *
from microbit import *
import radio

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

Damit du dich mit dem Steuergerät frei bewegen kannst, kannst du nach dem Programmdownload für Stromversorgung des micro:bits eine Powerbank 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 micro:bit wird auf dem mbRobot die Melodie "JUMP_UP" abgespielt. Mit Klick auf den Button B wird die Melodie "JUMP_DOWN" abgespielt..

 

2.

Mit Klick auf den Button A auf dem micro:bit 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 micro:bits sollst du den mbRobot 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, oder anhalten soll.