HomeTurtlegrafikGPanelRobotik WebTigerPython
 Python - Online
bluetooth
Deutsch   English   

7. BLUETOOTH-KOMMUNIKATION

 

 

DU LERNST HIER...

 

wie zwei Computer über Bluetooth miteinander Informationen austauschen.

 

 

DRAHTLOSE KOMMUNIKATION

 

Bei der Kommunikation zwischen zwei micro:bits (auch Knoten genannt) ist jeder der Knoten gleichzeitig ein Sender und ein Empfänger. Zuerst schalten beide Knoten mit radio.on() das Sende-/Empfangsgerät ein. Dabei wird eine drahtlose Bluetooth-Verbindung erstellt. Nachfolgend kann jeder der Knoten mit radio.send(msg) eine Message (als String) an den anderen Knoten senden, die dort zuerst in einen Empfangsbuffer wie in einer Warteschlange gespeichert wird.  Mit radio.receive() holst du die "älteste" Message, die dann im Buffer gelöscht wird.

Knoten A und Knoten B haben radio.on() aufgerufen:



Knoten A hat send('guten') aufgerufen:



Knoten A hat send('Tag') aufgerufen:



Knoten B hat msg = receive() aufgerufen. msg enthält 'guten':

 

 

MUSTERBEISPIEL

 

Du erstellst mit einer anderen Person (mit einem zweiten micro:bit) eine drahtlose Kommunikation, um Informationen mit Punkten und Strichen (wie im Morsecode) auszutauschen. Wenn man auf dem einen micro:bit den Button A klickt, so leuchtet beim anderen die mittlere LED des Displays während ½ s auf (wie ein Punkt), klickt man auf Button B so leuchten drei LEDs auf  (wie ein Strich).

 
Knoten A
 
Knoten B
 
 



 
   

Der zentrale Teil des Programms besteht aus einer Endlosschleife, in der zuerst das Senden und dann das Empfangen geregelt wird. Wenn A geklickt wird, überträgst du die Message "p",  (kurz für "point"), wenn B geklickt wird, überträgst du "d" (kurz für "dash").

Nachfolgend holst du mit receive() den ältesten Eintrag in der Warteschlage. (Falls diese leer ist, kriegst du den speziellen Wert None.) Je nachdem, ob du "p" oder "d" erhalten hast, führst du die entsprechende Aktion aus.

Das folgende Programm muss auf beiden micro:bits laufen.

Programm:

import radio
from microbit import *

point = Image('00000:00000:00900:00000:00000')
dash = Image('00000:00000:09990:00000:00000')

def draw(img):
    display.show(img)
    sleep(500)
    display.clear()
    sleep(500)

radio.on()
while True:
    if button_a.was_pressed():
        radio.send("p")
    elif button_b.was_pressed():
        radio.send("d")
    rec = radio.receive()
    if rec != None:
        if rec == "p":
            draw(point)
        elif rec == "d":
            draw(dash)
    sleep(10)
► In Zwischenablage kopieren

Echte Morsestationen arbeiten fast immer mit kurzen und langen Tönen. Dazu musst du einen Kopfhörer (oder wie im Kapitel Sound gezeigt einen aktiven Lautsprecher) anschliessen. Dein Programm soll jetzt beim Empfänger den Ton einschalten, solange der Button A gedrückt ist. Sobald der Button gedrückt wird, sendest du dem Empfänger die Message "d" (für "down"), wenn du den Button loslässt, so sendest du "u" (für "up"). Dazu musst du eine boolesche Variable down einführen, wo du dir merkst, ob der Button gedrückt oder losgelassen ist.

Orientiere dich über den Morsecode und versuche einige kurzen Meldungen (z.B. "SOS") auszutauschen.

 

 

MERKE DIR...

 

dass der Sender mit send(msg) eine Message sendet, die dann im Empfangsbuffer der Reihe nach gespeichert wird, bis der Empfänger die "älteste" mit msg = receive() im Buffer abholt.

 

 

ZUM SELBST LÖSEN

 

 

1.

Modifiziere das Musterprogramm so, dass beim Drücken des Buttons A laufend Punkte und beim Drücken von B Striche (3x so lang wie Punkte) gesendet werden.


2.
a) Schreibe ein Programm, das die aktuelle Neigung (in einer Richtung) des micro:bit einem Empfängerknoten mitteilt, der den Wert im Terminal ausschreibt.

b) Schreibe den Wert beim Empfänger auf dem Display aus (skaliert auf eine Zahl zwischen 0 und 9)
 

 

   
7-1
Fachliche Hinweise:

7-2
Fachliche Hinweise:

Bei dieser Art von Rechnerkommunikation sind beide Knoten gleichgestellt. Üblicherweise findet aber die Kommunikation gemäss dem Client-Server-Prinzip statt, bei dem der Serverknoten zuerst auf den Anruf eines Clientknotens wartet und dann entscheidet, ob er mit diesem kommunizieren will.