Programmation de l'Arduino Nano ESP32, une alernative avec l'IDE de Arduio

Je suis sous Linux Mint avec l'environnement Connamon.

1) Je montre comment charger un programme dans un Arduino Nano Esp32 depuis l'IDE de Arduino, lorsque le chargement (Upload) ne fonctionne pas.
2) Simulation d'un clavier suisse romand avec un Arduino Nano Esp32
J'ai complété la bibliothèque qui permet de simuler un clavier avec un Arduino Nano Esp32.
Je l'ai complété pour qu'il simule un clavier suisse romand et j'ai ajouté la simulation de taper des caractères accentués.


En fin de page, je donne des liens sur mes vidéos youtube concernant les sujets indiqués ci-dessus.
Avant Je donne également tous les codes arduinos (.ino)


Programmation de l'Arduino Nano Esp32.

Je n'ai jamais réussi à télécharger un programme dans mon Arduino Nano Esp32 avec la commande (Upload Ctrl+U)
J'ai pu télécharger le bootloader, mais cela n'a servit à rien.
J'ai toujours le message :
dfu-util: No DFU capable USB device available
Failed uploading: uploading error: exit status 74


J'ai regarder plusieurs vidéos, lu diverses pages Web, demandé à des intelligences artificielles, sans succès.

Voici une alternative pour programmer l'Arduino Nano Esp32 depuis l'IDE de Arduino, en utilisant la commande : Upload Using Programmer Ctrl+Maj+U.

Premièrement, il faut installer un des "Board" suivants :
Dans Tools > Board > Boards Manager Ctrl+Maj+B taper : esp32
Il y a deux options :
1) Arduino ESP32 Boards
2) esp32

J'ai une fois installé la première options, mais elle me limitait l'utilisation de la bibliothèque permetant de simuler un clavier. Je l'ai donc désinstallée et j'ai installé la deuxième option.
Cela n'a pas fonctionné dans un premier temps, car le temps de chargement est trop long et interromput par un "timeout".
J'ai du modifier le fichier : ~/.arduinoIDE/arduino-cli.yaml
J'ai ajouté les deux lignes suivantes en fin de fichier :
network:
connection_timeout: 300s
Ensuite, l'installation de la "Board" esp32 a fonctionné.

Pour télécharger un programme dans l'Arduino Nano Esp32, "Upload" ne fonctionne pas chez moi.
De nombreuses vidéos donnent des solutions, aucune n'a fonctionné pour moi.
Voici ce que je dois faire :
J'ai installé un bouton poussoir entre la masse (GND) et la pin voisine B1.
° J'appuie ce bouton, pour mettre à la masse la pin B1. Je maintiens appuyé.
° J'appuie sur le bouton reset, puis je le relache.
° Je relache le bouton mettant à la masse la pin B1.
° Je fais : Sketch > Upload Using Programmer Ctrl+Maj+U
° J'appuie et relache le bouton reset.

Pour que cela fonctionne, j'ai du faire les sélections suivantes :
° Tools > Board > esp32 > Arduino Nano ESP32   qui se trouve vers la fin d'une longue liste.
° Port > choisir le bon port connecté à l'Arduino Nano Esp32
° Programmer > Esptool
° Le reste, je le laisse inchangé : USB Mode ==Normal Mode (Tiny USB), tout en default.

Simulation d'un clavier suisse romand avec un Arduino Nano Esp32

J'ai les bibliothèes suivantes installées, je ne sais pas si elles sont toutes utiles :
° Arduino USBHIDHost
° Keyboard
° Mouse
° USBHOST

En jouant aven ce microcontrôlleur, j'ai vu qu'une bibliothèque permet de simuler un clavier.
Par défaut, c'est un clavier américain, qui inverse les touches "Y" et "Z" relativement à un clavier suisse.
Il inverse également beaucoup de caractères tels que : @ # # & / ( ) etc.
J'ai donc complété un programme de la bibliothèque pour simuler un clavier suisse romand.
J'ai également ajouté des possibilité pour obtenir des caractères accentués.

Je suis parti de l'exemple se trouvant sous :
File > Examples > USB > Keyboard > KeyboardSerial.ino
Ou d'un programme similaire trouvé dans GitHub.
Ces exemples sont normalement présents chez vous sous :
~/.arduino15/packages/esp32/hardware/esp32/3.3.5/libraries/USB/examples/Keyboard
La bibliothèque se trouve sous :
~/.arduino15/packages/esp32/hardware/esp32/3.3.5/libraries/USB/src

J'ai repris le code "KeyboardLayout_de_DE.cpp" se trouvant dans le sous-répertoire :keyboardLayout
Je l'ai modifié en lui donnant le nom : KeyboardLayout_fr_CH.cpp et je l'ai sauvé dans le même sous-répertoire.
Il est plus gros, car avec plus de commentaires et plus de possibilités.
télécharger ce complément à la bibliothèque de base.

télécharger mon programme d'exemple
Pour les curieux, c'est inutile, mais vous pouvez aussi télécharger une version précédente.

Ces programmes d'exemples ne fonctionnent pas avec le board : "Arduino ESP32 Boards", mais ils fonctionnent avec le board : "esp32" que j'ai installé comme expliqué ci-dessus.

Aux lignes 180 à 182, dans les commentaires, il y a trois exemples à copier-coller dans le champ d'entrée du moniteur série.

En plus d'ajouter tous les caractères du code ASCII, j'ai ajouté tous les caractèrs accentués de la langue françaises + quelques autres + la possibilité de coder certaines touches avec le caractère : "¬" obtenu en tapant "Alt_Gr §".
Regardez les lignes de 172 à 220 du code d'exemple.

En jouant avec mon programme et en développant la bibliothèque, j'ai appris l'existance de beaucoup de combinaisons de touches permettant l'accès à des caractères spéciaux et à de nouvelles touches muettes.
Elles sont toutes décrites dans les commentaires de mon exemple.
Par exemple, saviez-vous que : Alt_GR + Shift + è   A   donne le caractère : Å ?
On peut ainsi avoir des caractères avec un petit ronds dessus facilement sur le clavier.
Pour avec un "ç" majuscule, je ne sais pas comment faire autrement que : Caps-Lock   Shift ç  
Il n'y a pas d'accès directe au "Ç" à ma connaissance.
Pour obtenir : "æ", taper Alt_Gr + a. Avec "Shift" on obtient : "Æ".
Pour obtenir : "œ", taper Alt_Gr + o. Avec "Shift" on obtient : "Œ".
Mais "œ" et "Œ" ne sont pas dans les codages que j'ai implémentés dans la bibliothèque, car leur codage UTF-8 commence par un octet différent de ce que j'ai implémenté.
Les codages UTF-8 de ces caractères sont : "c5 93" et "c5 92".
J'ai juste implémenté ces deux caractères dans mon exemple.
Il est facile d'en implémenter d'autres, il suffit de suivre les exemples.
J'en ai gardé certains dans les commentaires.

Quelques codages UTF-8 de caractères.
Un convertisseur de code Unicode.
Quelques tables de caractères.

Modification d'un clavier suisse romand et clavier alternatif

Ce qui suit n'a plus rien à voir avec Arduino.
Ce qui suit est valable sous Linux Mint et sous Linux Ubuntu. Probablement aussi sur d'autres distributions Linux.

En jouant et développant le programme précédent, j'ai étudié le clavier suisse-romand.
Il y a des combinaisons de touches que je n'avais jamais expérimentées en plus de 15 années. Voici quelques exemples, juste pour information : La liste complète est beaucoup plus longue.
MAIS, aucune combinaison de touche de donne un : Ç   C cédille majuscule,
Sauf de faire : "Caps LOCK" ç.

1) Je vais montrer comment ajouter le "Ç", et tous les caractères que vous désirez.
2) Je vais montrer comment créer un clavier alternatif, pour définir des touches donnant accès à des caractères particuliers.
En tant que mathématiciens, voici une liste de caractères qui m'intéressent :
α β γ δ ε ... χ ζ υ · – ± ≈ ≠

Pour ajouter le "C cédille majuscule" au clavier suisse romand :
° Éditer le fichier : /usr/share/X11/xkb/symbols/ch   Avec l'éditeur Kate, c'est pratique.
° Modifier la ligne : key <AE04> {[ 4, ccedilla ]}; en
° Modifier la ligne : key <AE04> {[ 4, ccedilla, ccedilla, Ccedilla]};

En ajoutant les deux parties ",ccddilla, Ccedilla", cela indique au système qu'en pressant les touches "Alt_Gr+4" vous obtenez un ç.
On avait déjà un ç avec "Shift+4", donc pas trop utile.
Cela indique aussi au système qu'en pressant les touches "Alt_Gr+Shift+4" vous obtenez un Ç.   Ça c'est utile !
Pour que cela prenne effet, il faut taper : setxkbmap -layout ch -variant fr
Ou redémarrer l'ordinateur.

On peut aller beaucoup plus loin.
C'est ce que j'ai fait en modifiant le fichier : /usr/share/X11/xkb/symbols/dk
J'ai aussi indiqué au système que je veux un clavier alternatif qui est la clavier dannois.
Pour cela, aller dans les paramètres systèmes > clavier, cliquer sur + et ajouter le clavier représantant la langue désirée.
Sous Linux Mint, j'ai ajouté un "Applet" en faisant un click droit sur la barre de tâche et j'ai ajouté l'applet : "Clavier".
On bascule facilement d'un clavier à l'autre avec les touches : Super+espace
"Super" étant la touche Windows, entre Ctrl et Alt.

J'indique quelques exemples, le reste se voit dans le fichier "dk" que j'ai mis à disposition ci-dessous.
key <AD04> {[ r, R, Greek_rho, Greek_RHO ]}; // ρ Ρ
AD04 est la 4ème touche ("r") de la ligne "D" depuis le bas.
La ligne avec la barre d'espace est "AA"
La ligne juste au-dessus ("YXCVBNM") est "AB"
La ligne au-dessus ("ASDFGHJKL") est "AC"
La ligne au-dessus ("QWERTZUIOP") est "AD"
La ligne avec les chiffres est "AE"
Le premier caractère ("r") est celui obtenu sans rien presser d'autre.
Le 2e caractère ("R") est celui obtenu en pressant sur SHIFT
Le 3e caractère ("ρ") est celui obtenu en pressant sur ALT_GR
Le 4e caractère ("Ρ") est celui obtenu en pressant sur ALT_GR+SHIFT

Si on ne connait pas le nom du symbole désiré, on peut taper le Unicode du caractère.
C'est ce que j'ai fait dans l'exemple suivant :
key <AD03> {[ e, E, U03B5, U0395 ]}; // Epsilon == Unicode : U03B5
Dans le fichier "dk" que je mets à disposition, j'ai mis en commentaire l'autre possibilité.

Voici encore un exemple, avec des Unicodes qui étaient difficiles à trouver :
key <AB08> {[ comma, semicolon, U2192, U21A6 ]}; // RIGHTWARDS ARROW == U2192== → et RIGHTWARDS ARROW FROM BAR == U21A6== ↦

Lisez le fichier "dk" mis à disposition ci-dessous pour les autres exemples.

Voici les fichiers codant les claviers suisse-romand et danois et les versions que j'ai modifiée.
Le fichier original pour le clavier suisse-romand.
Le fichier que j'ai modifié pour le clavier suisse-romand
Le fichier original pour le clavier danois.
Le fichier que j'ai modifié pour le clavier danois
Le fichier original pour le clavier grec.
Pour le clavier suisse romand, j'ai principalement ajouté : "Alt_Gr+Shift+ç" pour obtenir : Ç
J'ai également ajouté une variante : 'xkb_symbols "frbg" {' pour des essais.
Accessible avec la commande : setxkbmap -layout ch -variant frbg

Quelques codages UTF-8 de caractères.
Un convertisseur de code Unicode.
Quelques tables de caractères.
Keyboard Scan Codes.
United States-International Layout Scancodes.
Luxembourgish Layout Swiss French Layout Scancodes.
Danish Layout Scancodes.
Les Scancodes des claviers ci-dessus, sont tous les mêmes.

Un Scancode est l'octet envoyé par le clavier au système d'exploitation pour indiquer quelle touche physique a été pressée, sans tenir compte de ce qui est écrit sur la touche.
C'est le système d'exploitation, qui traduit ensuite ce Scancode en un code caractère, en fonction du clavier qui a été désiré lors de l'installation du système d'exploitation.
On peut tester les codes envoyés avec le programme : xev
Il renvoie des "Keyycode", qui sont plus élevés de 8 que les Scancodes, avec l'idée historique de coder aussi les boutons de la souris.
Donc : Keycode = Scancode + 8
Les "Keycode" de xev sont en décimals, les "Scancode" des claviers ci-dessus sont en hexadécimal.

sudo showkey -s et sudo evtest Permettent d'autres tests clavier.
Pour aller plus loin dans les Scancodes.

Liens sur des vidéos youtube :

Lien sur la Playlist.

#01 Programmation d'un Arduino Nano Esp32
1ère vidéo indiquant les démarches que j'ai du faire pour programmer un Arduino Nano Esp32.
Elles sont détaillées ci-dessus également.

#02 Simulation d'un clavier suisse romand avec un Arduino Nano Esp32.
2ème vidéo indiquant comment j'ai simulé un clavier suisse romand avec un Ardiono Nano Esp32
J'ai utilisé une bibliothèque existante et implémenté le code pour qu'elle fonctionne avec un clavier suisse romande.
J'ai également ajouté des possibilité pour obtenir des caractères accentués.

#03 Modification de la correspondance entre un clavier et le caractère émis par le système (Linux)
3ème vidéo indiquant comment modifier la correspondance entre le Scancode envoyé par un clavier et le caractère émis par le système d'exploitation.
N'a plus rien à voir avec un Arduino Nano Esp32.


Home arrow arduino_nano_esp32.html
Mise à jour le 23 janvier 2026 par Libre Gisin.