Sciences de l'Ingénieur

Introduction

La société Seeed propose toute une gamme de cartes de petite dimensions (environ 18 x 20mm), la gamme XIAO avec des processeurs et des équipements différents à partir de 9€.


Pour mon projet mini-fusée, j'avais besoin d'une carte embarquée pour recueillir des données (accélérations et altitude). J'ai opté pour la Seeed XIAO BLE Sense qui possède une unité de mesure inertielle (IMU) et une mémoire flash intégrée permettant d'enregistrer des résultats mesure.


Toute la documentation accessible sur Internet étant en anglais, j'ai passé beaucoup de temps pour rassembler et comprendre les différents codes correspondant aux applications nécessaires pour mon projet. Je vais donc détailler dans les pages suivantes comment programmer la carte XIAO BLE Sense en Circuit Python pour réaliser ces applications.

Présentation de la carte 

La carte XIAO BLE Sense, développée par la société Seeed est une carte programmable basée sur un microprocesseur nRF52840 possédant des capteurs et autres modules intégrés comme le Bluetooth 5.0 :
Liste des ports de la carte XIAO BLE Sense


Première utilisation de la carte et installation du firmware

Avant de se lancer dans la programmation avec Circuit Python, il faut récupérer le firmware (microgiciel) et l'enregistrer sur la racine de la mémoire flash de la carte. Tout est très bien expliqué (en anglais) ici : https://wiki.seeedstudio.com/XIAO-BLE_CircutPython/

Une fois le firmware installé sur la carte, vous devez voir apparaître cette dernière comme un lecteur USB sous le nom "CIRCUITPY" :

Le fichier code.py est executé à chaque mise sous tension de la carte ou à chaque appui sur le bouton reset. Le programme en Circuit Python doit donc obligatoirement avoir ce nom lorsque vous le flashez sur la carte. 

Le dossier lib (libraries) doit contenir tous les fichiers (.py ou .mpy) et dossiers des bibliothèques de fonctions utilisées dans le programme. 

Dans certains cas, on trouvera aussi un fichier boot.py qui est executé à chaque mise sous tension de la carte (mais pas lorsqu'on appuie sur reset). Par exemple, pour modifier le mode d'écriture sur la mémoire flash intégrée à la carte
Programmation en Circuit Python

La XIOA BLE Sense se programme en Circuit Python, un langage dérivé de Python conçu pour les microcontrôleurs. Il est également possible de la programmer avec Arduino IDE.

J'utilise le logiciel libre Mu Editor qui est un éditeur de langage Python (et dérivés) conçu pour les débutants. Il possède des modes adaptés à différentes cibles (Python 3 standard, Micro Python pour les cartes Micro:Bit, ESP8266/ESP32, Raspberry Pi Pico , Circuit Python, ...) qui permettent de faciliter le travail (programmation, flashage du code, éditeur série, ...). Je l'ai aussi testé pour la carte Micro:bit, il est très adapté également et très facile à prendre en main même pour des élèves de seconde en SNT, SI ou STI2D.

Interface de Mu Editor
Exemple d’utilisation d’une sortie numérique

La carte Seeed XIAO BLE Sense est pourvue d’une Led trois couleurs (Rouge, Vert, Bleu). Le module (ou bibliothèque) board est nécessaire pour faire appel aux ports et à la LED intégrée à la carte. Pour appeler cette Led on peut utiliser trois attributs du module board :

  • board.LED --> Allumer ou éteindre la Led ROUGE
  • board.LED_BLUE --> Allumer ou éteindre la Led BLEUE
  • board.LED_GREEN --> Allumer ou éteindre la Led VERTE

Il faut également faire appel au module digitalio (Digital Input/Output) afin de définir une entrée/sortie numérique à savoir une Led intégrée ici :

led_bleue = digitalio.DigitalInOut(board.LED_BLUE)

La ligne précédente définit un objet Led_bleue associé à la Led bleue comme une entrée/sortie numérique. Il faut ensuite la définir comme étant une SORTIE avec la classe direction :

led_bleue.direction = digitalio.Direction.OUTPUT


Pour allumer ou éteindre cette Led, il faut utiliser l'attribut value qui peut prendre deux valeurs, True ou False (attention, sur cette carte la logique est inversée) :
  • led_bleue.value = False --> pour Allumer la Led
  • led_bleue.value = True --> pour Eteindre la Led

Exemple de programme très simple pour débuter :
import time
import board
import digitalio

# Déclaration d’une variable “led_bleue” pour controller la led 
led_bleue = digitalio.DigitalInOut(board.LED_BLUE) 

# configuration de led_bleue comme sortie
led_bleue.direction = digitalio.Direction.OUTPUT 

while True:
    led_bleue.value = False
    time.sleep(0.5)
    led_bleue.value = True
    time.sleep(0.5)
Recherche