Make Magazin 5/2018
S. 62
Make: Family
Aufmacherbild

Verschlüsselter Bluetooth-Chat

Manchmal hat man Geheimnisse, und das ist gut so. Mit der Bluetooth-Funkfunktion des Calliope mini kannst du deinen Freundinnen und Freunden verschlüsselte Nachrichten senden. Wie das geht und wie man die Botschaften wieder entschlüsselt, erfährst du hier.

Wenn du geheime Nachrichten versendet willst, brauchst du einen Sender, der die Nachricht auf eine bestimmte Art und Weise verschlüsselt und einen Empfänger, der die geheime Botschaft wieder entschlüsselt. Sender und Empfänger haben also verschiedene Aufgaben – daher musst du verschiedene Programme für sie schreiben.

Willst du zum Beispiel die Nachricht „Treffen um drei“ schicken, so wählst du im Sende-Programm mit den Tasten A und B aus dem Alphabet das „T“ aus. Auf der LED-Matrix des Calliope werden dir die Buchstaben angezeigt. Hast du den richtigen Buchstaben gefunden, dann legst du einen Finger auf Pin 1 und einen zweiten (der gleichen Hand) auf den Minuspol des Mikrocontrollers. Dein Calliope sendet den Buchstaben jetzt verschlüsselt an den Empfänger-Calliope. Auf dessen Display wird ein anderer Buchstabe angezeigt. Deine Freundin oder dein Freund am Empfänger entschlüsselt nun den empfangenen Buchstaben.

Wie funktioniert die Verschlüsselung?

Bevor der von dir ausgewählte Buchstabe versendet wird, springt das Sender-Programm um eine festgelegte Anzahl von Stellen vor oder zurück im Alphabet und sendet den Buchstaben, bei dem es ankommt. Wenn du die Verschiebung um einen Buchstaben nach vorne hinterlegst, so wird, wenn du ein A eingibst, ein B gesendet. Im Empfänger-Programm wird das B angezeigt. Schreibst Du zum Beispiel das Wort „Hallo“, dann kommen auf dem Empfänger-Calliope die Buchstaben „Ibmmp“ an. Jetzt kommt die in der Kurzinfo erwähnte Cäsar-Scheibe ins Spiel. Sie heißt so, weil mit dieser Methode – so die Legende – bereits Julius Cäsar militärische Nachrichten und Liebesbriefe verschlüsselt hat.

Die Cäsar-Scheibe besteht eigentlich aus zwei unterschiedlich großen Scheiben, auf denen je einmal das Alphabet im Kreis angeordnet ist. Zuerst stehen auf beiden Scheiben die gleichen Buchstaben untereinander. Um die Nachricht zu entschlüsseln, musst du die kleinere Scheibe um so viele Stellen nach links drehen, wie das Verschlüsselungsprogramm vorgibt. Der innere Buchstabe ist der, den der Empfänger-Calliope anzeigt, der äußere der, den du am Sende-Calliope ausgewählt hast. Eine Vorlage zum Ausdrucken findest du in den Links zum Artikel.

Das Alphabet speichern und aufrufen

Um das gesamte Alphabet auf dem Sende-Calliope zu speichern, musst du jeden Buchstaben einzeln hinterlegen. Damit du dann mit den Tasten A und B die Buchstaben auswählen kannst, brauchst du zwei Variablen. Zuerst hinterlegst du das Alphabet als Variable vom Typ „Liste Zeichenkette“. Diese Art von Variable speichert, vereinfacht gesagt, gleichartige Daten an einem Ort. Du kannst dir die Liste zum Beispiel wie einen hohen Schubladenschrank vorstellen – in jede Schublade sortierst du einen Buchstaben. Wenn du einen Buchstaben suchst, musst du nur in den Schubladen nachsehen. Im Chat-Programm rufst du die Elemente der Liste mit den Tasten A und B nacheinander auf. Mit A klickst du dich rückwärts durch die Liste (beziehungsweise das Alphabet) und mit der Taste B vorwärts. Die Buchstaben werden dann auf dem LED-Display angezeigt.

Dass dein Mikrocontroller das Alphabet nicht beherrscht, weißt du jetzt schon. Schließlich müsstest du es sonst nicht als Liste anlegen. Wie sagst du dann aber den Tasten A und B, zu welchem Buchstaben sie als nächstes springen sollen? Ganz einfach: Du gibst den Schubladen beziehungsweise den Listenelementen Namen, die das Programm versteht. Dazu legst du eine zweite Variable vom Typ „Zahl“ an und nennst sie „Buchstabennummer“. Dass nach der 1 die 2 kommt, weiß nämlich jeder Code. Die Variable Buchstabennummer ist also der Name der Schublade (zum Beispiel 2) und der jeweilige Buchstabe der Inhalt (bei Schublade 2 das B).

Das Programm für den Sender

Variable vom Typ Liste im NEPO-Editor anlegen

Für diesen Code musst du im Experten-Modus des Nepo-Editors arbeiten. Klicke dazu oben links auf den Stern mit der 2 daneben. Eine neue Variable erstellst du immer durch Klick auf das Pluszeichen im Startblock. Nenne sie „Alphabet“ und wähle als Typ „Liste Zeichenkette“ aus, indem du auf das kleine rote Dreieck klickst. Daraufhin erscheint ein Listen-Block als Variablendefinition. Diesen Listen-Block füllst du mit den Buchstaben des Alphabets. Weil Listen in der Informatik mit der Position 0 beginnen, haben wir uns dafür entschieden, an dieser Position einen Unterstrich „_“ zu hinterlegen, der als Leerzeichen zwischen den Wörtern dient. An Position 1 steht der erste Buchstabe des Alphabets, also das A und so weiter. Drücke einfach auf das Pluszeichen im Listen-Block, um einen weiteren Buchstaben einzufügen. Um die Variable „Buchstabennummer“ anzulegen, klickst du noch einmal auf das Plus neben dem Wort „Start“.

Buchstaben anzeigen

Um dich nun mit den Tasten A und B durch die Buchstabenliste durchklicken und die Buchstaben anzeigen zu können, brauchst du mehrere neue Funktionen. Zuerst legst du eine Endlos-Schleife an (Block „Kontrolle“, Bereich „Schleifen“) und fügst dort aus dem Block „Aktion“, Bereich „Anzeige“ die Komponente „Zeige Text“ aus. Die grüne Text-Komponente („Hallo“) schmeißt du in den Mülleimer unten rechts. Dann änderst du im Auswahlfeld hinter „Zeige“ die Auswahl auf „Zeichen“. Aus dem Block „Listen“ wählst du die Komponente „von der Liste“ aus. Die beiden leeren Stellen in dieser Komponente füllst du mit den Variablen aus dem Block „Variablen“. Jetzt hast du in deinem Programm hinterlegt, dass der Calliope auf seinem Display immer das Zeichen anzeigt, das der aktuell ausgewählten Position auf der Liste entspricht. Ganz zu Beginn ist das die 0. Position, also das Leerzeichen. Vor der Variable „Buchstabennummer“ steht in dieser Komponente „nimm #tes“ – das bedeutet, dass mit diesem Befehl das erste, zweite, dritte Element und so weiter bis zum Ende der Liste aufgerufen werden kann.

Mit den Tasten Buchstaben auswählen

Unter die Endlosschleife zur Anzeige der Zeichen fügst du jetzt eine „wenn, mache …“-Bedingung aus dem Block „Kontrolle“, Bereich „Entscheidungen“ ein. Hinter das „wenn“ fügst du aus dem Block „Sensoren“ die Komponente „Taste A gedrückt“ ein. Das „mache“ ergänzt du um die Komponente „Schreibe Buchstabennummer“ aus dem Block „Variablen“. An diese Komponente fügst du eine Komponente aus dem Block „Mathematik“ hinzu, die es erlaubt, aus zwei Werten eine Summe zu bilden. Als ersten Wert fügst du die Variable „Buchstabennummer“ ein, als zweiten die 1. Das Auswahlfeld in der Mitte stellst du auf Minus. Jetzt springst du mit dem Druck auf die Taste A eine Position nach oben beziehungsweise zum Beginn der Liste. 1

In die jetzt eingerichtete Bedingung fügst du eine weitere „wenn …, mache …“-Bedingung ein. Hier ergänzt du das „wenn“ um eine Komponente aus dem Block „Logik“, die zwei Werte in Beziehung zueinander setzt. Du setzt in der vorderen Lücke die Variable Buchstabennummer ein, wählst im Auswahlfeld das Symbol für „kleiner als“ aus und setzt hinten aus dem Block „Mathematik“ die Zahl 0 ein. Das „mache“ ergänzt du um die Komponente „Schreibe Buchstabennummer“ aus dem Block „Variablen“, dahinter fügst du die Zahl 26 an. Mit dieser Bedingung verhinderst du, dass du eine Fehlermeldung erhältst, wenn du nach dem oberen Ende der Liste (Position 0) auf die Taste A klickst. Zuletzt fügst du eine Pause von 500 Millisekunden aus dem Block „Kontrolle“, Bereich „Warten“ ein. 2 Für die Taste B kopierst du das Programm für Taste A und änderst die entsprechenden Parameter.

Buchstaben codieren und per Funk senden

Für die Codierung benötigst du zwei weitere Variablen. Lege nun also zuerst im Startblock die Variable „CodeBuchstabennummer“ vom Typ Zahl mit dem Anfangswert 0 an. Danach fügst du die Variable „Verschiebung“ dem Typ „Zahl“ und dem Anfangswert 1 hinzu. Jetzt richtest du das Senden über Pin 1 ein: Wenn auf Pin 1 gedrückt wird, dann soll der Buchstabe gesendet werden. Du brauchst also eine weitere „wenn, mache“-Bedingung und ergänzt diese um „Pin 1 gedrückt“. Hinter „mache“ fügst du die Komponente „Schreibe CodeBuchstabennummer“ an und ergänzt sie um die Variable Buchstabennummer. So hast du der Variablen „CodeBuchstabennummer“ den Wert der „Buchstabennummer“ zugewiesen. 3

Unter diesen Befehl setzt du eine weitere „wenn, mache“-Bedingung. Mit dieser Bedingung definierst du, dass die Buchstabennummer von allen Buchstaben außer dem Leerzeichen codiert werden soll. 4 Mit der Bedingung darunter legst du fest, dass, wenn du an der letzten Position der Liste bist, der erste Buchstabe des Alphabets angezeigt wird. 5 Außerdem fügst du zwei Komponenten aus dem Block „Nachrichten“ ein. Zum einen „setze Kanal auf“, zum anderen „Sende Nachricht“. Die Nummer des Kanals kannst du selbst bestimmen, sie muss nur für Sender und Empfänger gleich sein und zwischen 0 und 255 liegen. Die Komponente „Setze Kanal auf” fügst du direkt hinter dem Startblock ein. 6 Die zweite Komponente „Sende Nachricht“ setzt du hinter die „Warte“-Komponente am Ende der Codierung. Wähle für den Typ der Nachricht die Zeichenkette aus und lasse unter Stärke den Wert 7 stehen. 7

Das Sender-Programm ist jetzt fertig. Hier siehst du es noch einmal in voller Länge. Damit wir alle Komponenten abbilden können, haben wir nicht das gesamte Alphabet in unsere Liste aufgenommen.

Das Programm für den Empfänger

Empfangene Nachricht anzeigen

Das Empfänger-Programm ist ziemlich einfach. Die einzige Aufgabe dieses Programms ist die Anzeige der empfangenen Nachricht. Diese Anzeige muss es unendlich oft wiederholen, damit es keinen Buchstaben verpasst. Den „Empfange Nachricht“-Befehl findest du im Block Nachrichten. Du hängst ihn an die „Zeige Zeichen“-Komponente aus dem Block „Aktion“ an. Wenn Du wie hier gezeigt das Empfänger-Programm an den Startblock anhängst, kannst du es nicht gleichzeitig mit dem Sende-Programm auf einem Calliope speichern. So hast du einen Calliope, der senden und einen, der empfangen kann. —esk