{{tag>dev arduino joystick usb hid}}
====== Arduino: Joystick ======
Il est possible de modifier le firmware de la puce de communication FTDI présente sur la carte Arduino pour qu'elle soit reconnue comme un périphérique USB HID de type joystick. C'est ce que permet de faire le projet **UnoJoy** d' Alan Chatham.
Cette manipulation est réversible, on pourra flasher le firmware original depuis l'IDE.
Cloner le projet
git clone https://github.com/AlanChatham/UnoJoy.git
cd UnoJoy
Le système se compose de 3 parties:
- outils logiciels de flashage: dfu-tools sous Linux pour flasher le firmware sur la puce de communication de la carte Arduino;
- Le firmware
- La bibliothèque UnoJoy pour Arduino à ajouter au Sketch
===== Flasher le firmware =====
Installer le paquet **dfu-programmer**
sudo apt install dfu-programmer
Activer le mode DFU((**D**evice **F**irmware **U**pdate)):
* Mettre l'Arduino sous tension
* Placer brièvement le cavalier sur les broches 5-6 (les plus proches du connecteur USB) pour redémarrer la carte en mode DFU
Flasher le firmware en exécutant le script:
$ cd UnoJoy
$ sudo ./TurnIntoAJoystick.sh
La commande retourne les messages suivants:
.
Abracadabra!
Trying to program for Arduino Uno R1/R2...
Validating...
2596 bytes used (63.38%)
Unplug your Arduino and plug it back in. It's a joystick now!
Déconnecter/reconnecter la carte sur le port USB. Si on affiche à présent les périphériques USB, on peut voir dans la liste un device "Silicon Labs UnoJoy Joystick"
$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 04f2:b541 Chicony Electronics Co., Ltd Integrated Camera
Bus 001 Device 002: ID 8087:0a2b Intel Corp.
Bus 001 Device 008: ID 10c4:82c0 Silicon Labs UnoJoy Joystick
Bus 001 Device 004: ID 275d:0ba6 USB OPTICAL MOUSE
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Dans cet exemple présent sur le bus 001 périphérique 008, on peut afficher ces informations détaillées avec la commande:
lsusb -D /dev/bus/usb/001/008
===== Tester =====
Tester/recalibrer le périphérique avec l'application **jstest-gtk**:
sudo apt install jstest-gtk
===== Références =====
* https://create.arduino.cc/projecthub/Ingeimaks/arduino-joystick-8c9722
* https://github.com/AlanChatham/UnoJoy
* https://www.arduino.cc/en/Hacking/DFUProgramming8U2
* [[https://www.thingiverse.com/thing:4576634|Joystick imprimable arduino effet hall]]