Forum: Mikrocontroller und Digitale Elektronik Bluetooth Tastatur mit Mikrocontroller pairen (Arduino)


von blaue Ratlosigkeit (Gast)


Lesenswert?

Hallo,

vielleicht kennt hier jemand ein paar Links, die ich derzeit nicht 
finden kann:

Ich möchte ein paar alte Bluetooth-Tastaturen und Gamecontroller (nicht 
BLE) als Eingabegeräte für Arduino-Projekte nutzen.
Blauäugig wie ich zunächst war, habe ich mir einfach ein HC-05 bestellt 
um dann festzustellen, dass dies nur das serielle Profil unterstützt. 
Bevor ich mir nun ein AT-09 oder RN41/RN42 oder nochwas anderes 
bestelle, wollte ich zunächt Codebeispiele finden, in denen Bluetooth 
HID-Geräte als Eingabegeräte seitens eines Arduino genutzt werden.

Leider scheint alle Welt entweder das Gegenteil zu machen: Alte 
Tastaturen zu Bluetooth-Tastaturen umzubauen oder aber ein Smartphone 
etc. als Middelware einzusetzen, welches die Tastendrücke auf das 
serielle Profil umsetzt, so dass auf dem Arduino lediglich Strings vom 
seriellen Port gelesen werden.

"Arduino" ist für mich hier zunächst ein Platzhalter für die von der 
Arduino-IDE unterstützten Boads < 10€

Ich suche also nach Links zu Beschreibungen, wie ich mit einem 
geeigneten Bluetooth-Modul vom Arduino aus ein HID-Keyboard pairen kann, 
um danach auf Tastendrücke zu reagieren.

Je nachdem sitze ich vermutlich auch auf dem Schlauch und sehe die 
naheliegende Lösung nicht.  Aber auch auf Produktseiten wie 
https://www.microchip.com/wwwproducts/en/RN42
steht "Supports HID profile for making accessories such as keyboards, 
mouse, pointing devices"  aber nichts von READING HID devices...

Also schon mal vielen Dank an alle, die Konstruktives beitragen können.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Pairen ... OMG. Das ist ja genau so ein feiner Deutsch wie die Amper 
hochskillen, nur nicht so lustig.

von Chris K. (Gast)


Lesenswert?

Hmm ich glaube im CC2541 Stack war so eine Funktion mal drin.
Ja scheint so

http://e2e.ti.com/support/wireless-connectivity/bluetooth/f/538/t/529770?HID-receiver-keyboard-

habe ich aber nie benutzt. Sollte aber zumindest in die Richtung gehen.

von Andre (Gast)


Lesenswert?

Ich hab jetzt auch mal eine Zeit lang recherchiert. Und auch kein direkt 
geeignetes Modul gefunden...

Dafür aber eine andere Idee: Die USB Host Shield Library 2.0
Wie das genau abläuft habe ich noch nicht verstanden, so wie es aussieht 
kann man daran wohl einen USB Bluetooth Stick betreiben und darüber die 
Tastatur koppeln.

Lesestoff:
https://github.com/felis/USB_Host_Shield_2.0
https://github.com/felis/USB_Host_Shield_2.0/blob/master/examples/Bluetooth/BTHID/BTHID.ino
https://www.circuitsathome.com/mcu/arduino/bluetooth-hid-devices-now-supported-by-the-usb-host-library/

Das Shield verwendet einen MAX3421E USB Host Controller. Grundsätzlich 
sollte das aber auch auf einem USB fähigen Mikrocontroller ohne 
zusätzliche Hardware laufen können?
Dann hättest du halt statt einem Bluetooth Modul, einen Bluetooth Stick 
auf der Platine verbaut.

von blaue Ratlosigkeit (Gast)


Lesenswert?

Danke für die Hinweise! In die Richtung habe ich auch schon überlegt. 
Es erscheint mir allerdings irgendwo durch die Brust ins Auge, wenn ich 
da erst noch über eine USB-Schicht gehen muss.
Insofern wäre dann aber tatsächlich ein USB-fähiger Mikrocontroller das 
Mittel der Wahl.

Wobei: Was ist in so einem Bluetooth-Stick drin?  Vermutlich auch nur 
ein Bluetooth-Modul. Der HC-05/RN42 hat ja laut Datenblatt 
(https://cdn.sparkfun.com/datasheets/Wireless/Bluetooth/CSR-BC417-datasheet.pdf) 
auch einen USB-Port an Board.  Der SPI-Port wird wohl zum flashen der 
Firmware benötigt.

Der Unterschied zwischen HC-05 und RN42 ist wohl auch nur die Firmware.

Was mich hier wirklich etwas wundert ist die Tatsache, das es für diese 
doch recht grundlegende Funktion noch nicht zig Implementierungen gibt.

USB-Tastaturen werden auf USB fähigen Geräten z.B. direkt durch die 
Arduino-IDE unterstützt (https://www.arduino.cc/en/Reference/GetKey)

Jedoch gibt es auch die zahlreichen Boards mit integriertem Bluetooth im 
Arduino-Zoo keine Keyboard-Bibliothek, bzw. ich habe keine gefunden.

von Jim M. (turboj)


Lesenswert?

blaue Ratlosigkeit schrieb:
> "Arduino" ist für mich hier zunächst ein Platzhalter für die von der
> Arduino-IDE unterstützten Boads < 10€

Leg ein paar Teuros für ein NRF52x Board drauf. Das kann (allerdings mit 
dem NRF SDK) die Gegenstelle für moderne BTLE Hardware sein.

Parsen von HID Report Deskriptoren ist dummerweise aber nicht-trivial, 
und Bluetooth Classic funktioniert mit NRF5x Chips auch nicht.

von STK500-Besitzer (Gast)


Lesenswert?

Entweder verwendest du einen Controller mit integrierter 
USB-_HOST_-Funktion (da gehört etwas mehr dazu als "nur USB"), oder du 
verwendest einen Controller, der eine Bluetooth(-HOST)-Schnittste 
besitzt.

von Neverever (Gast)


Lesenswert?

blaue Ratlosigkeit schrieb:
> Hallo,
>
> vielleicht kennt hier jemand ein paar Links, die ich derzeit nicht
> finden kann:


https://www.lairdtech.com/products/btm44x-series

von S. R. (svenska)


Lesenswert?

Zum einen brauchst du einen Bluetooth-Hardwaretreiber für deinen 
Hostcontroller, zum anderen brauchst du einen Treiber für HID-Geräte. Da 
USB-HID und Bluetooth-HID identisch sind, kannst du dich da bei 
Mikrocontrollern mit USB-Host(!) umschauen.

Achtung: Alle Tastaturtreiber, die ich gesehen habe, nutzen nur das 
vereinfachte Bootprotokoll von USB-HID. Das reicht nicht, wenn du ein 
Gamepad nutzen willst.

Der ganze Kram ist leider ziemlich aufwändig.

Ben B. schrieb:
> Pairen ... OMG.

Ist bei Bluetooth der üblicherweise verwendete Begriff. Da das Verfahren 
nunmal offiziell "Pairing" heißt, ist das auch nachvollziehbar. Was wäre 
denn deiner Meinung nach angemessen? "Verpaaren"?

von John Doe (Gast)


Lesenswert?

S. R. schrieb:
> Ben B. schrieb:
>> Pairen ... OMG.
>
> Ist bei Bluetooth der üblicherweise verwendete Begriff. Da das Verfahren
> nunmal offiziell "Pairing" heißt, ist das auch nachvollziehbar. Was wäre
> denn deiner Meinung nach angemessen? "Verpaaren"?


Lernt man heutzutage kein Deutsch mehr zu Hause?
Das heisst "koppeln".

von S. R. (svenska)


Lesenswert?

John Doe schrieb:
> Lernt man heutzutage kein Deutsch mehr zu Hause?
> Das heisst "koppeln".

Oh. Ups. Ich ziehe meine Aussage zurück und entschuldige mich. :-)
Ich spreche tatsächlich kaum Deutsch im normalen Leben. Ausländer und 
so.

von Ralph S. (jjflash)


Lesenswert?

prinzipiell glaube ich, dass es NICHT zu schaffen ist, dass ein Arduino 
(korrekte) Zeichen einer Bluetoothtastatur auswerten kann:

- ATmega328 hat kein USB (und schon gar kein OTG)

Einen Empfänger, der bspw. Zeichen einer Bluetoothtastatur empfängt und 
dekodiert und die dann als Stream sendet ist mir nicht bekannt (belehrt 
mich eines besseren, ich hätte auch gerne so einen Chip)

Selbst eine USB Tastatur an einem Arduino (mit Kabel) klappt nicht (ich 
habs auf einem STM32F103 versucht und bin auch daran gescheitert, weil 
eben kein OTG)

Auf STM32F4(29) hatte das dann geklappt .. mit Fremdcode (und im besten 
Fall hab ich da dann davon die hälfte verstanden, was gerade so zum 
Anpassen gereicht hat).

Normalerweise bin ich nicht der Typ der sagt: "geht nicht", hier aber 
schon! (smile, solltest du das hinbekommen, so bitte hier die Lösung 
posten, ich glaube ich wäre nicht der einzige den das dann extrem 
interessieren würde)

von S. R. (svenska)


Lesenswert?

Ralph S. schrieb:
> prinzipiell glaube ich, dass es NICHT zu schaffen ist, dass ein Arduino
> (korrekte) Zeichen einer Bluetoothtastatur auswerten kann:
> - ATmega328 hat kein USB (und schon gar kein OTG)

Wozu braucht man denn USB, wenn er eine Bluetooth-Tastatur auswerten 
soll? Einen Bluetooth-Chip braucht man, den muss man extern anknoten. 
Der Rest (also HCI- und HID-Treiber) ist Software, das kann der 
AVR/Arduino selbst.

Ralph S. schrieb:
> Einen Empfänger, der bspw. Zeichen einer Bluetoothtastatur empfängt und
> dekodiert und die dann als Stream sendet ist mir nicht bekannt (belehrt
> mich eines besseren, ich hätte auch gerne so einen Chip)

Nach spontaner Suche habe ich von TI ein CC2564MOD gefunden. Das ist ein 
vollwertiger HCI-Controller, per UART angeschlossen. Um damit eine 
BT-Tastatur zu benutzen, ist einiges an Arbeit nötig, aber "geht nicht" 
gibt's nicht. ;-)

Ralph S. schrieb:
> Selbst eine USB Tastatur an einem Arduino (mit Kabel) klappt nicht (ich
> habs auf einem STM32F103 versucht und bin auch daran gescheitert, weil
> eben kein OTG)

Logisch. Eine USB-Tastatur ist ein USB-Device und muss an einen USB-Host 
angeschlossen werden (OTG in Host-Role ist auch ein Host). Wenn du 
keinen USB-Host hast, geht's halt nicht. Ich hab das mal mit einem 
STM32F107 gemacht, der konnte das. Ist aber alles andere als trivial.

von Ralph S. (jjflash)


Lesenswert?

S. R. schrieb:
> Ich hab das mal mit einem
> STM32F107 gemacht, der konnte das. Ist aber alles andere als trivial.

.. wie gesagt: ich habs mit einem F429 gemacht ...

Hmmm, die genannten Chips werd ich mir angucken...

von Alex G. (dragongamer)


Lesenswert?

Kennt ihr dieses Tutorial/Projekt?
https://www.learnrobotics.org/blog/control-arduino-robot-bluetooth-keyboard/
Scheint genau das gewünschte zu sein.

von Neverever (Gast)


Lesenswert?

Alex G. schrieb:
> Kennt ihr dieses Tutorial/Projekt?
> https://www.learnrobotics.org/blog/control-arduino-robot-bluetooth-keyboard/
> Scheint genau das gewünschte zu sein.


Und sonst gehts noch gut?
Die wollten keinen PC zwischenschalten. Und komm jetzt nicht mit einem 
HPC-Rechencluster.

Nimm mal weniger von dem komischen Zeugs, dann klappts auch wieder mit 
dem Lesen und Verstehen...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.