Tutoriels avec des modules Grove et autres

Démarrage

Pour la plupart de ces tutoriels, vous devrez disposer de la carte d’extension Grove (ou Grove Base Shield en anglais). C’est une carte au format Arduino qui vient se connecter sur la NUCLEO-WB55 et permet de brancher aisément des capteurs et des actionneurs digitaux, analogiques, UART et I2C avec la connectique propriétaire Grove.


Grove base shield pour Arduino


Crédit images : Seeedstudio

Elle offre :

  • Six connecteurs D2, D3… pour des périphériques numériques c’est à dire pilotés par un niveau logique 0 (0V) ou 1 (+3.3V) ;
  • Quatre connecteurs A0, A1… pour des périphériques qui envoient un signal analogique en entrée (entre 0 et +3.3V ou 0 et +5V selon la position du petit interrupteur qui l’équipe) ;
  • Quatre connecteurs pour des périphériques dialoguant avec le protocole I2C ;
  • Un connecteur pour un port série (UART) ;
  • Un commutateur 3.3V / 5V qui permet de sélectionner la tension d’alimentation des modules que vous connecterez sur ses fiches.

La NUCLEO-WB55 n’aime pas les modules 5V !

Prenez garde cependant aux tensions d’alimentation des modules ! Certains nécessitent du 5V, d’autres fonctionnent aussi bien avec du 5V et du 3.3V, d’autres enfin fonctionnent exclusivement en 3.3V et seront peut-être endommagés par du 5V. Lisez bien leurs fiches techniques avant de les brancher !

Dans la liste des périphériques qui nécessitent d’être alimentés exclusivement en 5V sur la NUCLEO-WB55, ci-dessous, figure seulement le module LCD RGB Grove. Il présente une autre particularité : il ne dispose pas des résistances de tirage (pull-up) requises par le bus I2C auquel il est connecté et ne fonctionnera pas si ces résistances ne sont pas ajoutées par vos soins.

D’une façon générale, la plus grande attention est requise si vous souhaitez utiliser des périphériques fonctionnant exclusivement en 5V avec la NUCLEO-WB55. S’il s’agit de capteurs qui injectent du courant dans le microcontrôleur, ils pourraient purement et simplement détruire celui-ci. Donc, si vous ne maîtrisez pas le sujet, nous vous conseillons vivement de ne pas en utiliser du tout.

Il est à noter que la plupart des modules actuels sont vendus pour être alimentés en 5V ou en 3.3V (grâce à un régulateur de tension). Ils ne posent bien sûr aucun problème.

Précision importante concernant l’adressage sur le bus I2C

Vous constaterez que la plus grande partie des modules présentés ci-arpès utilisent le protocole I2C et doivent donc être connectés au bus du même nom sur la carte NUCLEO-WB55. I2C est l’acronyme de “Inter-Integrated Circuit” (en français : bus de communication intégré inter-circuits). Il s’agit d’un bus série fonctionnant selon un protocole inventé par Philips. Pour dialoguer sur un bus I2C, chaque module “esclave” qui s’y trouve branché est identifié par une adresse codée sur 7 bits afin de dialoguer avec le contrôleur maître intégré au STM32WB55.

Avec la prolifération des modules I2C, il pourrait arriver que deux ou plusieurs modules que vous auriez connectés sur un bus I2C aient la même adresse, ce qui conduirait inévitablement à des plantages. Pour éviter ce type de conflits, vous devrez consulter les fiches techniques de vos modules et, pour ceux qui le permettent, prendre soin de modifier (si nécessaire) leur adresse I2C, généralement codée dans leur firmware.

Les tableaux ci-dessous rappellent, entre parenthèses, dans la colonne Connectique/protocole, l’adresse I2C par défaut - celle qui est écrite dans la classe pilote - des différents modules que nous avons utilisés. Si vous choisissez d’autres modules, il est possible que leur adresse change et que vous soyez obligé de la passer en paramètre lors de l’instanciation de leur pilote. Ce sera parfois le cas, par exemple, selon que vous utiliserez un même capteur implémenté dans un module Grove de Seeed Studio ou dans un module Adafruit.

Liste des tutoriels

Vous trouverez ici quelques tutoriels essentiellement pour des modules au format Grove de la société Seeed Studio. Ils se transposeront facilement à des modules d’autres fabricants pour peu qu’ils utilisent les mêmes protocoles et bus.

Nous aborderons et expliquerons au gré des tutoriels des notions de programmation embarquée et d’architecture des microcontrôleurs qui vous seront indispensables pour progresser. Lorsque vous rencontrerez un acronyme que vous ne connaissez pas, n’hésitez pas à consulter le glossaire.

1. Afficheurs & LED

Tutoriel Connectique / protocole
Afficheur 4x7 segments TM1637 analogique/spécifique
Afficheur 8x7 segments TM1638 numérique/spécifique
Afficheur LCD 16 caractères x 2 lignes I2C (0x3E)
Afficheur LCD RGB 16 caractères x 2 lignes I2C (rétroéclairage : 0x62, afficheur : 0x3E)
Afficheur matrices de LED 8x8 MAX7219 SPI
Afficheur OLED 1308 I2C (0x3C)
Anneau LED Neopixel WS2812B numérique/spécifique
Barre de LED MY9221 numérique
LED infrarouge numérique
LED RGB chainable numérique/spécifique
LED RGB Neopixel (WS21813 Mini) numérique/spécifique
Rubans Neopixel WS2812B et WS2813 SPI ou numérique/spécifique

2. Capteurs spatiaux et de mouvement

Tutoriel Connectique/protocole
Accéléromètre 3 axes MMA7660FC I2C (0x4C)
Capteur de choc numérique
Capteur de gestes PAJ7620U2 I2C (0x73)
Capteur d’inclinaison numérique
Centrale inertielle LSM303D I2C (0x1E)
Détecteur de mouvement PIR numérique
Module suiveur de ligne numérique
Module GPS UART
Sonar à ultrasons UART
Télémètres infrarouge VL53L0X et VL53L1X I2C (0x29)

3. Capteur environnementaux

Tutoriel Connectique/protocole
Capteur de dioxyde de carbone MH-Z16 UART
Capteur de dioxyde de carbone SCD30 I2C (0x61)
Capteur de gaz multicanaux MiCS-6814 I2C (0x04)
Capteur de gouttes de pluie analogique/ADC
Capteur de lumière numérique TSL2561 I2C (0x29)
Capteur de lumière numérique TSL2591 I2C (0x29)
Capteur de luminosité, photodiode analogique/ADC
Capteur de lumière solaire SI1145 I2C (0x60)
Capteur de niveau d’eau analogique/ADC
Capteur de pression, température et humidité BME280 I2C (0x76)
Capteur de pression, température, humidité et qualité d’air BME680 I2C (0x76)
Capteur de pression et température BMP280 I2C (0x77)
Capteur de qualité de l’air SGP30 I2C (0x58)
Capteur de température et d’humidité SHT31 I2C (0x44)
Capteur de température et d’humidité TH02 I2C (0x40)
Capteur de température de précision MCP9808 I2C (0x18)
Capteurs de température et d’humidité DHT11 et DHT22 numérique/spécifique
Capteur de température (thermistance) analogique/ADC
Capteur de pression intégré MPX5700AP analogique/ADC
Capteurs d’humidité du sol analogique/ADC
Compteur de particules HM3301 I2C (0x40)
Sonomètre analogique/ADC
Sonde étanche de température DS18X20 numérique/One-Wire
Thermistance (explication complète) analogique/ADC

4. Entrée, enregistrement et saisie de données

Tutoriel Connectique/protocole
Adaptateur Nintendo NunChuk I2C (0x52)
Bouton et anti-rebond numérique
Clavier matriciel numérique
Interrupteur tactile numérique
Joystick analogique/ADC
Lecteur RFID 125kHz Grove UART
Manette Nintendo SNES SPI
Matrice d’interrupteurs tactiles TTP226 numérique
Module carte SD SPI
Module RFID RC522 13.56 MHz SPI
Potentiomètre analogique/ADC

5. Actuateurs

Tutoriel Connectique/protocole
Buzzer numérique/PWM
Contrôle moteur avec un pont en H numérique/PWM
Contrôle moteur avec un relais ou un transistor numérique
Contrôle moteur pas à pas numérique
Servomoteur numérique/PWM

6. Autres modules et petits projets

Tutoriel Connectique/protocole
Alarme de mouvement numérique/PWM
Emetteur - Récepteur code Morse numérique & analogique
Horloge temps-réel DS1307 I2C (0x68)
Horloge temps-réel PCF85063TP I2C (0x51)
Variateur de lumière numérique/PWM