bluetooth

7. BLUETOOTH-KOMMUNIKATION

 

 

DU LERNST HIER...

 

wie zwei Computer über Bluetooth miteinander Informationen austauschen.

 

 

DRAHTLOSE KOMMUNIKATION

 

Bei der Kommunikation zwischen zwei Calliope (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':

 

 

MUSTERBEISPIELE

 

Du erstellst mit einer anderen Person eine drahtlose Kommunikation, um Informationen mit Punkten und Strichen (wie im Morsecode ) auszutauschen. Wenn man auf dem einen Calliope 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.

import radio
from calliope_mini 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. Dein Programm soll beim Empfänger den Ton einschalten, solange der Button A gedrückt ist. Dazu sendest du dem Empfänger die Message "d" (für "down"), wenn der Button gedrückt wird. Wenn du den Button loslässt, so sendest du "u" (für "up"). Dazu musst du eine boolesche Variable down einführen, mit der du dir merkst, ob der Button gedrückt oder losgelassen ist.

import radio
from calliope_mini import *
import music

radio.on()
down = False
while True:
    if button_a.is_pressed() and not down:
        down = True
        radio.send("d")
    elif not button_a.is_pressed() and down:
        down = False
        radio.send("u")
    rec = radio.receive()
    if rec != None:
        if rec == "d":
            music.pitch(500, 1000000, wait = False)
        elif rec == "u":
            music.stop()
    sleep(10)
► In Zwischenablage kopieren

 

 

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.

Orientiere dich über den Morsecode und versuche mit dem Programm im ersten Musterbeispiel einige kurzen Meldungen auszutauschen.


2.
a) Schreibe ein Programm, das die aktuelle Neigung (in einer Richtung) des Calliope 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.

7-3
Fachliche Hinweise:

Es handelt sich um eine sogenannte "automatische Morsetaste", wie sie als Elbug bei Morsestationen weit verbreitet ist.