Bluetooth / UART Adapter

Android Logo

Hier zeige ich euch wie ihr eine einfache Android App programmiert, mit der ihr eingegebenen Text über Bluetooth an ein Bluetooth / UART Modul sendet und wieder empfangen könnt.
Als kleines Extra besitzt diese App auch noch einen SpeechRecognizer, womit ihr eure Sprache in Text umwandeln lassen könnt.

-> Das Bluetooth Modul:

Als Bluetoothmodul verwende ich dieses hier.
Es ist kostengünstig, der Versand war (dafür das es aus China kommt) relativ schnell und es funktioniert problemlos. Kann ich nur empfehlen!
Der Versuchsaufbau sieht so aus:

Bluetooth_UART_Adapter(1)

Vorsicht!
Das Modul verträgt nur 3,3V Pegel. Wenn ihr also auch einen FTDI Adapter nehmen wollt, müsst ihr die Spannung der Pegel auf 3,3V einstellen.

Die beiden gelben Leitungen sind Rx und Tx, welche gekreuzt werden müssen und die grünen Leitungen sind +3,3V und GND.
Sobald das Modul angeschlossen ist, blinkt die rote LED.
Jetzt könnt ihr mittels Terminal vom PC aus auf das Modul zugreifen.
Die Standarteinstellungen sind

9600 Baud
Parity 0
Stopbit 1
Datenlänge 8

Mit Hilfe des Terminals könnt ihr den Namen und den Pairingcode des Moduls ändern.
Um den Namen auf z.B. Daniel zu ändert, kopiert ihr folgenden Text in das Terminalfenster (ihr müsst den Text kopieren….mit einer manuellen Eingabe seid ihr zu langsam!):

AT+NAMEDaniel

Analog funktioniert dies für den Pairingcode. Hier als Beispiel der Code 5555:

AT+PIN5555

Gerade den Pin solltet ihr vom Default Wert 1234 in einen anderen umändern.

-> Die Grundlagen der Bluetooth App:

Da das Bluetoothmodul nun funktioniert, können wir uns an die Programmierung der App machen.
Für die App erstellt ihr euch erst mal ein neues Projekt. Ich habe meines Kommunikation genannt:

Bluetooth_UART_Adapter(2)

Als erstes kümmern wir uns darum, dass Daten VOM Smartphone ZUM PC übertragen werden können.
Jetzt öffnet ihr das Projekt und anschließend fügt ihr folgende Elemente hinzu:

-> Bluetooth Client (Other Stuff)
-> 1 ListPicker
-> 1 Button (Basic)
-> 1 Textfeld (Basic)
-> 1 Label (Basic)

Anschließend gebt ihr den Elementen noch passende Namen und ordnet sie an.
Den Hint für die Textbox (quasi der Text der in der leeren Textbox steht) habe ich ganz entfernt.
Für den Startbildschirm habe ich noch den Namen Home vergeben und als Icon für die App verwende ich eine bearbeitete Version dieses Icons.
Das bearbeitete Icon könnt ihr euch am Ende der Seite downloaden.
Jetzt sollte der Bildschirm in etwa so aussehen:

Bluetooth_UART_Adapter(3)

Jetzt verleihen wir der App noch die Funktion.
Hierfür öffnen wir den Blocks Editor (herfür wird eine aktuelle Java Version benötigt!).
Als erstes übernehme ich die Funktion des Verbinden-Buttons.
Der ListPicker erlaubt es uns aus einer Liste ein bestimmtes Element auszuwählen.
Da ich mich mit einem Bluetoothgerät verbinden möchte, liegt der Gedanke nahe alle verfügbaren Bluetoothgeräte in dieser Liste zu speichern und anschließend mit dem drücken von Verbinden auszuwählen, mit welchem ich mich verbinden möchte.
Als erstes wird die Liste erstellt. Dies muss logischerweise passieren BEVOR ich ein Element auswählen will.
Hierfür verwende ich den BeforePicking Block des ListPickers. Die Liste wird anschließend mit der Elements Funktion gefüllt, wobei wir als Werte die des AdressesAndNames Blocks vom Bluetoothclient verwenden.
Fertig sieht dies so aus:

Bluetooth_UART_Adapter(4)

Jetzt werden bei einem Druck auf den Verbinden-Button alle Namen und Adressen von Bluetoothgeräten in der Nähe ausgewählt, in einer Liste gespeichert und angezeigt.
Nachdem ein Listeneintrag ausgewählt worden ist, soll sich das Smartphone mit dem jeweiligen Gerät verbinden.
Hierfür stellt der App Inventor einen Funktionsblock mit dem Namen AfterPicking bereit.
Diesen Block zieht ihr in das Fenster und stattet ihn mit einem Connect-Block von dem Bluetooth Client aus.
Als Adresse soll der ausgewählte Listeneintrag, welcher mit dem Block Selection des ListPickers abgerufen werden kann, gewählt werden.
Das ganze wird mit einer If-Abfrage verknüpft, welche anschließend überprüft ob eine Verbindung zu Stande gekommen ist oder nicht.
Auf eine Fehlerausgabe verzichte ich (erst mal) noch. Der fertige Block sieht dann so aus:

Bluetooth_UART_Adapter(5)

Jetzt kann die App schon mal getestet werden.
Hierfür übertragt ihr die Datei mit einem Klick auf Package for Phone auf euer Smartphone (ich mache dies mittels QR-Code).
Wenn ihr sie anschließend startet und auf Verbinden drückt, sollte folgendes Bild erscheinen:

Bluetooth_UART_Adapter(6)

Sobald ihr den Eintrag auswählt, verbindet sich das Smartphone mit dem Gerät (in eurem Fall das Bluetoothmodul).
Wenn eine Verbindung steht, hört die LED am Modul auf zu blinken und es kann mit der Textübertragung begonnen werden.
Dabei soll die App den in dem Textfeld stehenden Text bei einem Click auf Senden übertragen.
Dafür benötigen wir als erstes einen Click-Block und in diesen setzt ihr einen SendText-Block vom Bluetooth Client hinein.
Als Text geben wir den Text aus der Textbox an:

Bluetooth_UART_Adapter(7)

Nun ist die App in ihrer Grundfunktion fertig. Sobald ihr sie auf euer Smartphone übertragen habt, könnt ihr Texte und Zeichen per Bluetooth an euren PC senden und diese per Terminal ausgeben lassen.

-> Status und Trennen:

Da die App nun in ihrer Grundfunktion korrekt arbeitet, können wir uns um die weiteren Funktionen kümmern.
Als erstes statten wir die App mit einem Trennen-Button, einem Test-Button und einem Feld für Statusmeldungen aus.
Dazu füge ich ein paar neue Elemente hinzu:

-> 2 Button (Basic)
-> 1 Label (Basic)
-> 1 Textbox (Basic)
-> Vertical und Horizontal Arrangement

Das ganze ordne ich dann noch schön an, sodass es am Ende in etwa so aussieht:

Bluetooth_UART_Adpater(8)

Jetzt wird der Programmcode angepasst.
Anschließend definiere ich eine Variable mit dem Namen Connect und setze den Wert auf false:

Bluetooth_UART_Adapter(10)

In dieser Variable speichere ich den Status der Verbindung.
Als nächstes wird der AfterPicking-Block angepasst.
Dieser soll bei einer erfolgreichen oder nicht erfolgreichen Verbindung eine Statusmeldung ausgeben und die Variable Connect auf true bzw. false setzen.
Den Zugriff auf selbst deklarierte Variablen habt ihr unter My Blocks und dann My Definitions.
Fertig sieht der Block anschließend so aus:

Bluetooth_UART_Adapter(11)

Jetzt kommt der Trennen-Button dran.
Dieser soll bei einer längeren Betätigung die Verbindung zum Modul trennen.
Für diese Funktion verwende ich den LongClick-Block des Buttons.
Danach prüfe ich ob überhaupt eine Verbindung besteht, indem ich gucke ob das die Variable Connect auf true steht.
Wenn dies der Fall ist, trenne ich die Verbindung, gebe eine Statusmeldung aus und setze Connect auf false:

Bluetooth_UART_Adapter(12)

Jetzt kommt der Test-Button dran.
Dieser soll den aktuellen Status der Bluetooth Verbindung überprüfen und einen entsprechenden Text ausgeben:

Bluetooth_UART_Adapter(13)

Der letzte Schritt besteht in der Anpassung des Buttons Senden.
Und zwar soll nur ein Text gesendet werden, wenn vorher eine Verbindung aufgebaut wurde.
Hierfür verwende ich wieder eine If-Abfrage und die Variable Connect:

Bluetooth_UART_Adpater(14)

-> Daten empfangen:

Jetzt fügen wir noch eine Funktion zum empfangen von Daten hinzu.
Hierfür benötigen wir folgendes:

-> 1 Label (Basic)
-> 1 Textbox (Basic)
-> 1 Clock (Basic)
-> Screen Arrangements

Mit Hilfe des Clock-Moduls füge ich der App eine Timerfunktion hinzu. Dies ist ganz nützlich um regelmäßig zu überprüfen ob Daten empfangen wurden.
Die Elemente werden nun angeordnet:

Bluetooth_UART_Adapter(15)

Nicht verwirren lassen….die Textbox für das Empfangen wird später richtig dargestellt. Android passt die Elemente dem Bildschirm an und verkleinert sie, falls dies nötig ist.
Jetzt geht es wieder an das Programmieren. Sobald eine Bluetoothverbindung aufgebaut ist, soll die App in regelmäßigen Abständen prüfen ob Daten vorhanden sind.
Der Timer-Block der Clock ist vergleichbar mit einer ISR eines Mikrocontrollers.
Als erstes prüfe ich mit einer If-Abfrage ob eine Verbindung vorhanden ist. Wenn keine Verbindung aufgebaut ist, würde das Auslesen von Daten nur Fehler verursachen.
Der nächste Schritt besteht darin, dass ich prüfe ob Daten vorhanden sind.
Dies geschieht ebenfalls mit einer If-Abfrage, wo ich überprüfe ob die Anzahl der möglichen Bytes zum Empfangen größer als 0 ist.
Wenn Daten vorhanden sind, wird eine While-Schleife aufgerufen, die die Bytes nach und nach ausließt und einem String hinzufügt:

Bluetooth_UART_Adapter(16)

Da mein Empfangsstring nicht unendlich lang werden soll, baue ich noch eine Kontrolle ein, die den String löscht sobald er länger als 8 Zeichen ist:

Bluetooth_UART_Adapter(17)

Jetzt muss der Text nur noch ausgegeben werden

Bluetooth_UART_Adapter(21)

und dann ist die App bereit für den ersten Testlauf.
Hierfür wird sie wieder auf euer Smartphone übertragen und anschließend verbindet ihr euch mit eurem Bluetoothmodul.
Anschließend öffnet ihr am PC ein Terminalfenster und tippt was ein.
Der Text sollte nun in dem Empfangen Textfeld erscheinen.
Standardmäßig steht der Timer auf 1000ms, sprich jede Sekunde wird der Block vom Timer einmal ausgeführt. Falls euch dies zu lang ist, könnt ihr die Zeit im Screeneditor oder mittels TimerInterval Block ändern.

-> Der SpeechRecognizer:

Jetzt statten wir die App noch mit einem kleinen Gimmick aus: dem SpeechRecognizer.
Damit wird es möglich, dass ihr lange Texte zum senden nicht mehr eintippen müsst, sondern diese ganz einfach sprecht.
Alles was wir dafür brauchen ist das SpeechRecognizer Modul, welches ihr unter Other Stuff findet und einen extra Button, den wir Sprechen nennen:

Bluetooth_UART_Adapter(18)

Der Text soll eingelesen werden sobald auf den Sprechen-Button gedrückt wird.
Dies wird mit einem Click-Block des Sprechen-Buttons und einem GetText-Block des SpeechRecognizers erledigt:

Bluetooth_UART_Adapter(19)

Nachdem der Text eingelesen wurde, muss er noch verarbeitet werden.
Hierfür stellt der App Inventor den AfterGettingText Block des SpeechRecognizers bereit.
Dieser Block wird, wie der Name schon sagt, ausgeführt nachdem der Text eingelesen wurde.
Als erstes muss dafür eine Variable angegeben werden, wo der Text drin gespeichert wird (diese Variable muss NICHT initialisiert werden).
Den Wert der Variable gebe ich anschließend im Textfeld der Eingabe-Textbox aus:

Bluetooth_UART_Adapter(20)

Nun ist die Spracherkennung fertig und einsatzbereit und kann benutzt werden.
Die fertige App gibt es natürlich auch noch von mir zum Download.

Dokumentation:

 

-> Zurück zu Android

42 thoughts on “Bluetooth / UART Adapter
  1. Es geht leider immer noch nicht…
    Was soll ich tun die Handys sind gekoppelt aber immer wenn ich versuche eine Nachricht zu schreiben kommt:,,Erorr 507 Unable to connect Is the device turned on”

    LG derbrave

  2. Ich benutze dieses Bluetooth Modul auch für diverse Projekte. Mich interessieren diese AT-Commands schon lange, aber leider nie wirklich Zeit dafür gefunden. Wie genau machst du das? Bei mir funktioniert das leider nicht… ich habe bei meinen Versuchen das Modul dabei vollständig verdrahtet mit einem Arduiono (MicroController). Welche Steuerzeichen müssen nach einem AT-Command angehangen werden (\n oder \r)? Muss ich die AT-Commands via Bluetooth senden, oder vom MicroConroller aus über Tx Rx?

    • Hey,

      ich glaube du musst beides anhängen.
      Ich habe das unter Windows gemacht und Windows sendet beide Befehle mit.

      Gruß
      Daniel

  3. Hallo ich habe eine Frage zur Bluetooth-Verbindung aufbauen.
    Ich habe da ein ähnliches Problem wie mein Vorredner.
    Ich habe mich exakt an deine Anleitung gehalten, meine Bluetoothgeräte wurden vorher gekoppelt und beim click auf verbinden erscheint auch das gekoppelte Gerät, das bedeuted der listpicker.before funktioniert.
    Wähle ich dann das entsprechende Gerät aus kommt aber keine Verbindung zustande bzw es wird die fehlermeldung
    „Error 516:unable to write:transport endpoint is not connected“
    beim senden ausgegeben wird, was meiner Vermutung nach dann am Listpicker.after liegen müsste.
    Dieser wurde aber wie gesagt exakt so nachgebaut wie oben beschrieben.bin ratlos und hoffe auf hilfe.

    • Hallo,

      mmh da bin ich allerdings selber Überfragt. Das hört sich für mich mehr nach einem Fehler bei deinem Smartphone an.
      Kannst du mir das Programm vielleicht zukommen lassen?
      Dann teste ich mal eine Installation bei mir.

      Gruß
      Daniel

    • Hey,

      nein ich verwende eine Androidversion von 4.1. Du kannst das Programm runter laden und dann Packen und mir schicken. Wenn wir Glück haben kann ich es dann installieren.

      Gruß
      Daniel

    • Guten Morgen,

      stimmt du hast recht. Da ist mir wohl ein Fehler unterlaufen, allerdings ist durch die Umstellung auf App Inventor 2 das Projekt verloren gegangen….
      Ich gucke mal, dass ich das Bild heute Mittag korrigiert bekomme.

      Gruß
      Daniel

  4. Problem: Ich habe eine App nach deiner Anleitung gebastelt, doch auch, wenn Bluetoothgeräte in der Nähe des Gerätes (in den Einstellungen) erkannt werden, erscheinen sie nicht in der Liste. Ich gehe nicht davon aus, dass es an meiner App liegt, da ich dein Programm zur Gegenüberstellung getestet habe, und wieder: Nichts. Ich nutze Android 4.4.2, Bluetooth natürlich an.

    Danke schonmal im Voraus,
    Neuwirth

    • Inzwischen habe ich das Problem gefixt, aber das nächste erschaffen. Jetzt wird mir jedes Mal (auch bei deiner App zum Test) angezeigt: Error 507: Unable to connect. Ich verzweifle hier :(

      • Hey,

        das Problem hatte schon mal ein Leser….da konnte ich nicht weiter helfen, da es nicht an der App lag sondern eher am Smartphone :(

        Gruß
        Daniel

        • Daran wirds nicht liegen, habe es mit drei verschiedenen Geräten verschiedener Baujahre und Modellarten getestet und überall die gleiche Meldung. Egal, trotzdem danke für die super Anleitung und Antwort!

    • Hey Niklas,

      ja, ich habe am Wochenende damit begonnen die Bilder zu aktualisieren und mit der Seite bin ich noch nicht fertig geworden.
      Sorry…wenn du aber Probleme haben solltest, kannst du gerne fragen.
      Ich hatte vor die Seite bis Ende der Woche fertig zu haben.

      Gruß
      Daniel

  5. Hay, ich habe vorher eine andere App verwendet, wo ich ebenfalls den Error 507 bekommen habe, war ultra glücklich dieses Programm jetzt zu finden, aber leider funktioniert sie bei mir nicht, ebenfalls wieder der Error 507, ich verzweifel langsam daran..
    Hat eventuell schon jemand eine Lösung für das „507er Problem“ gefunden ?

    LG Cheesinger

  6. Könntest du mir bitte ein Screemshot von der Komplett fertigen Programmierung schicken denn bei mir zeigt es drei Fehler an und ich komme einfach nicht drauf was falsch ist.
    Mit fg Sixtus

    • Hallo,

      ich habe das Projekt leider nicht mehr.
      Schick mir mal einen Screenshot deines Programms zu + des Fehlers und dann schaue ich mal drüber.

      Gruß
      Daniel

    • Hi
      Jetzt habe ich nochmal eine Frage: Geht es auch das das Programm erkennt wenn in dem Empfangs Feld etwas steht es dann die Koordinaten des Smartphones per SMS an eine vorher eingespeicherte Nummer schickt?
      Viele Grüße
      Sixtus

        • Hallo
          Danke für den guten Link woran ich aber leider immer noch scheitere ist das es wenn in dem Textfeld etwas steht es diese SMS automatisch verschickt. Worüber ich mir auch noch nicht ganz im klaren bin wie es dann die Koordinaten in die SMS einfügt.
          Ich würde mich über eine Antwort sehr freuen
          Gruß Sixtus

          • Hallo Sixtus,

            es gibt im Appinventor zwei Module (unter „Sensors“):

            – LocationSensor
            – OrientationSensor

            Mit denen kannst du die Neigung und die Position des Smartphones bestimmen. Diese wandelst du dann in einen Text um und schickst sie per SMS.

            Gruß
            Daniel

          • Hallo Kampi
            Du hast mir bis jetzt seeehr geholfen dafür bin ich dir auch sehr dankbar. Ein letztes Problem habe ich allerdigs noch denn wenn es die Koordinaten schickt hört es nicht mehr auf. Es schickt dann so lange SMS bis man die APP beendet.
            Gruß Sixtus

          • Hi Sixtus,

            einfach einen Screenshot der Mail schicken („Druck“ drücken und das Bild dann per „Strg“ + „v“ z.B. in Paint einfügen.

            Gruß
            Daniel

          • Hi
            Ich bin mir gerade echt nicht sicher ob ich mich so blöd anstelle oder ich deine e-mail hir wirklich nicht finden kann. Auch auf google plus habe ich nichts gefunden..
            Gruß
            Sixtus

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload CAPTCHA.