Une carte Arduino possède un port USB, mais ce port est un périphérique : il sert à la programmer et à dialoguer avec le moniteur série. Elle ne peut pas alimenter ni piloter un autre appareil USB. Le shield USB Host change cela : il s’empile sur la carte et lui donne le rôle d’hôte, celui d’un ordinateur.
La carte est bâtie autour du MAX3421E, le contrôleur hôte USB de Maxim, visible au centre du circuit imprimé. Elle se présente au format shield Arduino Uno : elle se clipse sur les connecteurs de la carte, aucun câblage n’est nécessaire. Le mode ADK (Android Open Accessory) est pris en charge par la bibliothèque : un téléphone Android branché sur le port USB-A devient un périphérique du montage, alimenté et piloté par l’Arduino.
À quoi sert un shield hôte USB ?
Presque tous les composants d’un montage Arduino communiquent par des fils : un capteur de température, un afficheur, un module relais. Mais certains appareils n’exposent qu’un connecteur USB, et leur protocole est fermé. Le shield hôte résout exactement ce cas : il fait parler l’Arduino à ces appareils comme le ferait un ordinateur.
La bibliothèque USB Host Shield Library 2.0, écrite pour ce contrôleur par Oleg Mazurov, Kristian Lauszus et leurs contributeurs, apporte les pilotes : claviers et souris USB, manettes de jeu, clés USB, adaptateurs série, dongles Bluetooth et le protocole ADK d’Android. Le travail d’écriture du pilote USB est donc déjà fait : votre programme se contente de lire des événements.
Caractéristiques techniques
| Contrôleur USB | MAX3421E (Maxim) — contrôleur hôte et périphérique conforme USB 2.0 |
|---|---|
| Vitesses prises en charge | Low-speed 1,5 Mbit/s et full-speed 12 Mbit/s. Pas de high-speed 480 Mbit/s |
| Interface avec l’Arduino | SPI, par le connecteur ICSP |
| Broches sur Uno | SCK D13, MISO D12, MOSI D11, SS D10, INT D9 |
| Broches sur Mega 2560 | SCK D52, MISO D50, MOSI D51, SS D10, INT D9 |
| Connecteur USB | Un port USB-A femelle, en hôte |
| Logique | 3,3 V — les signaux venant d’un Arduino en 5 V passent par des tampons d’adaptation de niveau |
| Alimentation | Prise sur la carte Arduino (broches 5 V, 3,3 V et GND du connecteur de puissance) |
| Sélection d’alimentation | Cavaliers de soudure, repère USB PWR 5V près du connecteur |
| Entrées sorties auxiliaires | Broches GPIN et GPOUT (3,3 V) du MAX3421E, disponibles sur pastilles |
| Divers | Bouton RESET du contrôleur, quartz 12 MHz, quatre trous de fixation |
| Format | Shield Arduino Uno — se monte aussi sur Mega 2560 |
Brochage : ce que la carte occupe sur l’Arduino
Le shield prélève cinq broches sur l’Arduino, et trois d’entre elles ne sont pas négociables :
D11, D12, D13 | MOSI, MISO et SCK du bus SPI, amenés par le connecteur ICSP. Ces broches ne peuvent servir à rien d’autre tant que le shield est monté. |
|---|---|
D10 | SS, la sélection du MAX3421E. Occupée par défaut. |
D9 | INT, l’interruption du contrôleur. Occupée par défaut. |
Les broches SS et INT sont les seules déplaçables. Un cavalier de soudure les relie à D10 et D9 ; en coupant la piste du cavalier et en soudant un fil sur la pastille voisine, on les reporte par exemple sur D7 et D8, puis on met la bibliothèque au courant en modifiant la ligne du fichier UsbCore.h qui déclare le contrôleur. C’est la manœuvre à connaître si un autre shield réclame déjà D9 ou D10.
Les autres broches — analogiques comprises — ne sont pas utilisées par le shield et restent traversantes : elles sont reproduites sur le dessus pour permettre d’empiler une autre carte.
Applications typiques
- Clavier ou souris USB — un pavé numérique, un clavier d’atelier ou une souris deviennent des organes de commande de votre montage.
- Manette de jeu — la bibliothèque gère les manettes PS3, PS4 et Xbox, filaires comme Bluetooth.
- Clé USB — lire un fichier de configuration, journaliser des mesures sur une clé.
- Téléphone Android en mode ADK — le téléphone affiche l’interface, l’Arduino pilote la mécanique, les deux dialoguent par le câble USB.
- Convertisseur série ou adaptateur FTDI — récupérer les données d’un appareil qui ne parle qu’USB.
- Banc de test et instrumentation — brancher un appareil de mesure USB et relever ses trames.
Mini-projet : piloter une LED depuis un téléphone Android (mode ADK)
C’est l’usage qui justifie le mot ADK dans le nom de la carte. Le téléphone devient l’interface, l’Arduino devient la mécanique : ici une LED commandée depuis l’écran du téléphone.
Ce qu’il faut
| La carte de base | Uno R3 + câble USB |
|---|---|
| Le voyant | LED 5mm Rouge |
| Sa protection | Résistances 1/4w 220ohm |
| Les liaisons | 10 câbles Dupont |
| L’alimentation | Alimentation 5v 2A — utile dès que le port USB alimente un appareil gourmand |
Deux bibliothèques sont à installer depuis le gestionnaire de bibliothèques de l’IDE Arduino : la bibliothèque USB Host Shield Library 2.0 pour la carte, et l’application Android ArduinoBlinkLED sur le téléphone, qui implémente le protocole ADK côté mobile.
Le câblage
Le shield s’empile sur la Uno, rien à câbler côté bus USB. La LED, elle, se branche sur une broche restée libre :
| LED, patte longue | → Arduino D8, en passant par une résistance de 220 Ω |
|---|---|
| LED, patte courte | → Arduino GND |
| Téléphone Android | → port USB-A du shield, avec un câble OTG si le téléphone n’a que du micro-USB |
Pourquoi D8 et pas D13 ? Parce que D13 est déjà prise par SCK : la faire clignoter reviendrait à perturber le bus SPI du shield. D9 et D10 sont occupées elles aussi ; D8 est libre.
Le programme
À copier dans l’IDE Arduino, puis à téléverser. Les paramètres passés au constructeur sont les chaînes d’identification que le téléphone affichera :
/*
* Mini-projet ADK : piloter une LED depuis un telephone Android
* Carte : Arduino Uno R3 + ADK USB Host Shield
* Application Android : ArduinoBlinkLED (protocole ADK)
*
* Composants, brochage et fiche complete : www.marocproduits.com
*/
#include "adk.h"
#include "SPI.h"
USB Usb;
ADK adk(&Usb,
"Maroc Produits", // nom du fabricant
"ADK USB Host Shield", // nom du modele
"Exemple de communication ADK", // description lue par le telephone
"1.0", // version
"", // page proposee si aucune application ne repond
"123456789"); // numero de serie, facultatif
const byte BROCHE_LED = 8; // D13 est prise par SCK, D9 et D10 par INT et SS
bool connecte = false;
void setup() {
Serial.begin(115200);
if (Usb.Init() == -1) {
Serial.println("Le shield ne repond pas : verifier qu il est bien empile");
while (1) { }
}
pinMode(BROCHE_LED, OUTPUT);
Serial.println("En attente du telephone, mode accessoire");
}
void loop() {
Usb.Task();
if (adk.isReady()) {
if (!connecte) {
connecte = true;
Serial.println("Telephone connecte, mode accessoire actif");
}
byte message[1];
uint16_t longueur = sizeof(message);
byte code = adk.RcvData(&longueur, message);
if (code != 0 && code != hrNAK) {
Serial.print("Lecture en erreur, code : ");
Serial.println(code, HEX);
} else if (longueur > 0) {
digitalWrite(BROCHE_LED, message[0] ? HIGH : LOW);
Serial.print("Commande recue, valeur recue : ");
Serial.println(message[0]);
}
} else if (connecte) {
connecte = false;
digitalWrite(BROCHE_LED, LOW);
Serial.println("Telephone deconnecte");
}
}Comment ça marche
Usb.Task()doit être appelée à chaque tour de boucle : c’est elle qui fait avancer la machine d’état USB et qui relit les événements. Un programme qui l’oublie ne détecte jamais rien.Usb.Init()renvoie -1 quand le contrôleur ne démarre pas — dans la grande majorité des cas un shield mal enfoncé ou une alimentation insuffisante.adk.isReady()passe à vrai seulement lorsque la négociation ADK est terminée : le téléphone a reconnu l’accessoire et lui a donné la main.adk.RcvData()lit un octet envoyé par le téléphone. Le codehrNAKsignifie simplement « rien à lire pour l’instant » : ce n’est pas une erreur et il ne faut pas l’afficher comme telle.- La LED suit l’octet reçu : l’application Android envoie 0 ou 1 selon l’état de son bouton.
Points d’attention
- La broche 13 est perdue. Elle porte SCK : la LED témoin intégrée de la Uno deviendra inutilisable de façon fiable. Choisissez une autre broche, D8 par exemple.
- L’alimentation du port USB provient de l’Arduino. Un clavier ou une clé USB consomme peu, mais un disque externe ou un appareil gourmand fait chuter la tension. Pour ces cas, alimentez la carte Arduino par un adaptateur secteur plutôt que par le port USB de l’ordinateur.
- Vérifiez la tension de VBUS si un appareil alimenté par le bus refuse de démarrer. Elle dépend du réglage des cavaliers d’alimentation du shield, et beaucoup de claviers et souris fonctionnent mal en dessous de 5 V. Une mesure au multimètre entre VBUS et GND tranche la question en dix secondes.
- Le shield n’est pas compatible high-speed. Webcams, disques durs USB 3 et interfaces audio rapides sont hors de sa portée : il travaille en full-speed 12 Mbit/s, la vitesse des claviers, souris, manettes et clés USB ordinaires.
- Un shield par bus SPI. Un autre shield qui utilise D9, D10 ou le connecteur ICSP entre en conflit. Soit vous reportez SS et INT par cavalier, soit vous empilez dans le bon ordre.
- Alimentez correctement la carte. Pendant l’utilisation du port USB, la consommation dépasse celle d’un montage Arduino habituel ; une alimentation stable évite les déconnexions aléatoires du périphérique.
Questions fréquentes
Le shield ne détecte aucun appareil, que vérifier ?
Dans l’ordre : la bibliothèque est-elle bien installée, la carte est-elle correctement enfoncée dans les connecteurs, le programme appelle-t-il Usb.Task() ? Si tout cela est bon, branchez un appareil simple et connu — une souris USB — plutôt qu’un appareil exotique dont le pilote n’existe peut-être pas. Et si le doute persiste, ce sont les trames SPI qui le lèveront : un analyseur logique branché sur D11, D12 et D13 montre immédiatement si l’Arduino interroge réellement le contrôleur.
Faut-il obligatoirement la bibliothèque ?
Oui, et c’est une bonne nouvelle. Écrire soi-même un pilote USB représente des milliers de lignes ; la bibliothèque USB Host Shield Library 2.0 fournit les pilotes de classes déjà éprouvés. On l’installe en deux clics depuis le gestionnaire de bibliothèques de l’IDE Arduino.
Est-ce que ça marche avec un Mega 2560 ?
Oui, et sans modification : le shield est au format Uno mais se monte sur un Mega, où le bus SPI passe par D50, D51 et D52. Le contrôleur reste sur D10 et D9 comme sur la Uno. Pour un montage qui demande beaucoup d’entrées sorties en plus de l’USB, le Mega 2560 est le choix confortable — il figure dans la liste ci-dessous.
Peut-on l’utiliser sur une carte en 3,3 V ?
La bibliothèque prend en charge plusieurs familles de cartes, y compris l’ESP32, mais l’affectation des broches y est différente : il faut adapter le câblage et renseigner ces broches dans le fichier UsbCore.h. Sur ce shield, les signaux SPI passent par des tampons d’adaptation de niveau, ce qui le rend directement compatible avec les cartes Arduino en logique 5 V.
Quelle différence entre ce shield et le port USB de l’Arduino ?
Aucun rapport. Le port de l’Arduino sert à la programmer et est vu comme un périphérique par l’ordinateur. Le shield, lui, est un hôte : il alimente l’appareil, le détecte et lui parle. C’est exactement le rôle tenu par le port USB d’un ordinateur, dans un format de carte de 5 cm.
À combiner avec
Le montage de cette page tient en cinq éléments, tous listés avec leur référence exacte dans la section du projet : une carte Uno R3, une LED rouge, une résistance de 220 Ω, quelques câbles Dupont et une alimentation stable. Rien d’autre n’est nécessaire pour faire fonctionner le shield.
Deux compléments méritent en revanche une place dans la boîte à outils. Le Mega 2560 + câble USB, d’abord : le même shield s’y monte sans modification et libère des entrées sorties pour le reste du montage. L’Analyseur logique USB 8 entrées ensuite : quand un périphérique refuse de démarrer, il montre ce qui circule réellement sur le bus SPI entre l’Arduino et le contrôleur, au lieu de tâtonner à l’aveugle.














Avis
Il n’y a pas encore d’avis.