Après la PYBStick26 en 2020 et la PYBStick RP2040 en 2021, Frédéric Pierson nous propose cette année une nouvelle carte au même format (2 x 13 pins), avec cette fois-ci un microcontrôleur ESP32. Une puce qui permet de communiquer en WiFi (802.11 b/g/n) ou en Bluetooth 5.
Parmi les autres nouveautés du millésime 2022, il y a aussi une LED adressable RGB (SK6812) et la possibilité de choisir entre 2 versions :
- Une avec la prise micro USB (femelle) qui équipait nos smartphone il n’y a pas si longtemps,
- L’autre avec l’habituelle prise USB A (male).
Mais pour le reste, les 2 PYBStick sont parfaitement identiques.

Frédéric m’a envoyé ces cartes gratuitement (pour que je les teste). Il s’agit donc d’un article subventionné, mais je ne touche aucune autre rémunération. Bien sûr, je risque de manquer un peu d’objectivité parce que Fred est un ami et que j’admire son travail mais je n’hésiterai pas à vous dire honnêtement ce que je pense (et à aborder aussi les points négatifs).
Présentation
Pour commencer, il faut souder soi-même les connecteurs. Je trouve que c’est une bonne chose, ce n’est pas très compliqué et ça vous permet éventuellement de personnaliser la carte en choisissant le type (male ou femelle) et éventuellement la couleur des connecteurs.

Pour pouvoir utiliser les cartes d’extension, il faudra utiliser les classiques connecteurs femelles.

Mais puisque ces cartes sont pas totalement compatibles (voir la suite du test), les connecteurs males peuvent également être un bon choix, car ils permettent d’utiliser une breadboard (et évidement des câbles avec connecteur femelle).

C’est bien que le nom des pins soit sérigraphié au dos (ce n’est malheureusement pas le cas de toutes les cartes de cette taille). Ça aurait été plus pratique de l’autre coté, mais évidement il n’y avait pas la place.

La nouvelle PYBStick ne respecte pas tout à fait le format des précédentes versions. Elle possède une petite excroissance (à cause de l’antenne).

De plus, les 2 boutons ne sont pas situés au même endroit

La carte n’est donc pas compatible avec les anciens boitiers.

Alors j’ai modifié la ceinture et le dessus du boitier. Vous trouverez les fichiers 3D sur Printables. N’oubliez pas de tordre un peu la partie du couvercle qui presse sur les boutons (pour qu’elle n’appuie pas dessus en permanence).

J’apprécie beaucoup ce look « clé USB »

Heureusement, l’emplacement des ports VIN, 3.3V, GND et entrées/sorties reste exactement le même (que pour les précédentes PYBStick). Toutefois, il y a seulement 11 GPIO (4 broches ne sont pas utilisées) parce que l’ESP32-C3 ne possède pas suffisamment d’entrées/sorties pour le format 2 x 13 = 26 pins de la PYBStick.

MicroPython
Le langage MicroPython est préinstallé, si vous alimentez la PYBStick, le programme de démonstration s’exécute et la LED RGB affiche successivement les couleurs bleu, blanc et rouge (certainement un petit clin d’œil à son origine française). Pour reprogrammer la carte lancez le logiciel Thonny (que vous pouvez télécharger ici), allez dans Exécuter – Configurer l’interprétateur…, sélectionnez MicroPython (ESP32) et port correspondant à la carte (ou laissez « Essayer de détecter le port automatiquement« ).

Vous pouvez taper directement des instructions dans la console, mais pour conserver le code il faut l’enregistrer dans le fichier main.py
Cliquez sur la 2ème icone (une disquette avec une flèche vers le haut), puis sur appareil MicroPython.

Sélectionnez le fichier main.py et cliquez sur OK.

Lancez ou arrêtez le programme de démonstration avec le triangle sur fond vert ou le carré sur fond rouge.
Si vous rencontrez un message d’erreur (en rouge), débranchez et rebrancher la carte.

Vous pouvez étudier le code et bien sûr vous amuser à le modifier :
from machine import Pin
import time
from apa106 import APA106
rgb_led = Pin(8, Pin.OUT)
ap = APA106(rgb_led, 1)
ap[0] = (0, 0, 0) # set the led to RGB
ap.write()
not_end = 1
while not_end:
ap[0] = (0, 0, 64) # set the led to GRB
ap.write()
time.sleep_ms(300)
ap[0] = (64, 64, 64) # set the led to GRB
ap.write()
time.sleep_ms(300)
ap[0] = (0, 64, 0) # set the led to GRB
ap.write()
time.sleep_ms(300)
ap[0] = (0, 0, 0) # set the led to GRB
ap.write()
time.sleep(1)
Ensuite, je vous propose de relier une LED au GPIO 6 (ou choisir une autre entrée/sortie).

Et de la faire clignoter la LED avec le code suivant :
from machine import Pin
from time import sleep_ms
ledExterne = Pin(6, Pin.OUT)
while True:
ledExterne.value(1)
sleep_ms(500)
ledExterne.value(0)
sleep_ms(500)
Je pensais pouvoir utiliser la carte de prototypage (anciennement appelée PROTO-FACE) mais malheureusement les connecteurs grove ne fonctionnent pas avec cette nouvelle PYBStick (l’une des pin n’est pas reliée et l’autre est déjà utilisée par la LED adressable RGB). Il est éventuellement possible d’utiliser le connecteur Raspberry, mais avec seulement 10 GPIO disponibles, ce sera difficile de trouver des cartes Hat compatibles. Seule la zone de prototypage peut éventuellement présenter un intérêt, pour souder des composants en dur.

Mais dans ce cas, une carte vierge fera aussi bien parfaitement l’affaire…

Sinon, autant utiliser directement une bonne vieille breadboard (à condition d’avoir soudé des connecteurs males).

Pour utiliser les modules Grove, il est possible de fabriquer ce type d’adaptateur. Attention, dans cet exemple c’est le GPIO 7 (relié au fil jaune) qui fait clignoter la LED, j’ai donc légèrement modifié le code indiqué plus haut.

Ce n’est pas très compliqué, il suffit simplement de sertir 4 connecteurs Dupont sur un cable Grove (coupé en 2). Pour cela, il existe des pinces spéciales, mais avec un peu de pratique, c’est tout à fait possible avec une petite pince.

Vous trouverai à la fin de cette page des liens vers les articles de François Mocq, Dominique Meurisse et Papsdroid qui ont eux aussi testé la PYBStick ESP32.
L’IDE Arduino
Attention, nous allons effacer le firmware MicroPython, alors si vous souhaitez garder la possibilité de revenir en arrière, je vous conseille de sauvegarder la carte avec ESPtool (la procédure est expliquée un peu plus loin dans l’article).
Pour programmer la carte en langage Arduino, il faut rajouter les paramètres du microcontrôleur (ESP32-C3-mini-1) dans l’IDE Arduino.
Pour cela, 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.

Cela peut prendre quelque minutes, profitez en pour vous lever et faire quelques exercices d’assouplissement (vous passez certainement trop de temps assis sur votre fauteuil de bureau).

Vous pouvez maintenant aller dans Outils – Type de Carte – ESP32 Arduino et sélectionner la carte LOLIN C3 Mini (j’ai eu un message d’erreur en sélectionnant tout de suite ESP32C3 Dev Modules).

Reliez la PYBStick à l’ordinateur et sélectionnez le Port COM. On pourrait certainement affiner certains paramètres, mais pour l’instant, laissez-les par défaut.

Utilisez le même branchement qu’en MicroPython (la LED reliée au GPIO 6).

Et téléversez le programme suivant :
// PYBStick ESP32 Test LED
int LED = 6;
void setup() {
pinMode(LED,OUTPUT);
}
void loop() {
digitalWrite(LED, HIGH);
delay(1000);
digitalWrite(LED, LOW);
delay(1000);
}
Mais il y a de fortes chances que le 1er téléversement échoue (je pense que le firmware MicroPython bloque l’accès au port série).

Si vous rencontrez ce problème :
- Assurez vous que les autres programmes qui utilisent eux aussi le port série (comme par exemple Thonny) sont bien fermés.
- Débranchez la PYBStick ESP32
- Appuyez sur le bouton BOOT
- Rebranchez la carte (en gardant le doigt sur le bouton)
- Lancez le téléversement
- Attendez la fin du téléversement pour relâcher le bouton BOOT

Si ça ne fonctionne toujours pas, utilisez ESP tool pour effacer le Firmware MicroPython (j’explique comment faire un peu plus loin).
Heureusement, il n’est pas nécessaire de répéter cette procédure pour les téléversements suivants. Désormais, vous pouvez programmer le microcontrôleur normalement (sans presser sur le bouton BOOT).
Si à ce stade vous rencontrez encore des erreurs de compilation, débranchez et rebranchez la PYBStick ou essayez de sélectionner la carte ESPC3 Dev Module.

Réinstallation du firmware Micropython
ESPtool vous permet de copier, effacer ou sauvegarder le contenu de l’ESP32. Pour cela, téléchargez et installez la dernière version de Python. Cochez la case Add Python 3.10 to PATH et cliquez sur Install Now.

Ensuite faites un clic droit sur l’icône Windows, sélectionnez Terminal (administrateur), répondez Oui à la question Voulez-vous autoriser… et tapez le texte suivant (et bien sûr, appuyez sur Entrée) :
pip install esptool
À la fin de l’installation vous pouvez vérifier que tout s’est bien passé en tapant :
esptool.py version

Branchez la PYBStick à l’ordinateur et tapez l’instruction suivante pour avoir des infos sur la carte (notamment le numéro de port série) :
esptool.py flash_id

Voilà comment sauvegarder le contenu de la carte (adaptez le numéro de port, le nom du fichier bin et son chemin) :
esptool.py -p COM23 -b 460800 read_flash 0x0 0x400000 C:\PYBStick_ESP32.bin

Et comment restaurer l’image (précédemment sauvegardée) :
esptool.py -c esp32c3 -p COM23 -b 460800 write_flash 0x0 C:\PYBStick_ESP32.bin

Il est possible d’effacer la mémoire de la carte (sans installer de firmware) :
esptool.py -c esp32c3 -p COM23 erase_flash

Mais vous pouvez aussi tester un autre firmware.
Attention, n’installez pas n’importe quel firmware depuis une source douteuse, il y a certainement un risque de briquer la carte (et bien sûr dans ce cas, je décline toute responsabilité).
Par exemple, téléchargez la dernière version du firmware MicroPython ESP32-C3 with USB et tapez (en adaptant bien sûr, le numéro de port, le nom du fichier bin et son chemin) :
esptool.py -c esp32c3 -p COM23 -b 460800 write_flash -z 0x0 C:\esp32c3-usb-20220618-v1.19.1.bin

Mais ce n’est pas toujours aussi facile, il y a parfois des problèmes de communication qui bloquent l’accès au port série (comme lors du 1er téléversement avec l’IDE Arduino).

Malheureusement, je n’ai pas de recette miracle à vous proposer, il vous faudra un peu de patience et de persévérance. Mais je vais vous donner quelques pistes et après plusieurs tentatives vous devriez parvenir à débloquer votre carte.
- Débranchez et rebranchez la carte
- Ouvrez le Gestionnaire de périphériques (clic droit sur le bouton Windows), débranchez la carte, rebranchez la, tapez votre commande dans le terminal, appuyez sur les 2 boutons à la fois (le périphérique série USB COM23 disparait), relâchez les boutons et aussitôt que le périphérique série USB réapparaît, appuyez sur la touche Entrée.

- Et si ça ne fonctionne toujours pas, essayez de re-flasher la carte avec l’IDE Arduino…
Conclusion
Les 2 cartes PYBStick ESP32 (micro USB et USB A) sont déjà disponibles chez MC Hobby pour une dizaine d’euros. Alors si vous cherchez un ESP32 fabriqué avec amour par un petit artisan Français (à gauche sur la photo) à un prix très raisonnable, n’hésitez pas…

Merci JC pour ce bel article. Pour en revenir au téléchargement avec esptool.py, les difficultés viennent du fait que j’ai banni le circuit CP2102 (convertisseur USB-UART) pour utiliser le contrôleur USB natif de l’ESP32C3. Donc plus de signaux de contrôles RTS-CTS pour piloter le reset et le gpio8 pour rentrer le micro en mode bootloader. Il faut donc effectivement jouer des boutons pour forcer ce mode à la main. Mais on récupère au passage une uart de libre. Rendez-vous sur le forum.mchobby.be pour en discuter 😉
J’aimeJ’aime
Le processeur (esp32-c3) est un processeur récent de espressif, et le coeur est un RISC-V. Cela vaut le coup de le préciser, non ? 🙂
J’aimeJ’aime
Bonjour Orzel,
Merci pour cette précision.
Pour les infos plus techniques, j’ai mis à la fin de l’article un lien la fiche produit (où on trouve toutes les caractéristiques du microcontrôleur).
J’aimeJ’aime