USB Tastatur an ESP32 ?

Moin,

nachdem meine ersten kleinen Projekte nun laufen plane ich zum Spaße eine Art Terminal für Messages via Lora o.ä. - dazu möchte ich eine kleine aber brauchbare Tastatur an einen Microkontroller bringen - ich fand da auch schon ein paar Infos zu.

Tastatur habe ich mal geordert, das ist aber kein Bluetooth - sondern eigenes 2.4Ghz ISM System was seitens des Microkontrollers als USB-Tastatur zu nutzen ist.

Am Lappy läuft das auch schon problemlos.

Was ich fand ist das man USB(OTG) an einigen Microkontrollern nutzen kann, es für die Nutzung von Tastaturen dafür auch Lib´s gibt - aber ganz schlau wurde ich da noch nicht.

Der Arduino UNO und Mega können das scheinbar - und die ESP32-S3 ?

Der Anschluss erfolgt beim ESP32-S3 dann am USB über Den normalerweise auch geproggt wird ?

Vorhanden dafür ist ein Arduino-Megabord, ein Arduino Nano ESP32-S3 oder man besorgt sich noch was passenderes ?

Dazu muss ein LCD-Display und eine serielle Schnittstelle nutzbar sein, serial über Bluetooth kann in Zukunft auch im Raume stehen.
Display und serielle habe ich im Griff, ich brauche nur Info zur USB-Tastatur - Bemerkung hier dazu das das nutzbar sein muss kann für Microproc-Auswahl wichtig sein ( UART ) - wobei die Baud nicht hoch sein wird ( 19K2 -> Softserial ginge ).

Habt Ihr da Tipps als "Startschuss" ?

Grüße Bernd

Hallo,

das wäre mir neu. Man kann sie zu einer USB-Tastatur umbauen (was viele andere Arduinos mittlerweile sowieso können.)

Aber ein USB-Host ist eine ziemlich komplexe Veranstaltung. Es gibt USB-Host Shields, die laufen wohl an den meisten Arduino kompatiblen.

Ansonsten kenne ich nur drei Arduinos, an die man eine USB-Tastatur anstecken kann:

  • Den Giga, der hat einen USB-A Anschluss.
  • Teensy 3.6 (abgekündigt) und 4.1. Hier braucht man ein Kabel wie bei älteren PC Motherboards (Buchsenleiste auf USB 2.0 A Buchse)
  • Der Arduino Due. Hier braucht man ein USB OTG Kabel (Micro USB-Stecker auf USB A Buchse)

Wobei man beim Due aufpassen muss. Da wirkt vieles, als hätten die Entwickler mitten in der Arbeit fluchtartig die Baustelle verlassen. Im Gegensatz zu den anderen beiden unterstützt er auch keine USB-Hubs, er kann nur eine einzeln angeschlossene Maus oder Tastatur erkennen.

1 Like

Ein ppar Sachen fand ich schon - teils mit Libs von ExpressIF - der ESP32-S3 kann es wohl recht sicher - bei den Arduinos sah ich auch was - ok, dann muss ich mich da mal selber rantasten.

Den Proc als Datengenerator -> Tastatur zu nutzen gibts sehr viele Projekte - wie Du schon richtig gelesen hast will ich das nicht.

Ich melde mich ( falls es jemanden hier interessiert ) wenn ich weiter bin.
( bzw. evt. kommt hier aus dem Forum ja auch noch Info - ist je noch eine "frische" Frage ).

Grüße Bernd ( jetzt erst mal an die frische Luft ! )

Etwas Recherche und teils fündig, es gibt Libs dazu, aber in Arduino IDE gibts krude Compilerfehlermeldungen - ich meine auch das dazu die ExpressIF-IDE genutzt werden muss ?

ESP32-USB-Soft-Host.h z.B.

Beispielcodes brechen beim complilieren ab.

Arduino Nano ESP32 scheint ein Board zu sein was das aber können müsste.

Nein da kannst Du kein USB als Slave Gerät anschließen.

Diese Beiden falls sie orginal sind und damit einenn ATmega16U2 haben kannst Du diesen zu einem USB Slave DID umprogrammieren. Dann geht das Upload des Sketches aber nicht mehr über USB.

Du brauchst einen USB HOST. Der kann eine USB Tastatur auslesen. Eine Funk Tastatur mit USB-Empfänger- Dongle ist aber wieder was anderes als eine Tastatur mit USB Anschluß.

Daß etwas am PC mit Win 10 oder 11 geht sagt noch nichts aus ob es an einer anderen Hardware funktioniert.

Grüße Uwe

Jo, die kleinen Arduinobords können es nicht, wie ArduFE schon schrieb geht es von Haus aus nur mit dem Giga, Teensy und Due - Letzterer wurde auch einmal im ESP32 Forum genutzt um als Interface zu fungieren ( aber das ist obsolete ) .

Aber EspressIF hat mind. 2 Libs die das unterstützen ( gibt dazu dort Forenbeitträge und auch YT-Videos ) - Eine davon nutzt einfache Analogeingänge ( eben die ESP32-USB-Soft-Host Library ) - und damit gibts keinen Ärger mit proggen über USB.

Die Beispielcodes für diese Libs brechen bei mir ab ( wie geschrieben ) und meine Frage ist nun ob ich das Problem in ArduinoIDF lösen kann oder ob ich ( wie mein Reallebenmentor sagte - nutze andere IDF - irgendwann kommst mit Arduino nicht weiter ) die IDF wechseln muss.

Bei Arduino IDF ist die Auflösung von den Dependecies wohl nicht immer sauber ( vor allem bei nicht Arduinosachen ).

Die Beispielcodes von EspressIF fragen den Typ des Bordes beim compilieren ab, das Arduino Nano ESP32 was hier noch rumfliegt wird aber akzeptiert.

Es wird für diese Lösung ein ESP32-S2 oder S3 gebraucht ( wohl wegen teils 2Kern = genug Procfähigkeit ) .

Der einfache Weg wäre eine PS2 Tastatur, das gibst aber nicht in Miniatur.
Meine dafür geplante Minitastatur kann aber PS2 über USBstecker nicht mehr.

@uwefed ob DIe dann am ESP32 läuft werde ich ja sehen - es gibt für Tests hier auch noch reine USB-Tastaturen - die Vorgesehene läuft getestet mit Ihrem Dongle an:

  • Winvirus 11 Lappy - bei Dem auch unter Heulsuse Tumbleweed
  • dann Asbach-Uralt-Lappy mit Opensuse 9.3 am USB-Port - damit testete ich ob mit USB2PS2-Adapter die Nutzung via PS2 geht - nein - das macht die Tastatur nicht.
  • dann mit OTG-Adapter am alten Adroidhandy ( S5Mini mit Cyanogenmod )

Ich wäre auch nicht an diese Tastatur gebunden, aber die kostete nur 20€ und wäre schon mal schick - zur Not nutze ich Die in meinem alten SelbstbauAutoPC - dort ist bei Bedarf eine Größere dran - oder halt über den Touchmonitor derzeit.

Zusammengefasst: Topic evt. etwas umzudefinieren:
Wie bekomme ich die Librarys von EspressIF unter ArduinoIDE zum laufen um mit ESP32 Procs eine über USB angeschlossene Tastatur zu nutzen ?
( Was klar geht weil es da im EspressIDF-Forum Beiträge gibt die genau das machten )

Oder ist ein Wechsel zur EspressIDF-IDE ( & Forum ) nötig/sinnvoll - dann wäre ich hier aber im falschen Forum und ich bitte das zu entschuldigen !

Geniesset das Wetter - es ist "Herrentag" !

Wetterbericht: strahlend blauer Himmel, nachher etwas Bewölkung - alles schick !

Gruß Bernd

Edit: Firma heisst Espressif - das schrieb ich teils falsch ...

Arduino IDE 1.8.19, Core 2.0.14, ESP32 Dev Module

In der Datei f:\arduino\libraries\ESP32-USB-Soft-Host\src\usb_host.c eine Änderung:

  #if defined DEBUG_ALL
    #define DEBUG_OPCODE(...) printf(__VA_ARGS__)
  #else
    #define DEBUG_OPCODE(...)
  #endif

Dann wird USB_Test.ino vom Compiler akzeptiert:

Der Sketch verwendet 260485 Bytes (19%) des Programmspeicherplatzes. Das Maximum sind 1310720 Bytes.
Globale Variablen verwenden 26648 Bytes (8%) des dynamischen Speichers, 301032 Bytes für lokale Variablen verbleiben. Das Maximum sind 327680 Bytes.

Danke für die Info, werde ich testen.

Gestern zwischendurch beim Kaffee etwas gespielt, Idee war das Abhängigkeiten kollidieren bzw. Versionen der Libs nicht passen.

Ein Downgrade der ESP32_Libs von 3.x_rc zu 2.x brachte Erfolg das sich der Sketch kompilieren liess, Funktion aber noch nicht gegeben - beim Nano ESP32 war wieder Resetknopforgie zum Upload nötig und nach Upload frass der serielle Monitor den Nano nicht - Abhilfe schaffte Linuxterminal was die Ausgabe zeigte - das lief auch durch incl. Interrupt starten usw. der reagierte aber ( noch ) nicht auf angesteckte USB-Geräte ( ich testete ein Paar ).

Ich werde die usb_host.c mal editieren und schaun .

Ist ja nicht eilig - und das kriegen wir schon :wink:

Grüße Bernd

mal kurz ausgeführt die Änderung - und ESP32_Libs wieder auf aktuellem Stand

Beim Beispiel ESP_S3_USB_Test gibts wieder diverse Fehler:

In file included from /home/bernd/Arduino/libraries/ESP32-USB-Soft-Host/src/usb_host.h:8,
                 from /home/bernd/Arduino/libraries/ESP32-USB-Soft-Host/src/ESP32-USBSoftHost.hpp:22,
                 from /home/bernd/Arduino/libraries/ESP32-USB-Soft-Host/src/ESP32-USB-Soft-Host.h:5,
                 from /home/bernd/Arduino/ESP32_S3_USB_Test/ESP32_S3_USB_Test.ino:13:
/home/bernd/.arduino15/packages/esp32/tools/esp32-arduino-libs/idf-release_v5.1-3662303f312/esp32s3/include/driver/deprecated/driver/periph_ctrl.h:7:2: warning: #warning driver/periph_ctrl.h header is no longer used, and will be removed in future versions. [-Wcpp]
    7 | #warning driver/periph_ctrl.h header is no longer used, and will be removed in future versions.
      |  ^~~~~~~
In file included from /home/bernd/Arduino/libraries/ESP32-USB-Soft-Host/src/usb_host.h:9:
/home/bernd/.arduino15/packages/esp32/tools/esp32-arduino-libs/idf-release_v5.1-3662303f312/esp32s3/include/driver/deprecated/driver/timer.h:16:2: warning: #warning "legacy timer group driver is deprecated, please migrate to driver/gptimer.h" [-Wcpp]
   16 | #warning "legacy timer group driver is deprecated, please migrate to driver/gptimer.h"
      |  ^~~~~~~
In file included from /home/bernd/Arduino/libraries/ESP32-USB-Soft-Host/src/./usb_host.h:8,
                 from /home/bernd/Arduino/libraries/ESP32-USB-Soft-Host/src/./ESP32-USBSoftHost.hpp:22,
                 from /home/bernd/Arduino/libraries/ESP32-USB-Soft-Host/src/ESP32-USBSoftHost.cpp:2:
/home/bernd/.arduino15/packages/esp32/tools/esp32-arduino-libs/idf-release_v5.1-3662303f312/esp32s3/include/driver/deprecated/driver/periph_ctrl.h:7:2: warning: #warning driver/periph_ctrl.h header is no longer used, and will be removed in future versions. [-Wcpp]
    7 | #warning driver/periph_ctrl.h header is no longer used, and will be removed in future versions.
      |  ^~~~~~~
In file included from /home/bernd/Arduino/libraries/ESP32-USB-Soft-Host/src/./usb_host.h:9:
/home/bernd/.arduino15/packages/esp32/tools/esp32-arduino-libs/idf-release_v5.1-3662303f312/esp32s3/include/driver/deprecated/driver/timer.h:16:2: warning: #warning "legacy timer group driver is deprecated, please migrate to driver/gptimer.h" [-Wcpp]
   16 | #warning "legacy timer group driver is deprecated, please migrate to driver/gptimer.h"
      |  ^~~~~~~
/home/bernd/Arduino/libraries/ESP32-USB-Soft-Host/src/ESP32-USBSoftHost.cpp:5:19: note: '#pragma message: memory protection features disabled, templated asm nop() will be used'
    5 |   #pragma message "memory protection features disabled, templated asm nop() will be used"
      |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/bernd/Arduino/libraries/ESP32-USB-Soft-Host/src/ESP32-USBSoftHost.cpp:157:45: warning: ignoring attribute 'section (".iram1.259")' because it conflicts with previous 'section (".iram1.2")' [-Wattributes]
  157 |   void IRAM_ATTR timer_group0_isr(void *para)
      |                                             ^
/home/bernd/Arduino/libraries/ESP32-USB-Soft-Host/src/./ESP32-USBSoftHost.hpp:66:16: note: previous declaration here
   66 | void IRAM_ATTR timer_group0_isr(void *para);
      |                ^~~~~~~~~~~~~~~~
/home/bernd/Arduino/libraries/ESP32-USB-Soft-Host/src/ESP32-USBSoftHost.cpp: In member function 'bool USB_SOFT_HOST::_init(usb_pins_config_t)':
/home/bernd/Arduino/libraries/ESP32-USB-Soft-Host/src/ESP32-USBSoftHost.cpp:242:3: error: 'gpio_pad_select_gpio' was not declared in this scope; did you mean 'esp_rom_gpio_pad_select_gpio'?
  242 |   gpio_pad_select_gpio( blink_gpio );
      |   ^~~~~~~~~~~~~~~~~~~~
      |   esp_rom_gpio_pad_select_gpio
/home/bernd/Arduino/libraries/ESP32-USB-Soft-Host/src/./usb_host.h:25:32: error: 'TIMER_BASE_CLK' was not declared in this scope
   25 | #define TIMER_SCALE           (TIMER_BASE_CLK / TIMER_DIVIDER)  // convert counter value to seconds
      |                                ^~~~~~~~~~~~~~
/home/bernd/Arduino/libraries/ESP32-USB-Soft-Host/src/ESP32-USBSoftHost.cpp:274:79: note: in expansion of macro 'TIMER_SCALE'
  274 |   timer_set_alarm_value(TIMER_GROUP_0, TIMER_0, (double)TIMER_INTERVAL0_SEC * TIMER_SCALE);
      |                                                                               ^~~~~~~~~~~

exit status 1

Compilation error: exit status 1

nach folgender Editierung der usb_host.c

USB_Test.ino gibt folgende Fehler aus:

In file included from /home/bernd/Arduino/libraries/ESP32-USB-Soft-Host/src/usb_host.h:8,
                 from /home/bernd/Arduino/libraries/ESP32-USB-Soft-Host/src/ESP32-USBSoftHost.hpp:22,
                 from /home/bernd/Arduino/libraries/ESP32-USB-Soft-Host/src/ESP32-USB-Soft-Host.h:5,
                 from /home/bernd/Arduino/USB_Test/USB_Test.ino:3:
/home/bernd/.arduino15/packages/esp32/tools/esp32-arduino-libs/idf-release_v5.1-3662303f312/esp32s3/include/driver/deprecated/driver/periph_ctrl.h:7:2: warning: #warning driver/periph_ctrl.h header is no longer used, and will be removed in future versions. [-Wcpp]
    7 | #warning driver/periph_ctrl.h header is no longer used, and will be removed in future versions.
      |  ^~~~~~~
In file included from /home/bernd/Arduino/libraries/ESP32-USB-Soft-Host/src/usb_host.h:9:
/home/bernd/.arduino15/packages/esp32/tools/esp32-arduino-libs/idf-release_v5.1-3662303f312/esp32s3/include/driver/deprecated/driver/timer.h:16:2: warning: #warning "legacy timer group driver is deprecated, please migrate to driver/gptimer.h" [-Wcpp]
   16 | #warning "legacy timer group driver is deprecated, please migrate to driver/gptimer.h"
      |  ^~~~~~~
/home/bernd/Arduino/USB_Test/USB_Test.ino: In function 'void setup()':
/home/bernd/Arduino/USB_Test/USB_Test.ino:147:69: error: 'TIMER_BASE_CLK' was not declared in this scope
  147 |   printf("TIMER_BASE_CLK: %d, TIMER_DIVIDER:%d, TIMER_SCALE: %d\n", TIMER_BASE_CLK, TIMER_DIVIDER, TIMER_SCALE );
      |                                                                     ^~~~~~~~~~~~~~

exit status 1

Compilation error: 'TIMER_BASE_CLK' was not declared in this scope

die beiden Unterstriche noch editiert - Fehler bleibt

Der Fehler ist weg, jetzt kommen andere hinzu, vermutlich weil Du eine andere Hardware als ESP32 Dev Module verwendest, bei Dir sehe ich S3.

Kommentiere mal Zeile 147, ist nur printf.

rc heißt ReleaseCandidate, also noch nicht ganz fertig. Die sollte man nur benutzen, wenn man schon über eine gehörige Portion Erfahrung verfügt. Besonders bei Änderung der Hauptversionsnummer.

Gruß Tommy

Da zu kommt das nicht alle Lib sind noch angepast für S3. Ist doch etwas andere MCU.

Die Frage ist, ob ein USB-PS2 Adapter funktioniert.

Das fällt aber klar unter "muss man testen".

Es gibt da 2 Bauarten. Dumme und schlaue.

Dumme verlegen nur die Kabel neu, nach den Motto "aus flach mach rund".

Hier ein Beispiel :

Schlaue haben eine Elektronik drin. z.b. :

Die Chance an einen PC !!! Steht 50:50 das der dumme läuft.

An meinen neue KVM muss ich ein schlauen haben.

Wieso ich das alles erzähle.
Die Tastaturen haben einen eigenen Prozessor. Und es kommt eigentlich nur darauf an was der sendet. Meine Tastatur kann USB + Serialle Komunikation und hat ein alten PS2-Stecker. Damals vor PS2 war das normale Serialle Komunikation weshalb man Tastaturen hat an COM-1 angeschlossen hat. Nix BUS, Nix 7 Bit Adresse einfach ein paar Drähte und das wars.

Heutzutage ist es üblich das man ALLES über den armen USB-Bus jagt. Und damit der das auch halbwegs schafft hat man den neuen USB 3.* BUS entwickelt.

Wenn du allso noch eine URALT-Tastatur mit DIN-Stecker (Dicker schwerer Runder Stecker) auftreiben kannst, sollte das anklemmen nicht wirklich ein Problem sein.
Hier ein Adapter (dumm) der PS2 Tastaturen an URALT-Mainboards ans laufen bringt.

Der Adapter soll dir nur zeigen welchen Anschluß die Uralt-Tastatur haben muss.

Das ganze nur so als Tipp.

Gruß

Pucki

Das muss laut Sketch S2 oder S3 sein, deer Nano ist S3.

Bei Dev 3 ist verweigert der Sketch wegen inkompatibel

Der "Schlaue" ist falsche Richtung ( da ich wenn/dann USB zu PS2 am Rechner brauche.

Das habe ich aber schon getestet: die Minitastatur geht nicht mit Adapter am original PS2 Eingang ( ich habe noch solch Leichen hier rumfliegen ( s.o. )

Also muss ich ( für die geplante Tastatur ) den Weg über USB gehen.

Ich hätte auch gerne einfaches PS2/serielles Minikeyboard, aber das hat heute alles USB ( mit dem entsprechenden Overhead ).

Eiweiß - ich bin auch schon etwas länger mit Computern zugange :wink: .

die rc hatte die ArduinoIDE als Update automatisch angeboten.

Die 3.x nicht rc verhält sich aber gleich

Heute Abend/morgen früh - jetzt ist Grillzeit !
( checke nur gerade Mails )

... werde dann berichten

https://www.ihse.com/de/produkte/usb-nach-ps-2-und-ps-2-nach-usb/

Die gibt es auch in die andere Richtung. Aber ob das funktioniert. KEINE AHNUNG. Technisch gesehen sollte es das.

Die schreiben sogar auf der HP das die "dummen" nur mit Unterstützung funktionieren.

Gruß

Pucki