Microcontrôleurs

Bienvenue dans le monde merveilleux des microcontrôleurs. Qu’est-ce qu’un microcontrôleur ? C’est un composant programmable qui offre des entrées / sorties permettant de s’interfacer avec le monde réel : lire des informations venant de capteurs, envoyer des commandes à des moteurs, piloter des diodes, etc.

Leur puissance est limitée, ils ne peuvent donc pas exécuter un système d’exploitation (comme un Raspberry Pi) mais un simple programme en boucle. Ils n’ont pas non plus de système de fichier mais une mémoire flash limitée pour enregistrer le programme.

Qu’est-ce que l’on peut faire avec ? Voir ici pour quelques exemples. Et pour ce qui est du code, ça se passe là.

Modèles

Voici le bestiaire à ma disposition.

En bas de droite à gauche (du plus petit au plus grand, mémoire flash / RAM) :

  • Digispark (ATTINY85), 8 kO / 512 O
  • Digispark Pro (ATTINY167), 16 kO / 512 O
  • Arduino Nano (ATmega328), 32 kO / 2048 O
  • NodeMCU (ESP8266), 1 MO / 32 kO, avec Wifi.

En haut à droite le vénérable Arduino Uno (ATmega328) qui est une carte de référence et de développement.

Enfin en haut à gauche un M5Stack Atom (ESP32) dans son petit boîtier qui intègre une puce Wifi, un bouton et une LED RGB ! Pour vous donner une idée d’un point de vue matériel il est 10 fois plus puissant que le Uno à sa droite 😉

J’ai choisi pour tous mes modèles la version avec prise USB qui permet à la fois de connecter à un ordinateur pour programmer et à une alimentation (type chargeur de téléphone) pour l’utilisation.

Capacités

Alors bien sûr vous vous doutez qu’un Digispark de 2 cm x 1,5 cm n’a pas les même capacités qu’un NodeMCU de 6 cm x 3 cm.

Les différences portent principalement sur :

  • La puissance du processeur, même si en pratique pour des applications simples cela n’a pas d’importance.
  • Les quantités de mémoire flash (stockage du programme) et vive (RAM, stockage des variables de fonctionnement), ces deux éléments sont critiques dès que l’on utilise des librairies un peu complexes, pour piloter des séries de LED WS2812, lire un GPS ou écrire sur une carte SD. Par exemple pour un petit montage utilisant une puce GPS, une carte SD et des LED impossible de passer sous les 20 kO de mémoire flash (taille du programme), donc exit les Digispark.
  • Le nombre d’entrées et sorties (analogiques et numériques), plus le format est petit moins on en a, il faut bien prévoir ce que l’on va brancher dessus.
  • La présence de ports d’interface avec des dispositifs plus complexes, SPI par exemple pour connecter un périphérique communicant en série comme un lecteur de carte SD.
  • La connectivité Wifi (point fort de NodeMCU ou M5Stack Atom) permettant de se connecter au réseau pour piloter / échanger des données à distance.
  • La consommation électrique peut être un facteur important, par exemple pour des dispositifs embarqués alimentés par batterie, même si généralement ce sont plutôt les périphériques qui seront les gros consommateurs, les puces des microcontrôleurs étant elles-même peu énergivores.
  • Le fonctionnement des ports d’interface en 5  V ou 3,3 V qui va jouer sur la compatibilité des périphériques et peut nécessiter des conversions de niveau.
  • Enfin le coût bien sûr ! De l’ordre de 1 € pour un Digispark on monte à 7 € pour un Atom. Cela reste quand même très abordable vus les services rendus.

Programmation

Je programme tous mes microcontrôleurs avec l’IDE Arduino qui utilise un langage proche du C. De nombreuses librairies de qualité sont disponibles directement dans l’IDE, il est possible d’envoyer le code vers la mémoire des puces et d’avoir un mode debug pour faciliter le développement et la recherche de problème.

Certains microcontrôleurs (NodeMCU, Atom) supportent d’autres modes de programmation (Lua, micro Python), je n’ai jamais essayé.

L’envoi des programmes vers les puces peut être très simple à partir des Nano, voir même se faire sans fil avec les NodeMCU et Atom, ce qui est très  pratique pour des montages pas facilement accessibles, et un peu plus délicat avec les plus petits modèles (ATTINY85) même si globalement on s’en sort.

J’ai donné des exemples de code pour différents modules dans un autre article.

Alimentation

Toutes mes cartes étant équipées d’un port USB je les alimente soit avec un chargeur type téléphone, soit pour la portabilité avec un pack batterie.

Périphériques

Ci dessous petite présentation des périphériques que j’ai le plus utilisé.

Récepteur GPS

Pour quelques € on peut acheter un module GPS qui donnera 1 relevé par seconde avec une excellente précision. Autre gros avantage : on a gratuitement la date et l’heure, pas besoin d’horloge.

L’antenne « céramique » fournie prend un peu de place mais donne une bonne réception. J’utilise la librairie TinyGPS++ qui reste simple tout en étant fonctionnelle.

Lecteur carte SD

Module généralement Micro SD pour lire et écrire sur carte mémoire, indispensable pour des montages de mesure (trace GPS par exemple) pour que les données persistent et soient facilement exploitables.

J’utilise la librairie SD. Il est bien de penser à « flusher » les écritures régulièrement.

LED WS2812

Les chaînes de LED WS2812 permettent de piloter des dizaines voir centaines de LED RGB (multicolores) individuellement avec une seule sortie du microcontrôleur. Il faudra bien sûr alimenter les LED en 5V, et un ampérage adapté qui peut vite monter.

C’est tellement pratique que même pour piloter deux pauvres petites LED il est largement plus simple et moins complexe en montage d’utiliser des WS2812 (1 seule broche contre pas moins de 6 pour deux LED RGB classiques, sans compter des résistances).

La contrepartie est une librairie assez lourde mais à moins de travailler sur des tout petits processeurs cela n’est pas un problème.

J’utilise principalement la librairie FastLED riche en fonctionnalités et tournant sur tous les processeurs.

Horloge temps réel

Les RTC (Real Time Clock type DS3231) permettent d’obtenir la date et l’heure, et de les conserver sans alimentation car  généralement elles ont un pile intégrée.

On peut contourner les RTC si on a un récepteur GPS ou du Wifi (on fera du NTP).

J’utilise la librairie ds3231.

Capteur de température

Si on veut un minimum de précision il faut regarder côté DHT22 qui offre mesure de température à +- 0,5 (déjà pas transcendant) et d’humidité.

J’utilise simplement la librairie DHT.

Boutons capacitifs

Les boutons capacitifs type TTP223 sont très pratiques. Ils ne nécessitent pas de code anti-rebond, ils fonctionnent encastrés sous une surface, même avec des gants, on peut choisir d’avoir un signal à l’appui, au relâchement.

Pas de librairie requise, une entrée numérique et hop.

Servo moteurs

Un façon d’interagir avec le monde réel c’est d’utiliser des servo moteurs. Ils ont la particularité de se positionner à un angle choisi et d’y rester (asservissement de position). Avec des bras positionnés sur l’axe on peut réaliser toutes sortes de mouvements.

La série 9G est économique et suffisante pour les petites applications. J’utilise la librairie Servo.