PicoCalc de ClockWorkPi (partie 1)
Bonjour à tous,
Comme moi, vous avez certainement croisé des vidéos sur le PicoCalc de ClockWorkPi, ce périphérique portable propulsé par un Raspberry-Pi Pico.
![]() |
PicoCalc de ClockWorkPi |
Ce que j'aime beaucoup dans ce périphérique portable de 16x10cm c'est qu'il est propulsé par un Raspberry-Pi Pico tout en offrant de nombreuses fonctionnalités comme:
- Un grand écran IPS 4" (320x320 pixel couleur). La technologie IPS permet d'avoir un écran qui reste lisible sur un grand angle de vue.
- Un clavier rétro-éclairé assez complet.
- Un lecteur de carte SD pour un stockage complémentaire
- Des haut-parleurs (visiblement pas si mauvais que cela) et sortie Audio.
- Deux accus 18650 indépendants l'un de l'autre... ce qui permet de changer l'accu sans éteindre le PicoCalc.
- 8 Mio de PSRAM, pour les applications gourmandes
- Un GPIO Pico + un GPIO STM32 facilement accessible
En équipant le PicoCalc avec un Pico2 WH, nous avons un système Dual Core cadencé à 150 Mhz avec 150 Kio de RAM et un module WiFi + BlueTooth.
Le tout dans un magnifique boîtier disposant même d'une protection pour l'écran.
Le Hardware
Sur base des informations disponibles sur le dépôt GitHub de PicoCalc, j'ai réussi a identifier quelques éléments intéressants.
Pour commencer, la carte comporte également un microcontrôleur STM32 qui prend en charge:
- la gestion du clavier,
- le retro-éclairage du clavier (KEY_BL sur PC8)
- la luminosité de l'écran (LCD_BL sur PA8)
- la gestion de l'alimentation Pico
- contrôle de la broche RUN depuis PA13,
- gestion de l'AXP2101 (Power Management Unit pour les Lipo) via le bus I2C M_I2C2 du STM32
Le clavier est est interrogé par le Pico par l'intermédiaire du bus I2C(1) en relation direct avec le bus M_I2C1 du STM32 (PB8 et PB9).
Ce même bus I2C peut aussi être utilisé pour y connecter des capteurs. Il semblerait que cela soit le bus I2C(1) avec les GP6=sda et GP7=scl
Le rétro-éclairage est configurable à l'aide de DIP switch (juste en dessous de la carte SD).
L'afficheur est contrôlé directement par le bus SPI(1) du Pico tandis que le retro-élcairage est, lui, prit en charge par un microcontrôleur STM32 présent sur la carte.
![]() |
Connecteur Pico sur le PicoCalc |
Les éléments suivants sont raccordés directement sur le Pico:
- Audio en PWM sur GP26 et GP27.
- Carte SD sur le bus SPI(0) avec les GP22 (détection SD), GP19,18,17,16
- PSRAM sur les GP21,20,2,3,4,5 . La PSRAM est visiblement un ajout sur la version V2.0 du PicoCalc
Le nombre d'IO utilisés permet d'accroître le taux de transfert et d'assurer des performances honorables.
Les connecteurs GPIOs
Le connecteur est divisé en deux parties. Certains GPIOs sont directement connectés au Pico et d'autres sur le STM32.
Par contre, il n'est pas évident de faire la distinction entre les deux à partir du schéma.
Les GP2,3,4,5,21 sont maintenant attachés à la PSRAM, j'imagine que le graphique ci-dessus concerne la version 1.0 du Pico Calc.
Le GP28 semble toujours disponible. A noter que c'est aussi une entrée analogique.
L'UART0_RX et TX correspond au GP0 et GP1 du Pico. Ces broches peuvent aussi servir bus I2C(0). Etant donné que I2C(0) n'est pas utilisé sur le PicoCalc, il est donc envisageable d'utiliser ces deux broches comme GPIO, UART ou I2C au choix.
Les broches USB_DP et USB_DM sont directement raccordés sur le STM32. Ces broches correspondent à USB Data + (plus) et USB Data - (minus).
L'UART1_RX et TX est plus ambigu. Ce dernier est raccordé sur les GP9 et GP8 du Pico mais aussi sur le M_UART3 du STM32 (respectivement PC11 et PC10 pour RX/TX). Après quelques recherches, il semblerait qu'il soit possible d'utiliser l'USART3 du STM32 (PC10 & PC11) avec le bootloader (mise-à-jour du firmware STM32).
Pour l'instant, je n'ai aucune idée de la disponibilité des signaux UART1_RX & TX côté Pico.
Mais si le STM32 activait ses broches PC10 & 11 en entrée (haute impédance) alors il serait possible d'utiliser les GP8 et GP9 du Pico aussi bien en entrée qu'en sortie. Ce serait TOP car il serait possible d'y placer des GPIO, l'UART(1) ou d'y déplacer le bus I2C(0).
Accès aux deux ports USBs
Le port MicroUSB (en bas de l'image) donne directement accès au Pico, ce qui permet d'y téléverser un des multiples firmwares disponibles (le bouton Boot du Pico reste accessible par l'arrière du PicoCalc).
Le port USB-C (en haut de l'image) est utilisé pour recharger les accus mais est également utilisé à d'autres fins grâce à deux "switchs analogiques" WAS7227 (sel1 et sel2)![]() |
PicoCalc : Branchement USB-C (cliquer pour agrandir) |
Les deux switchs analogiques sont commander par le même interrupteur SW701 visible en bas de l'image.
Lorsque SW701 est ouvert (comme sur l'image), ses deux interrupteurs internes qui sont solidaires sont ouvert. Par conséquent: sel1=LOW, sel2=LOW et Boot0=LOW.
Sur le STM32, Boot0=LOW permet au STM32 de démarrer le programme en flash (et donc le support Clavier du STM32).
SEL2=LOW redirige l'USB-C vers le convertisseur USB-to-UART (CH340C).
SEL1=LOW redirige l'USB-to-UART vers l'UART(0) du Pico (GP0 & GP1).
Dans cette configuration, l'USB-C est branché directement sur sur l'UART(0) du Pico.
Cet UART est souvent utilisé pour répliquer la ligne de commande du firmware (MicroPython, MMBasic, etc).
Cela permet donc d'utiliser le port USB-C avec un ordinateur avec un programme Terminal. Il sera ainsi plus facile de coder vos programmes depuis un ordinateur comme s'ils étaient encodés sur le PicoCalc lui-même.
A noter aussi que cet UART(0) est également accessible sur la 2ième partie du connecteur GPIO PicoCalc.
Lorsque SW701 est fermé (à l'inverse de l'image), les deux interrupteurs internes sont solidaires et fermés. Par conséquent: sel1=HIGH, sel2=HIGH et boot0=HIGH.
Dans ce cas de figure, USB-C est branché sur l'interface USB du STM32 (via U701). Boot0 étant en HIGH, le STM32 passe en mode de programmation, cela permet de faire la mise-à-jour du firmware clavier du STM32 via le port USB-C.
Note: U702 & U703 ne mène nulle part dans cette configuration... c'est assez bizarre.
Les firmwares disponibles
Selon le site officiel PicoCalc, plusieurs firmwares sont disponibles (Basic, Lisp, Unix, MP3 Player).
Et la plateforme supporte de nombreux langages de programmation (MicroPython, C/C++, Lua Script, GoLang, Javascript, Rust).
Les environnements de développement courants du Pico sont bien entendu supportés. Parmi ceux-cis ont retrouve:
- Le SDK Pico
- Arduino IDE
- ThonnyIDE (pour MicroPython).
En farfouillant sur le dépôt PicoCalc (parmi les dépôts de ClockWorkPi), je découvre le sous-répertoire Bin contient plusieurs firmware pour le Pico (fichiers uf2).
PicoMite Basic pour PicoCalc
PicoMite Basic pour PicoCalc est une version adaptée de PicoMite destiné a fonctionner directement sur le PicoCalc.
![]() |
PicoMite MMBasic |
Ce Basic propose:
- Une ligne de commande
- Un éditeur de code (rudimentaire mais agréable d'emploi)
- Le chargement et sauvegarde de code Basic.
- Stockage sur le Pico ou sur la carte SD.
- Support de mode graphique.
- Le support des numéro de ligne OU de code structuré
- Le chargement d'images (format BMP).
- Le contrôle de GPIO directement depuis le code Basic.
C'est idéal pour la découverte du Hacking électronique.
PicoMite est une version modifiée de MMBasic (mmbasic.com) pour Raspberry-Pi Pico. MMBasic est décidément devenu très populaire depuis qu'il a quitté la plateforme Maximite pour s'adapter à d'autres environnement.
Vous pouvez découvrir PicoCalc et PicoBasic sur cette vidéo de retroComb Tech.
Les autres firmwares
Cet article devient très long et l'éditeur peine un peu... je vais donc reporter la suite des Firmwares PicoCalc dans un second article.
A tout bientôt,
Dominique