Grove est le système plug-and-play de Seeed Studio — un connecteur à quatre broches, un câble, et quelques centaines de modules qui le partagent. Un bouton, un capteur de température, un relais, un OLED, une caméra thermique et une radio LoRa se branchent tous sur la même prise, ce qui explique pourquoi tant de premiers projets sont construits dessus.
Depuis septembre 2026, 222 des 279 modules du catalogue Grove de Seeed s’exécutent dans Velxio. Chacun possède sa propre pièce sur le canevas, dessinée d’après la photo du produit, une fiche technique avec le lien vers la boutique de Seeed, et un exemple de galerie adapté du wiki de Seeed lui-même, câblé à une carte XIAO. Cet article explique ce que cela signifie en pratique.
À quoi ressemble un module Grove sur le canevas

Chaque module est dessiné d’après la photo du produit de Seeed, avec le connecteur, les composants et la sérigraphie là où ils se trouvent sur la carte, et il porte le nom de produit exact de Seeed. Les broches sont les quatre lignes du connecteur, nommées comme la sérigraphie les nomme, de sorte qu’un fil partant de SIG ou SDA arrive là où il arriverait sur l’établi.
Ce que vous obtenez avec chaque pièce :
- Une fiche technique. Cliquez sur la pièce et la boîte de dialogue affiche ce qu’est le module, quelle puce il embarque, son adresse I2C lorsqu’il en a une, et un bouton Product page vers la boutique de Seeed.
- Les commandes dont un vrai module aurait besoin. Un capteur analogique reçoit un curseur pour la grandeur qu’il mesure. Un bouton est cliquable. Un relais clique et allume sa LED. Un écran peint ce que le sketch envoie. Une radio reçoit un panneau qui joue l’autre bout de la liaison.
- Un exemple de galerie. Chaque module est livré avec un sketch adapté du wiki de Seeed, câblé à un XIAO ESP32-C6, avec les bibliothèques dont le sketch a besoin déjà déclarées. Ouvrez-le, appuyez sur Run, et le module répond.
Pour les trouver, ouvrez le sélecteur de composants et tapez « Grove », ou ouvrez la galerie d’exemples et filtrez par Seeed Studio.
Essayez-en trois
Les étapes sont les mêmes pour chaque exemple :
- Ouvrez le lien de l’exemple. Vous n’avez pas besoin de compte.
- Appuyez sur le bouton lecture de la barre d’outils. Le sketch se compile sur les serveurs de Velxio et la carte démarre dans votre navigateur.
- Déplacez les curseurs du module, cliquez sur ses boutons, ou regardez-le dessiner.
Une caméra thermique. Le MLX90640 est une matrice 32 par 24 de thermopiles. Le sketch récupère l’EEPROM de calibration du capteur, lit une trame et exécute les calculs radiométriques de Melexis lui-même, puis imprime la trame sur le moniteur série en art ASCII. La pièce affiche la même trame sous forme de carte thermique ; le curseur définit où se trouve le point chaud et à quelle température.

Deux moteurs sur un seul pilote. L’I2C Motor Driver embarque un TB6612FNG derrière un petit STM32 qui parle un protocole de commande. L’exemple fait tourner deux moteurs DC en avant, en arrière et en freinage ; les rotors sur le canevas tournent à la vitesse et dans la direction commandées, et le freinage les bloque.

Un OLED. Le SSD1315 de 0,96” est l’écran avec lequel la plupart des kits Grove sont livrés. L’exemple est le hello world u8g2 de Seeed — une ligne de texte et un compteur, envoyés en I2C à l’adresse 0x3C, peints par un modèle du contrôleur.

Comment un module est émulé
Rien ici n’est simulé au niveau de la bibliothèque. Le sketch est compilé par un vrai arduino-cli pour la carte que vous avez choisie, le firmware s’exécute sur l’émulateur de Velxio pour ce SoC, et le module répond sur le fil comme la pièce le ferait. Ce qui diffère d’un module à l’autre, c’est ce qu’est « le fil » :
- Les modules analogiques (32 d’entre eux — lumière, son, humidité, gaz, courant, température) appliquent une tension sur
SIG, fixée par le curseur. Le sketch la lit avecanalogRead()via le modèle d’ADC de la carte. - Les entrées et sorties numériques sont un niveau sur
SIG— boutons, interrupteurs, capteurs PIR et tactiles d’un côté, LED, relais et buzzers de l’autre. - Les modules à impulsions et à temporisation tels que l’Ultrasonic Ranger et la famille DHT utilisent un modèle de ligne — les fronts sont planifiés sur l’horloge propre du CPU émulé, car une trame DHT22 se compte en microsecondes et une trame de navigateur en seize millisecondes.
- Les modules NeoPixel et PWM décodent la forme d’onde produite par le sketch.
- Les modules I2C, UART et SPI forment le groupe le plus important — 84 modules sur 78 modèles de périphériques écrits en C et compilés en WebAssembly. Chaque modèle répond aux lectures de registres et aux commandes qu’envoie le pilote du fabricant, et le même code source C s’exécute dans le navigateur et dans les émulateurs cloud de Velxio pour les cartes qui y tournent.
Les modèles de périphériques sont courts, car la plupart des pièces suivent l’une de quelques formes — une carte de registres avec un pointeur à auto-incrémentation, un périphérique à commandes de style Sensirion avec un CRC-8 sur chaque mot, ou une trame plate que le capteur diffuse. Le modèle du SHT31 est l’intégralité du capteur de température et d’humidité de Seeed, moins les commentaires :
static uint32_t handle(sn_dev* d, uint16_t cmd, const uint16_t* args, uint32_t nargs, uint16_t* w) {
(void)d; (void)args; (void)nargs;
switch (cmd) {
case 0x306D: heater = true; return 0;
case 0x3066: heater = false; return 0;
case 0x30A2: heater = false; return 0; /* soft reset */
case 0x3093: return 0; /* break */
case 0x3041: return 0; /* clear status */
case 0xF32D: { /* status register */
uint16_t st = heater ? 0x2000 : 0x0000;
w[0] = st; return 1;
}
default: break;
}
/* Everything else is a measurement request (single shot, periodic, fetch). */
double t = vx_attr_read(A_temp) + (heater ? 2.0 : 0.0);
double h = vx_attr_read(A_hum);
w[0] = gc_u16((gc_clamp(t, -45, 130) + 45.0) * 65535.0 / 175.0);
w[1] = gc_u16(gc_clamp(h, 0, 100) * 65535.0 / 100.0);
return 2;
}
A_temp et A_hum sont les deux curseurs. La conversion est celle de la fiche technique du SHT31, exécutée à l’envers — le curseur indique 25 degrés, le modèle produit le mot brut que le pilote retransformera en 25 degrés, CRC compris.
D’où viennent les modèles
Chaque modèle est écrit à partir d’un document : la fiche technique du composant, ou la bibliothèque du fabricant qui communique avec lui, lue ligne par ligne. Quand aucun des deux n’existait, le module a été laissé de côté plutôt que deviné. Trois cas montrent ce que cela impliquait.
Les caméras thermiques ont dû être dérivées, et non transcrites. Un pilote thermique ne lit jamais une température. Il extrait 832 mots d’EEPROM, en tire environ deux cents constantes de calibration, lit 832 mots de données de trame et exécute le modèle du fabricant. Le modèle MLX90640 fournit donc une calibration dégénérée dans laquelle chaque terme de correction s’annule, et remonte les calculs à l’envers depuis la température demandée par le curseur jusqu’au mot brut qui la produit. Il a été vérifié contre un portage du pilote avant qu’aucun C ne soit écrit ; une cible de -20 à 300 degrés boucle à 0,02 degré près. Le MLX90641 a nécessité la même astuce plus une EEPROM codée en Hamming, et le MLX90621, pour lequel Seeed ne publie rien, provient du pilote de référence de Melexis.
L’exemple du pilote de moteur utilise Wire brut. La bibliothèque de Seeed pour la
carte TB6612FNG embarque un assistant I2C de l’ère AVR qui ne compile pas pour un
ESP32, donc l’exemple parle directement le protocole. C’est un octet de commande et
sa charge utile :
const uint8_t ADDR = 0x14;
const uint8_t BRAKE = 0x00, CW = 0x02, CCW = 0x03;
const uint8_t STANDBY = 0x04, NOT_STANDBY = 0x05;
const uint8_t CHA = 0, CHB = 1;
void cmd(uint8_t c, const uint8_t* payload, uint8_t n) {
Wire.beginTransmission(ADDR);
Wire.write(c);
for (uint8_t i = 0; i < n; i++) Wire.write(payload[i]);
Wire.endTransmission();
delay(1);
}
void run(uint8_t channel, int speed) {
uint8_t p[2] = { channel, (uint8_t)(speed < 0 ? -speed : speed) };
cmd(speed >= 0 ? CW : CCW, p, 2);
}
Le module CAN BUS n’est pas une conception Seeed. Il a d’abord été laissé de côté parce
que Seeed ne publie ni protocole ni bibliothèque pour lui. La carte est fabriquée par
Longan Labs, qui publie les deux, et le modèle suit leur disposition de trame :
0xAA, une longueur, une commande, la charge utile et un CRC MODBUS.
Chaque modèle dispose d’un test qui le pilote comme le fait son pilote, octet par octet : 1 804 au total dans le catalogue en septembre 2026. Les exemples de la galerie ont également été exécutés sur l’application déployée, pas seulement dans la suite de tests.
Ce qui n’est pas dans le catalogue
Soyons francs sur les lacunes : 57 des 279 références ne sont pas modélisées, et trois groupes expliquent celles qui pourraient l’être.
- Le module DMX512. La carte est un pilote de ligne ; la difficulté est qu’aucune bibliothèque Arduino ne produit une trame DMX sur un XIAO comme la carte l’attend.
- Le kit Simple RF Link 433 MHz. Ses sketches utilisent VirtualWire, qui n’est pas dans l’index des bibliothèques Arduino, et la moitié réceptrice nécessiterait que le module génère un flux de bits vers la carte plutôt que de lui répondre.
- Trois cartes vendues sous le nom Grove : le Grove Beginner Kit, l’Arduino Sensor Kit Base et le GrovePi+. Ce sont des cartes avec un microcontrôleur plutôt que des modules, et elles nécessitent leurs propres définitions de carte.
Le reste, ce sont des câbles, du matériel de montage et des kits.
Où aller ensuite
- Le sélecteur de composants : appuyez sur Add Component sur le canevas et tapez « Grove ». Chaque carte est un module ; la description indique ce qu’il fait.
- La galerie d’exemples sur velxio.dev/examples, filtrée par Seeed Studio, contient un exemple par module.
- Les modules sont sur la boutique de Seeed sous Grove ; la fiche technique de chaque composant renvoie à sa page.
Les illustrations des modules sont tirées des photographies de produits de Seeed Studio.