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...
(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
Enregistrer un commentaire