Accéder au contenu principal

Coder en C sur un Lopy (Pycom)

Présentation du matériel

Hello ! Dans cet article je vais vous parler de mes premiers pas en développement embarqué d'ESP32 en utilisant du matériel de chez Pycom. N'hésitez pas à me faire part de vos remarques et suggestions dans les commentaires !

Voici le sommaire :

Présentation du matériel

Cartes de développement

Lopy est un microcontrôleur qui embarque un micro système Python, finement appelé MicroPython. Ce système léger permet de faciliter l'accès au développement embarqué, en utilisant un langage de programmation facile d'accès et qui possède une communauté importante (ce qui permet de trouver facilement de l'aide), j'ai nommé Python !

La société Pycom propose plusieurs cartes, avec plusieurs cartes d'extension, en fonction de vos besoins. Les principales cartes (et capacités) sont :
- Lopy : Wifi, Bluetooth, Sigfox, Lora. Retrouvez toutes les spécifications sur ce lien.
- Fipy : Wifi, Bluetooth, Lora, Sigfox, LTE. Les spécifications complètes : lien.
- Gpy : Wifi, Bluetooth, LTE.
- Sipy : Bluetooth, Sigfox, Wifi.
- Wipy : Wifi, Bluetooth.
Toutes les cartes ont en commun deux capacités : le Wifi et le Bluetooth. Et pour cause, les cartes sont basées sur un microcontrôleur ESP32 de chez Espressif qui est suffisamment puissant pour faire tourner un système MicroPython.

Cartes d'extension

Afin d'accompagner ces modules, il existe des cartes d'extension qui offre des capacités supplémentaires (c'est un peu le principe d'une extension ^^). On peut donc trouver :
- Expansion Board : ajoute un système de gestion de batterie LiPo (avec connecteur 2 fils JST), un lecteur de carte MicroSD, une LED, un bouton et d'autres choses à voir sur ce lien.
- Pysense : capteur de lumière ambiante, capteur de pression barométrique, capteur d'humidité, un accéléromètre (3 axes), température, liaison série par USB, gestion de batterie LiPo et d'autres détails ici.
- Pytrack : contient un GPS (plus GLONASS, Galiléo et QZSS), un accéléromètre 3 axes, une gestion de batterie LiPo et un lecteur de carte MicroSD. Plus de détails ici.
- Pyscan : cette embarque quels composants supplémentaires (accéléromètre, capteur de lumière, MicroSD et autres) mais permet surtout de connecter d'autres capteurs externes que vous pouvez acheter à part comme un écran OLED, une caméra, un lecteur d'empreinte digitale, etc. Toutes les informations sur ce lien.

Pycom offre donc une large gamme de produits permettant de tester (voire mettre en production) différents capteurs sur différents réseaux (Wifi, LoRa, Sigfox). Pour en avoir testé quelques unes de ces cartes, elles sont de bonnes factures (ça change des chinoiseries achetées en ligne) et bien finies.

Voyons ce qu'on peut donc faire avec tout ça, en détournant légèrement leur utilisation initiale : ne pas utiliser MicroPython mais du C standard.

Pourquoi ?

Et oui, déjà, pourquoi vouloir coder en C sur du matériel prévu pour faire du Python ? MicroPython est très intéressant comme langage pour débuter, apprendre et prototyper. Mais dans le cadre d'un projet un peu plus professionnel (et surtout, j'avais envie de me mettre un peu sérieusement au C, c'était l'occasion), le langage C reste incontournable.

En s'appuyant sur des microcontrôleur ESP32, Pycom a fait un choix technique intéressant : ils sont suffisamment puissant pour du MicroPython, relativement économe en énergie et surtout très utilisé dans le monde de l'IoT ; on trouve donc pas mal de support sur différents forums et blogs.

Matériel utilisé

Pour cet article, j'ai sous la main un Lopy4 et une ExpansionBoard v2.1A. Voici le brochage du Lopy4 :

Voyons maintenant comment fait on du C sur ce matériel.

Installation du framework ESPRESSIF pour ESP32

Je vais lâchement vous rediriger vers la documentation d'origine car 1) elle est très bien faite, et 2) elle sera à jour lorsque vous lirez ces lignes. Donc rendez-vous sur le guide de démarrage et arrêtez-vous à la rubrique Start a Project.

Démarrer un projet existant

Comme proposé dans la documentation de démarrage, nous allons commencer par un incontournable "Hello World!". On va se placer dans notre répertoire esp puis y copier un project d'exemple fourni dans le framework :

cd ~/esp
cp -r $IDF_PATH/examples/get-started/hello_world .

Liaison série

Il faut maintenant établir une liaison série entre le Lopy et notre PC. Si vous avez une carte d'extension, il suffit d'y brancher un câble MicroUSB avec le Lopy connecté. N'oubliez pas d'installer les drivers nécessaires au besoin (il s'agit d'un convertisseur CP210x, téléchargement ici). Si vous ne savez plus (ou pas) comment gérer une liaison série, encore une fois, la documentation d'Expressif est bien faite. Une fois la liaison configurée, il est temps de passer au câblage.

Câblage du module

Conseil : le plus simple est d'utiliser une breadboard (platine d'expérimentation en bon français).

Puis câbler de la manière suivante :

Serial USB Lopy4
3v3 --> Vin
GND --> GND
TX --> RX (P0)
RX --> TX (P1)

Puis faire un strap (mettre un fil en fait) entre G23 (également appelé P2) et GND pour autoriser le flashage du microcontrôleur.

Si vous avez une ExpansionBoard, elle permet de se passer d'une platine d'expérimentation. Respectez le câblage ci-dessus (sans oublier le strap).

Configuration du projet

L'exemple fourni par le framework est déjà presque configuré, mis à part la liaison série. Faites un make menuconfig pour régler ce point. Allez dans Serial flasher config > Default serial port puis remplissez le champs avec votre interface. Par exemple pour moi, c'est /dev/cu.SLAB_USBtoUART(je suis sous Mac, avec un adaptateur USB/Série). Faites <Save> puis <Exit>.

Flasher le programme

On peut maintenant compiler et flasher le programme. Pareil, le makefile contient déjà tout ce qu'il faut, il suffit de faire make flash pour charger le programme. La compilation prend un peu de temps...

xkcd
(source : https://xkcd.com/303/)

Si vous n'avez pas touché le code et que vous l'avez déjà compilé mais que vous souhaitez juste le charger de nouveau, faites plutôt make app-flash pour gagner du temps.

Vous pouvez maintenant enlever le strap et appuyer sur le bouton reset.

Monitor

On peut maintenant 'voir' le programme en pleine exécution en lançant un monitor. Encore une fois, le framework d'expressif est bien fait et contient tous les outils nécessaires, facilement exploitables. Ils ont quand même fait un gros effort d'intégration pour rendre le produit utilisable par le plus de monde possible. Pour y accéder, il suffit de faire un make monitor qui va nous donner :

MONITOR
--- idf_monitor on /dev/cu.SLAB_USBtoUART 115200 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x12 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:6164
load:0x40078000,len:10248
load:0x40080400,len:6616
entry 0x40080764
I (29) boot: ESP-IDF v3.3-beta1-44-gda2116f55 2nd stage bootloader
I (29) boot: compile time 16:04:34
I (33) boot: Enabling RNG early entropy source...
I (35) boot: SPI Speed      : 40MHz
I (39) boot: SPI Mode       : DIO
I (43) boot: SPI Flash Size : 8MB
I (47) boot: Partition Table:
I (51) boot: ## Label            Usage          Type ST Offset   Length
I (58) boot:  0 nvs              WiFi data        01 02 00009000 00006000
I (65) boot:  1 phy_init         RF data          01 01 0000f000 00001000
I (73) boot:  2 factory          factory app      00 00 00010000 00100000
[...]
Hello world!
This is ESP32 chip with 2 CPU cores, WiFi/BT/BLE, silicon revision 1, 8MB external flash
Restarting in 10 seconds...
Restarting in 9 seconds...

(J'ai coupé des lignes, trop long et sans intérêt).

Conclusions

Voilà pour cette mise en jambe. Il n'y a pas de difficultés particulières, une nouvelle fois le framework nous mâche bien le travail et est bien documenté.

La seule particularité à noter est le strap à réaliser pour pouvoir flasher la mémoire du Lopy4.

Cet exemple tout simple nous a permis d'installer notre infrastructure de développement et de vérifier avec un "Hello World!" qu'il est fonctionnel. La prochaine fois, le but sera de créer un projet "from scratch" (= à partir de rien) en utilisant un squelette fourni par Espressif (on va donc pas réellement partir de rien, pas fou non plus) et d'utiliser une des fonctionnalités présente sur la carte.

Encore une fois, n'hésitez pas à faire part de vos remarques et suggestions en commentaires (c'est fait pour ^^) et surtout, testez par vous même !

Commentaires

Posts les plus consultés de ce blog

Utiliser le ST-LINK V2 d'une carte Nucléo avec un autre STM32

Utiliser le STLINK-V2 d'une carte Nucléo avec un autre STM32 Utiliser le ST-LINK V2 d'une carte Nucléo avec un autre STM32 Hello, Comme c'était Noël, je me suis offert un lot de STM32f103c8t6 , également appelée Blue Pill (acheté sur Amazon pour bénéficier de la livraison Prime mais vous l'aurez pour moins cher sur eBay, à condition d'attendre le délai de livraison de plusieurs semaines...), ainsi que le livre Beginning STM32 qui explique comment mettre en oeuvre ces petites cartes avec des outils uniquement Open Source . Dès le premier chapitre, l'auteur nous explique qu'il nous faut un ST-Link V2 pour programmer la Blue Pill . Argh ! Dans ma précipitation à passer ma commande, je n'ai pas vu cette subtilité... Qu'à cela ne tienne, j'ai déjà une carte Nucleo qui, comme toute les cartes de ce type, intègre un programmateur ST-Link V2. Voyons comment mettre en oeuvre tout ça. Utiliser le ST-LINK V2 d'une carte Nucléo

MicroPython sur NUCLEO-F411RE

MicroPython sur NUCLEO-F411RE MicroPython sur NUCLEO-F411RE Aujourd'hui, j'ai décidé de tester MicroPython sur une carte STM32 que j'avais sous la main : la Nucleo-64 version STM32F411 . Pour les spécifications : ARM Cortex M4 à 100 MHz 512k de mémoire flash, 128k de SRAM 2 extensions de connecteurs aux formats Arduino Uno et ST morpho. Quand je penses que c'est la fréquence d'horloge d'un de mes premiers ordinateurs... 😥 Nostalgie, quand tu nous tiens. Bref, voyons voir comment fait-on tourner un MicroPython sur la bête ! MicroPython sur NUCLEO-F411RE Flasher la carte En mode DFU En mode hexadécimale Utiliser MicroPython sur STM32 Connexion série LED Conclusion Flasher la carte En mode DFU ⚠️ Attention ⚠️ cette manipulation nécessite soit une carte type USB breakout , soit de sacrifier un câble USB en dénudant la partie opposée à celle connectée sur l'ordinateur, soit de faire un peu de soudure avec une