Cet été, j’ai acheté quelques cartes XIAO (suite à un article de François Mocq sur son blog Framboise314). Mais j’ai eu une désagréable surprise au moment de la livraison. Le livreur de Chronopost m’a réclamé 13,00 € supplémentaires (de TVA et de frais calculés au pifomètre).
Malheureusement, c’est de plus en plus fréquent, quand on achète en Chine et on ne peut jamais savoir combien ce sera. Normalement, la TVA est à 20% en France. Mais là le montant est complètement aléatoire parce qu’on ne se base pas sur le prix de l’objet et que le transporteur en profite pour prélever des frais exorbitants (avec bien sûr de la TVA sur ces frais, puisqu’il nous rend un « service »).
Que peut choisir le client ?
Le ravisseur transporteur lui annonce qu’il détient un colis (qu’il a déjà payé une fois), mais qu’il pourra le récupérer seulement s’il accepte de payer la rançon demandée. Bien sûr, sinon, l’objet sera exécuté détruit (inutile de prévenir la Police puisque l’état est complice).

Heureusement, Seeed Studio propose maintenant une livraison gratuite (à partir de 3 articles) depuis un nouvel entrepôt situé en Allemagne.
L’entreprise m’a contacté pour que je vous parle de cette nouvelle option de livraison et que je vous présente toute la gamme de cartes de développement Xiao. L’article est donc sponsorisé mais je ne touche aucune autre rémunération (que quelques cartes Xiao gratuites). Je précise aussi que je n’ai pas encore testé cette fameuse livraison depuis l’Allemagne et que je conserve évidement une totale liberté de parole pour vous dire tout ce que je pense de ces produits.
Les cartes Xiao
Les cartes de la gamme Xiao possèdent toutes 2 x 7 = 14 connecteurs, mais il en existe plusieurs modèles (équipées de différents microcontrôleurs).

Attention, ces cartes utilisent une tension de 3,3 V pour communiquer, alors n’envoyez jamais un signal de 5V sur une des entrées (seule l’alimentation peut être en 5V).
Les cartes possèdent une prise USB-C (pour les programmer et éventuellement les alimenter).

A vous de choisir le type de connecteur à souder sur la carte (et la couleur de l’autocollant pour la version SAMD21).

Seeed Studio propose également 2 cartes d’extension compatibles avec les toutes cartes Xiao (j’en reparle un peu plus loin).

XIAO SAMD21
C’est la carte de base, elle est équipée d’un microcontrôleur basse consommation (le même que celui de l’Arduino Zero).
Microcontrôleur | ARM Cortex-M0+ CPU (SAMD21G18) running at up to 48MHz |
Mémoire flash | 256 Ko |
SRAM | 32 Ko |
Broches d’E/S numériques | 11 (de 0 à 10) |
Broches d’E/S analogiques | 11 (de 0 à 10) |
Interface I2C | 1 |
Interface SPI | 1 |
Entrées tactiles | 7 (A0,A1,A6,A7,A8,A9,A10) |
Interface UART (série) | 1 |
Prise USB | Type-C |
Alimentation | 3.3V/5V DC |
Dimensions | 20×17.5×3.5mm |

Pour programmer la carte avec l’IDE Arduino, il faut ajouter les paramètres du microcontrôleur. Pour cela, allez dans Fichier – Préférences et copiez la ligne suivante dans le champ URL de gestionnaire de cartes supplémentaires :
https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json
S’il y a déjà d’autres URL, vous pouvez ajouter celle là, à la suite (en la séparant d’une virgule).

Allez ensuite dans Outils – Type de carte – Gestionnaire de carte, tapez simplement « xiao» dans le champ de recherche, sélectionnez les cartes Seeed SAMD Boards et cliquez sur le bouton Installer.

Vous pouvez maintenant aller dans Outils – Type de Carte – Seeed SAMD (32-bits ARM Cortex-M0+ and Cortex-M4) Boards et sélectionner la carte Seeeduino XIAO.

Reliez la carte XIAO à l’ordinateur et sélectionnez le bon port COM.

Vous pouvez tester rapidement la programmation de la carte avec le code suivant (modifiez la vitesse de clignotement en jouant sur la durée de la fonction delay).
int LEDINTERNE = 13;
void setup() {
pinMode(LEDINTERNE, OUTPUT);
}
void loop() {
digitalWrite(LEDINTERNE, HIGH);
delay(1000);
digitalWrite(LEDINTERNE, LOW);
delay(1000);
}
Si tout s’est bien passé, vous disposez maintenant d’un mini-Arduino.

XIAO nRF52840 (Sense)
La carte conserve le même format, mais elle bénéficie d’un microcontrôleur plus puissant, de plus de mémoire, d’une connexion Bluetooth, d’une LED RGB. Il existe une version normale (sans capteurs) et une version Sense avec quelques capteurs en plus (accéléromètre, gyroscope, microphone).
Microcontrôleur | nRF52840 M4F@64MHz |
Connectivité sans fil | Bluetooth 5.0/BLE/NFC |
Mémoire flash | 2 Mo |
SRAM | 256 Ko |
Broches d’E/S numériques | 11 (de 0 à 10) |
Broches d’E/S analogiques | 6 (de 0 à 5) |
Interface I2C | 1 |
Interface SPI | 1 |
Interface UART (série) | 1 |
LED embarquées | LED RGB |
Capteurs (version Sense) | IMU 6 degrés de liberté (LSM6DS3TR-C), microphone PDM |
Prise USB | Type-C |
Alimentation | 3.3V/5V DC |
Dimensions | 20×17.5×3.5mm |

Pour ajouter les paramètres du microcontrôleur, allez dans Fichier – Préférences et copiez la ligne suivante dans le champ URL de gestionnaire de cartes supplémentaires :
https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json
Evidement, si vous avez déjà fait ça pour utiliser la XIAO SAMD21, inutile de refaire cette étape. Dans ce cas, passez directement à la suivante.

Allez ensuite dans Outils – Type de carte – Gestionnaire de carte, tapez simplement « xiao» dans le champ de recherche. Il existe 2 bibliothèques pour la carte. En fonction de vos besoins vous pouvez en installer une seule mais le plus simple est certainement d’installer les 2. Sélectionnez-les et cliquez sur le bouton Installer.

Vous pouvez maintenant aller dans Outils – Type de Carte… et sélectionner la carte Seeed XIA BLE Sense – nRF52840.

Reliez la carte XIAO à l’ordinateur et sélectionnez le port COM correspondant à la carte.

Je vous propose maintenant de tester l’accéléromètre, le gyroscope et le capteur de temperature. Pour cela, je me suis simplement inspiré des instructions fournies dans la documentation officielle.
Allez dans Outils – Gérer les bibliothèques, tapez « LSM6DS3 » dans le champ de recherche, sélectionnez la bibliothèque Seeed Arduino LSM6DS3 et cliquez sur Installer.

Allez ensuite dans Fichier – Exemples – Seeed Arduino LSM6DS3 – HighLevelExample et ouvrez le sketch d’exemple.

Téléversez le programme, ouvrez le moniteur série et observez comment les données changent lorsque la carte bouge.

XIAO RP2040
Cette carte utilise le même microcontrôleur que le Raspberry Pi Pico. Vous pouvez donc la programmer avec l’IDE Arduino, mais aussi en MicroPython, en CircuitPython et même en Rust (voir les liens utiles à la fin de l’article).
Microcontrôleur | Dual-core ARM Cortex M0+ processor up to 133MHz |
Mémoire flash | 2 Mo |
SRAM | 264 Ko |
Broches d’E/S numériques | 11 (de 0 à 10) |
Broches d’E/S analogiques | 4 (de 0 à 3) |
Interface I2C | 1 |
Interface SPI | 1 |
Interface UART (série) | 1 |
LED embarquées | LED RGB |
Prise USB | Type-C |
Alimentation | 3.3V/5V DC |
Dimensions | 20×17.5×3.5mm |

Vous pouvez programmer la carte avec Thonny, exactement comme s’il s’agissait d’un Raspberry pi Pico (n’hésitez pas à consulter aussi mes autres articles qui en parlent).

Voilà par exemple comme modifier la couleur de la LED RGB interne. Mais auparavant, téléchargez et installez la bibliothèque ws2812.py
from ws2812 import WS2812
from time import sleep
import machine
import random
power = machine.Pin(11,machine.Pin.OUT)
power.value(1)
led = WS2812(12,1)#WS2812(pin_num,led_count)
while True:
rouge = random.randint(0, 25)
vert = random.randint(0, 25)
bleu = random.randint(0, 25)
led.pixels_fill((rouge, vert, bleu))
led.pixels_show()
sleep(1)

XIAO ESP32C3
Cette carte utilise un microcontrôleur très courant qui lui permet de se connecter en WiFi et en Bluetooth. Je ne sais pas si c’est exactement le même, mais il est très proche de celui de la PYBStick ESP32 (dont je vous ai parlé il n’y a pas très longtemps). La documentation officielle de SeeedStudio évoque seulement la programmation avec l’IDE Arduino, mais comme pour la PYBStick, il devrait être également possible de programmer la carte en MicroPython.
Microcontrôleur | ESP32-C3 32-bit RISC-V @160MHz |
Connectivité sans fil | WiFi and Bluetooth 5 (LE) |
Mémoire flash | 4 Mo |
SRAM | 400 Ko |
Broches d’E/S numériques | 11 (de 0 à 10) |
Broches d’E/S analogiques | 4 (de 0 à 3) |
Interface I2C | 1 |
Interface SPI | 1 |
Interface UART (série) | 1 |
Prise USB | Type-C |
Alimentation | 3.3V/5V DC |
Dimensions | 20×17.5×3.5mm |

Pour ajouter les paramètres du microcontrôleur (ESP32-C3) dans l’IDE Arduino, allez dans Fichier – Préférences et copiez la ligne suivante dans le champ URL de gestionnaire de cartes supplémentaires :
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json
S’il y a déjà d’autres URL, vous pouvez ajouter celle là, à la suite (en la séparant d’une virgule).

Allez ensuite dans Outils – Type de carte – Gestionnaire de carte, tapez « esp32 » dans le champ de recherche et cliquez sur le bouton Installer.

Vous pouvez maintenant aller dans Outils – Type de Carte – ESP32 Arduino et sélectionner la carte XIAO_ESP32C3.

Reliez la carte XIAO à l’ordinateur et sélectionnez le port COM.

Reliez une LED à la masse et au port D10 (avec une résistance d’environ 220 Ω en série).

Copiez le code suivant dans l’IDE Arduino :
// define led according to pin diagram
int led = D10;
void setup() {
// initialize digital pin led as an output
pinMode(led, OUTPUT);
}
void loop() {
digitalWrite(led, HIGH); // turn the LED on
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off
delay(1000); // wait for a second
}
Vous pouvez essayer de lancez directement le téléversement, mais vous risquez de rencontrer un message d’erreur de ce type.

Pour résoudre le problème, appuyez sur le bouton BOOT et laissez le doigt appuyé sur le bouton, appuyez brièvement sur le bouton RESET (en gardant toujours le doigt sur le bouton BOOT).

Maintenant, vous pouvez relâcher le bouton BOOT, lancer le téléchargement et redémarrer la carte en appuyant sur le bouton RESET.

Alors, oui, c’est un peu contraignant parce qu’il faut refaire cette manipulation à chaque fois, mais au moins ça fonctionne…
Grove Shield
Cette carte d’extension possède 8 connecteurs Grove, mais si vous la trouvez trop grande, sachez qu’il est possible de la raccourcir simplement en la cassant en 2 (suivant les pointillés). Evidement, l’opération est irréversible.

Il existe énormément de modules Grove. Ils sont beaucoup utilisés dans le monde de l’éducation parce qu’il simplifient les branchement (en réduisant les risques de faux contact et de court circuit).

XIAO Expansion board
Cette carte est un peu plus chère mais elle apporte de nombreuses fonctions supplémentaire (connecteurs Grove, bouton programmable, Buzzer, lecteur de carte SD, horloge en temps réel, écran OLED de 0.96″, prise pour batterie Lipo 3,7V et servomoteur).

SeeedStudio propose aussi un boitier acrylique transparent (en option), qui protège de façon élégante la carte d’extension. Les possibilités offertes par cette carte sont énormes. Branchez un capteur de température (et d’humidité) au format Grove et vous pourrez fabriquer un thermomètre /hygromètre. Pour le rendre autonome, alimentez la carte avec une batterie (Lipo 3,7V).

Voilà le code utilisé, je compte sur vous pour le personnaliser et/ou l’améliorer…
// XIAO_SAMD21_TemperatureDHT
// Appel des bibliothèques
#include <Arduino.h>
#include <U8x8lib.h>
#include <Wire.h>
#include <DHT.h>
// Constances et variables
const int CAPTEUR_TEMP = 0;
int t, h;
//Ecran OLED
U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* clock=*/ PIN_WIRE_SCL, /* data=*/ PIN_WIRE_SDA, /* reset=*/ U8X8_PIN_NONE); // OLEDs without Reset of the Display
// Sélectionnez votre capteur
DHT dht(CAPTEUR_TEMP, DHT11);
//DHT dht(CAPTEUR_TEMP, DHT22);
void setup(void) {
// Capteur température DHT
dht.begin();
u8x8.begin();
u8x8.setFlipMode(1); // set number from 1 to 3, the screen word will rotary 180
}
void loop(void) {
t = round(dht.readTemperature());
h = round(dht.readHumidity());
//u8x8.setFont(u8x8_font_chroma48medium8_r);
u8x8.setFont(u8x8_font_amstrad_cpc_extended_r);
u8x8.setCursor(4, 0);
u8x8.print("ARDUIBLOG");
u8x8.setCursor(0, 3);
u8x8.print("Temperature : ");
u8x8.print(t);
u8x8.setCursor(0, 6);
u8x8.print("Humidite : ");
u8x8.print(round(dht.readHumidity()));
delay(10000);
}
Vous pouvez aussi vous servir de l’horloge temps réel et du lecteur de carte SD pour faire des relevés de températures et d’humidité toutes les heures et récupérer ensuite les données (de la carte SD) pour faire de jolis graphiques. Ou envoyer les données en Wifi avec le XIAO ESP32C3.
Conclusion
Les cartes de la série Xiao sont compactes et leur prix est très bas (entre 5,00 € et 16,00 €, suivant le modèle). Le choix du microcontrôleur, du type de connecteur à souder et la compatibilité avec les nombreux modules Grove leur permet de s’adapter à toutes les utilisations (éducation, domotique, iot etc…).
