Christians Webseite        << zurueck        vor >>

Bluetooth Low Energy HID Tastatur mit ESP32-Modul

ble-hid ble-hid

Dieses Projekt ist ein 2-Tasten-Keyboard mit drahtloser Verbindung über BLE. Es verbindet sich mit beliebigen Geräten (Smartphone, Tablet, ..) als ganz normale Tastatur. Zum Einsatz kommt es bei der Navigation am Motorrad als extra Zoom-In/Out-Tastatur am Lenker.

Der HW-Kern ist ein ESP32-C3 Modul auf einem DevelopmentKit-Board.

Human Interface Device ist eine Geräteklasse für Tastatur, Maus und ähnliches. Die Treiber dafür sind fester Bestandteil in allen Betriebssystemen (auch iOS und Android) und die Geräte sofort einsatzbereit. Eine Kopplung kann entweder über USB-Kabel oder (wie hier) drahtlos über BLE erfolgen. Die Tasten verhalten sich exakt wie eine ganz normale Tastatur, in allen Situationen und Programmen.

Software

Als Basis diente das Beispiel ESP32 as Bluetooth Keyboard aus dem GitHub. Es ist für die Arduino-Umgebung ausgelegt.

Die Tastenerkennung wurde von digital auf ADC/analog geändert um Leitungen einzusparen. An jedem Taster ist ein Widerstand angeschlossen. Die resultierende Spannung bei einem Tastendruck ist individuell durch den Wert des Widerstands definiert und wird durch den ADC ausgewertet. Unabhängig von der Anzahl der Taster sind somit immer nur 2 Leitungen notwendig.

Die Tastencodes für Zoom-In/Out sind nicht für alle Navi-Applikationen identisch. Als Beispiel: "Organic Maps" reagiert auf PLUS/MINUS und "Kurviger" auf ARROW UP/ARROW DOWN. Beide Tastenpärchen sind in der SW hinterlegt und das aktive kann durch gleichzeitiges Drücken beider Tasten umgeschaltet werden.

Gleizeitiges langes Drücken beider Tasten schaltet die BLE-Verbindung aus/ein. Ein passendes Flag wird im Eeprom-Bereich gespeichert und beim unmittelbar folgenden, forcierten Re-Start berücksichtigt. Diese grobe Methode musste ich wählen weil es mir leider nicht gelingen wollte den Bluetooth-Task zu beenden..

Als Option ist noch ein "Nachlauf" eingebaut. Darüber kann das Modul noch eine kurze Zeit (2 Minuten?) nach dem Abschalten der Zündung weiterlaufen und sich dann selbst automatisch abschalten.

Hardware

Die finale Hardware enthält zusätzlich noch die Stromversorgung für einen Einsatz am Motorrad. Die zusätzliche Beschaltung des Moduls sitzt auf einer Lochrasterplatine auf der Rückseite des Moduls.
ble-hid ble-hid
ble-hid ble-hid ble-hid

Die Spannung der Tasten wird über ADC1_0 (=GPIO0) eingelesen. Die Z-Diode begrenzt die Spannung auf 3.3V, für den Fall möglicher Einstreuungen über die langen Drähte zu den Tastern.

Die restliche Beschaltung gehört zur Stromversorgung. Q1 schaltet die "+12V-Batterie" zum DC/DC-Wandler durch. Der Wandler erzeugt daraus 5.2V für den ESP32. Diode D1 (Schottky) verhindert Rückwärtsspeisung. Das könnte relevant werden weil man den ESP32 auch gleichzeitig über USB versorgen könnte (z.B. beim Programmieren).

Mit dem Anlegen von "+12V Ignition" und "+12V Battery" wird Q1 automatisch durch T1 aktiviert und das Modul startet auf. Die Software aktiviert direkt nach dem Start den GPIO7-Ausgang. Diese Signal hält Q1/T1 aktiv auch wenn "+12V Ignition" nicht mehr vorhanden ist. Die Anwesenheit der "+12V Ignition"-Spannung wird über GPIO1 detektiert. Über diesen Mechanismus wird ein optionaler Nachlauf realisiert. Nach Ablauf der Nachlaufzeit wird GPIO7 deaktiviert und alles schaltet sich ab und stromfrei.

Der Einsatz eines DC/DC-Wandlers verringert die Verlustleistung. Der Stromverbrauch im BLE-Mode wird im Datenblatt leider nicht spezifiziert, er scheint aber im Bereich 100..200mA zu liegen. Bei Einsatz eines Linearreglers hätte man somit eine Verlustleistung (pessimistische Rechnung) von 0.2A x 7V = 1.4W. Durch einen Step-Down-Wandler mit 85% Wirkungsgrad verringert sie sich auf 0.17W. Das erscheint mir lohnenswert.

Der P-Kanel Mosfet Q1 ist völlig überdimensioniert (er kann bis zu 25A liefern). Ich hatte aber gerade nichts kleineres zur Hand..

Die "4V3" Z-Dioden sind ganz bewusst gewählt. Die Kennlinien sind bei diesen niedrigen Z-Spannungen sehr flach und bei Strömen im mA-Bereich landet man sehr genau bei den gewünschten 3.3V.

Links

-