dimanche 10 novembre 2019

Communication nRF24L01 avec cartes STM32

Les modules nRF24L01 sont des émetteurs/récepteurs qui permettent la communication radio entre deux microcontrôleurs sur la bande 2,4 GHz. Je vous propose aujourd'hui quelques informations pour utiliser ces modules avec une carte STM32 programmée avec l'IDE Arduino (j'ai fait des tests avec une carte Nucleo et une Blue Pill).

Un truc intéressant, c'est qu'en plus de permettre une communication sans fil entre deux cartes STM32, une paire de modules nRF24L01 peuvent facilement être utilisée pour établir une connexion entre une carte STM32 et une carte Arduino, un ESP32, un ESP8266, un Raspberry Pi, etc.

Il existe sur le marché deux modèles de modules nRF24L01: un modèle vert comportant 10 broches, et un modèle noir comportant 8 broches. On peut se les procurer pour un prix qui tourne autour d'un euro par module. Il existe aussi un modèle plus puissant, vendu avec une antenne amovible, mais je n'ai pas eu l'occasion d'en faire l'essai.
Comme vous pouvez peut-être le deviner en lisant le nom des broches sur les images ci-dessus, chaque module communique avec le microcontrôleur auquel il est branché grâce au protocole SPI.

Pour les deux modèles, ça peut être une bonne idée d'ajouter un condensateur de 10 µF entre entre GND et VCC afin de stabiliser l'alimentation.

Préparation de l'IDE Arduino: installation des cartes STM32 et de la bibliothèque RF24-STM

Afin de programmer une carte STM32 avec l'IDE Arduino, il faut d'abord avoir installé le "STM32 core" au moyen du gestionnaire de cartes (instructions ici).

De plus, j'ai installé la bibliothèque RF24-STM; il s'agit d'une version de la bibliothèque RF24 de TMRh20 qui a été modifiée par Jaret Burkett pour la rendre compatible avec les cartes STM32. (J'avais d'abord tenté d'utiliser la version conventionnelle de la bibliothèque RF24 par TMRh20 mais  les messages reçus étaient remplacés par une suite de points d'interrogations dans le moniteur série).

Connexion du nRF24L01 à une carte Nucleo
  • broche VCC du module nRF24L01 - Broche 3.3 V de la carte Nucleo
  • broche CE du module nRF24L01 - Broche D7 de la carte Nucleo*
  • broche CSN du module nRF24L01 - Broche D6 de la carte Nucleo*
  • broche SCK du module nRF24L01 - Broche SCK/D13 de la carte Nucleo
  • broche MOSI du module nRF24L01 - Broche MOSI/D11 de la carte Nucleo
  • broche MISO du module nRF24L01 - Broche MISO/D12 de la carte Nucleo
  • broche IRQ du module nRF24L01 - pas branchée
  • broche GND du module nRF24L01 - Broche GND de la carte Nucleo
* Ces deux broches peuvent être remplacées par d'autres puisqu'on les définit au début du sketch. 





Connexion du nRF24L01 à une Blue Pill
  • broche VCC du module nRF24L01 - Broche 3.3 de la Blue Pill
  • broche CE du module nRF24L01 - Broche A8 de la Blue Pill*
  • broche CSN du module nRF24L01 - Broche B10 de la Blue Pill*
  • broche SCK du module nRF24L01 - Broche A5 de la Blue Pill
  • broche MOSI du module nRF24L01 - Broche A7 de la Blue Pill
  • broche MISO du module nRF24L01 - Broche A6 de la Blue Pill
  • broche IRQ du module nRF24L01 - pas branchée
  • broche GND du module nRF24L01 - Broche G de la Blue Pill


Sketches de démonstration

La bibliothèque RF24-STM est accompagnée d'une dizaine d'exemples qui vous aideront à découvrir les nombreuses possibilités du module nRF24L01.

Je vous présente ci-dessous un sketch pour l'émission d'un message (un nombre croissant est émis chaque seconde), et un autre pour la réception d'un message (le message reçu est affiché dans le moniteur série).  Leur simplicité constitue un avantage lorsqu'on désire vérifier que la communication fonctionne correctement.

Ces programmes sont parfaitement compatibles avec ceux que j'avais déjà publiés pour la communication nRF24L01 impliquant une carte Arduino ou un Raspberry Pi. Vous pouvez donc, par exemple, émettre un message avec un Arduino Uno et le capter avec une carte Nucleo.



Sketch pour l'émission d'un message

-
-

Sketch pour la réception d'un message

-
-

À lire aussi

Au risque de me répéter: vous trouverez sur ce blogs d'autres tutos qui vous guideront dans l'utilisation d'un module nRF24L01 avec un Arduino, un Raspberry Pi, un MSP430 Launchpad.

Dans le passé, j'ai aussi utilisé le nRF24L01 pour fabriquer un véhicule téléguidé et un système MIDI sans fil.

Pour une communication unidirectionnelle, une paire émetteur/récepteur 433 MHz peut constituer une alternative intéressante.

D'autre part, vous trouverez sur cette page une liste d'articles impliquant les cartes STM32 (programmées avec l'IDE Arduino ou avec mbed).

Yves Pelletier   (TwitterFacebook)

dimanche 3 novembre 2019

Écran OLED SH1106 I2C et STM32

Le projet d'aujourd'hui consiste à afficher du texte et des images sur un petit écran OLED SH1106 i2c de 128 X 64 pixels. L'écran sera piloté par une carte STM32 (Blue Pill ou Nucleo, par exemple), programmée au moyen de l'IDE Arduino.


Afin de pouvoir programmer une carte STM32 avec l'IDE Arduino, ces cartes doivent préalablement avoir été installées dans l'IDE au moyen de son gestionnaire de cartes. Si ce n'est pas déjà fait, vous pouvez vous référer à ce précédent article.

Installation de la bibliothèque u8g2

Il faut aussi que la bibliothèque u8g2 soit installée. Cette bibliothèque est compatible avec de nombreuses cartes de développement, et avec pratiquement tous les modèles d'écrans monochromes. Le gestionnaire de bibliothèques de l'IDE constitue la façon la plus simple de l'installer.

Connexion de l'écran OLED à une carte STM32 Nucleo

Puisqu'il s'agit d'un périphérique I2C, 4 fils sont suffisants pour brancher l'écran à votre carte de développement.

Sur une carte Nucleo, les connexions sont assez évidentes:
  • GND de l'écran OLED - GND de la carte Nucleo
  • VCC de l'écran OLED - 3V3 de la carte Nucleo
  • SCL de l'écran OLED - SCL de la carte STM32
  • SDA de l'écran OLED - SDA de la carte STM32


Connexions à une Blue Pill

Si vous utilisez une Blue Pill, il faut savoir que les broches B6 et B7 sont consacrées à la communication I2C, car ce n'est pas indiqué sur la carte.
  • GND de l'écran OLED - G de la carte STM32
  • VCC de l'écran OLED - 3V3 de la carte STM32
  • SCL de l'écran OLED - broche B6 de la carte STM32
  • SDA de l'écran OLED - broche B7 de la carte STM32

N.B.: j'ai essayé sans succès de piloter l'écran OLED avec mon STM32F030 Demo Board V1.1, mais la bibliothèque u9g2 semble trop gourmande pour ses 16 kb de mémoire flash.

Sketch de démonstration

Voici un sketch qui écrit et dessine sur l'écran. Il s'agit en fait du sketch que j'avais écrit il y a quelques mois pour contrôler l'écran OLED avec un ESP32. Aucune modification n'a été nécessaire pour le faire fonctionner avec un STM32, et vous pouvez donc consulter ce précédent article pour plus d'explications.

-

-

À lire aussi

Vous serez peut-être intéressés par ces autres tutoriels qui montrent comment utiliser ce même écran OLED SH1106 avec un Raspberry Pi, un Arduino, un ESP32 ou un ESP8266.

De plus, vous trouverez ici d'autres projets impliquant les cartes STM32 (programmées avec l'IDE Arduino ou avec mbed).

Yves Pelletier   (TwitterFacebook)

vendredi 1 novembre 2019

Programmation d'une carte STM32 avec l'IDE Arduino

Maintenant que le "STM32Duino Core" de Roger Clarke a été remplacé par "l'official STM32 Core" mis au point par STMicroelectronics, il semble approprié de rédiger cette nouvelle introduction à la programmation d'une carte STM32 au moyen de l'IDE Arduino.

Une excellent nouvelle, en ce qui me concerne, c'est que le nombre de cartes supportées est beaucoup plus imposant qu'il ne l'était auparavant. En plus de la Blue Pill (STM32F103C8T6), je pourrai dorénavant programmer ma carte Nucleo F030R8 ainsi que mon STM32F030 Demo Board V1.1 en utilisant l'IDE Arduino.

Dans cet article, je vais programmer chacune de ces 3 cartes grâce à l'IDE Arduino, en utilisant un programmateur ST-Link ou un convertisseur USB série.



Installation des cartes STM32 au moyen du gestionnaire de cartes

Tout d'abord, on choisit "Préférences" dans le menu "Fichier".


Dans le bas du dialogue "Préférences", il faut ajouter l'adresse suivante à l'intérieur du champ "URL de gestionnaire de cartes supplémentaires":

https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json

(si ce champ contient déjà d'autres adresses, vous pouvez les séparer par des virgules).



Nous accédons ensuite au gestionnaire de carte (Menu Outils - Type de carte - Gestionnaire de carte).


"STM32 Cores by STMicroelectronics" devrait maintenant être disponible dans le gestionnaire de cartes. Il ne reste plus qu'à cliquer sur le bouton "Installer" et à patienter quelques minutes.



Installation de STM32 Cube Programmer

Si vous devez programmer votre carte avec un programmateur STLink ou un convertisseur USB/Série, il faudra aussi installer le logiciel STM32 Cube Programmer, disponible sur le site ST.com (ce n'est pas nécessaire si vous programmez une carte Nucleo).

Le seul irritant, c'est que ST exige qu'on s'identifie avant de nous laisser télécharger le logiciel. J'ai dû attendre une bonne dizaine de minutes avant de recevoir l'indispensable email de validation.

Pour le reste, le logiciel vient avec un installateur, c'est simple et rapide.


Programmation de ma carte Nucleo F030R8

La seule carte Nucleo que je possède est un modèle bas de gamme que je programmais strictement sur mbed, puisqu'elle n'était pas supporté par le STM32 Duino core de Roger Clarke.

Pour sélectionner cette carte, je commence par choisir la catégorie "Nucleo-64" (menu "Outils - Type de carte - Nucleo-64").


Je peux ensuite sélectionner la bonne carte à l'intérieur de cette catégorie (menu "Outils - Board part number -Nucleo F030R8").


Finalement, réglage de la méthode de téléversement (menu "Outils - Upload Method - Mass Storage").


Il ne reste plus qu'à brancher la carte Nucleo a un port USB, sélectionner le port, et téléverser l'exemple Blink: tout fonctionne à la perfection.

Programmation de la carte STM32F103C8T6 (Blue Pill)


Essayons maintenant la Blue Pill. J'ai sélectionné la catégorie "Generic STM32F1 series" dans "Outil - Type de carte".


J'ai ensuite choisi "BluePillF102C8 (128k)" dans le menu "Outils - Board part number".


Il faut ensuite préciser la méthode de téléchargement (menu "Outils - Upload method"). Si vous programmez votre Blue Pill avec un programmateur STLink, il faut choisir "STM32CubeProgrammer (SWD)". Si vous utilisez un convertisseur USB-Série, vous choisissez plutôt "STM32CubeProgrammer (Serial)".



4 fils sont utilisés pour brancher la carte Blue Pill à l'adaptateur USB-Série:
  • GND de l'adaptateur USB/Série --- GND de la Blue Pill
  • RXD de l'adaptateur USB/Série --- PA9 de la Blue Pill
  • TXD de l'adaptateur USB/Série --- PA10 de la Blue Pill
  • 3V3 de l'adaptateur USB/Série --- 3.3V de la Blue Pill


La carte Blue Pill comporte deux jumpers. Le jumper "Boot0" (celui qui est le plus éloigné du bouton reset) doit être placé en position "1" pour que le téléversement du sketch réussisse en mode série.


Toujours en téléversement série, avant de cliquer sur le bouton "Téléverser", vous devez appuyez sur le bouton "reset" de la carte Blue Pill (mon doigt est trop gros pour atteindre le bouton: je suis obligé d'utiliser un crayon).


Si vous utilisez un programmateur STLink V2, vous le branchez aux 4 connecteurs situés à l'extrémité de la carte.





Avec STLink, il n'est pas nécessaire d'appuyer sur le bouton reset avant le téléchargement, et la position du jumper "Boot0" n'a pas d'importance.

Ici encore, le téléversement de l'exemple Blink vous permettra de confirmer que tout fonctionne correctement.


Programmation de la carte STM32F030 Demo Board V1.1

Il y a quelques années, je m'étais procuré cette carte à cause de son prix ridiculement bas (de l'ordre de 1 euro!), mais je n'avais encore jamais eu l'occasion de la programmer.



Pour ce modèle, je sélectionne la catégorie "Generic STM32F0 series" dans le menu "Outil - Type de carte".



J'ai ensuite choisi "STM32F030F4 Demo board" dans le menu "Outils - Board part number".


Il faut ensuite préciser la méthode de téléchargement (menu "Outils - Upload method". Si vous programmez la carte un programmateur STLink, il faut choisir "STM32CubeProgrammer (SWD)". Si vous utilisez un convertisseur USB-Série, vous choisissez plutôt "STM32CubeProgrammer (Serial)".


À une extrémité de la carte, 4 broches permettent la programmation avec un convertisseur USB-Série, et 4 autres broches sont disponibles pour la programmation avec STLink. Le rôle de chaque connecteur est assez clairement indiqué sur la carte.


Pour la programmation avec un convertisseur USB-série:
  • Broche 3V3 de la carte STM32 - Broche 3V3 du convertisseur USB-série
  • Broche GND de la carte STM32 - Broche GND du convertisseur USB-série
  • Broche TXD de la carte STM32 - Broche RXD du convertisseur USB-série
  • Broche RXD de la carte STM32 - Broche TXD du convertisseur USB-série

Pour la programmation avec un dongle ST-Link:
  • Broche 3V3 de la carte STM32 - Broche 3,3 V du ST-Link
  • Broche DIO de la carte STM32 - Broche SWDIO du ST-Link
  • Broche CLK de la carte STM32 - Broche SWCLK du ST-Link
  • Broche GND de la carte STM32 - Broche GND du ST-Link
Lorsqu'on programme avec le convertisseur USB-série, il faut appuyer sur le bouton "reset" avant le téléchargement. Le jumper BOOT0 doit être placé à 3,3 V lors du téléversement du programme, et à GND lors de son exécution.

Bilan

Pour l'instant, mes tests se sont limités à faire clignoter la LED de la carte, communiquer avec le moniteur série, etc. Reste à voir si la majorité des bibliothèques Arduino sont compatibles avec les cartes STM32 (c'est souvent là que ça coince un peu). Je devrai aussi vérifier si tous les sketches que j'ai écrits pour la Blue Pill sous l'ancien core demeurent fonctionnels, sans modifications, sur le nouveau core.

Je suis assez optimiste.


Yves Pelletier   (TwitterFacebook)