lundi 13 août 2018

NRF24L01 et ARDUINO UNO, NANO, MINI

  RF24L01 et ARDUINO UNO, NANO, MINI

Beaucoup de personnes, y compris moi-même ont été confrontées à des problèmes de communication entre un module NRF24L01 et une carte ARDUINO, spécialement lorsqu'il s'agit de modèles UNO ou NANO.

Je parle ici de problèmes de communication SPI et non pas de difficultés de communication sur la fréquence 2.4GHz.

1. Le NRF24L01

IMPORTANT : L'alimentation d'un NRF24L01 en 5V provoque la mort de celui-ci.

Ce module doit être alimenté au maximum sous 3.6V, donc l'alimenter par la sortie 3.3V d'une NANO ne semble pas une mauvaise idée.

Un petit condensateur de découplage de 100nF entre 3.3V et masse au plus près du NRF24L01 est une sage précaution.

Certains clones de NRF24L01 sont de qualité moyenne et réclament un découplage plus fort, 10µF au tantale à faible ESR ou à défaut un 47µF électrolytique de bonne qualité.

En alimentant le NRF24L01 sur la sortie 3.3V d'une NANO, avec 100nF je n'ai jamais eu de problème, mais cela peut certainement arriver avec certains clones.

Personnellement j'utilise beaucoup de PRO MINI 3.3V + NRF24L01 alimentés en 3.3V. L'alimentation est composée d'une batterie LITHIUM-ION + un régulateur externe du type LM2936-3.3V 50mA.

Ce régulateur réclame un découplage de 10µF électrolytique. Je n'ai pas de problème malgré des pointes de courant allant jusqu'à plus de 30mA.

Ce module est tolérant au 5V sur son bus SPI. On pourrait être tenté de croire que cela va bien se passer lorsqu'on le connecte directement sur le bus SPI d'un ARDUINO UNO ou NANO.

Mais il subsiste un doute. Si le niveau des signaux envoyés sur le bus SPI par l'ARDUINO est plus que suffisant (5V), celui des signaux envoyés par le NRF24L01 peuvent ne pas convenir car trop faibles (3.3V). Ceci est une supposition.

2. Montage direct ARDUINO NANO & NRF24L01

Ce montage utilise une breadboard sur laquelle un NRF24L01 est câblé directement sur les broches d'un ARDUINO NANO, ceci à l'aide de fils DUPONT.

L'ARDUINO est alimenté dans un premier temps par le câble USB, le temps de charger le sketch.

Ensuite l'USB est débranché et il est alimenté à l'aide d'une alimentation variable par sa broche 5V bien entendu.

Les broches sont connectées comme CECI.

Le code de test utilisé est celui d'un thermomètre comme CELUI-CI, utilisant un DS18B20.

L'ARDUINO NANO est donc alimenté par sa broche 5V et le NRF24L01 par la broche 3.3V de la NANO. Cette tension mesurée est de 3.26V.

Il ne reste plus qu'à faire varier la tension. J'obtiens un fonctionnement correct entre 4.4V et 6V.

Cela aurait tendance à prouver qu'il est possible de communiquer en SPI entre un NRF24L01 et un processeur en 5V.

Mais j'ai déjà eu un montage qui ne fonctionnait pas avec un chargeur USB fournissant 5.6V alors qu'il fonctionnait sur l'USB de mon PC.

On peut certainement mettre en  cause la qualité du chargeur et en déduire une certaine sensibilité à la qualité de l'alimentation.

Dans tous les cas, essayer d'utiliser une breadboard de qualité et des fils Dupont en bon état et le plus courts possible.

Si vous êtes obligé de forcer comme un bœuf pour enficher l'ARDUINO NANO ou MINI sur la breadboard, cela commence mal. C'est un signe que les problèmes ne font que commencer.

L'idéal est de se fabriquer une carte comme celle-ci, avec un vrai PCB. Il est facile de s'en inspirer pour créer une carte à base d'ARDUINO NANO.

3. Montage direct PRO MINI & NRF24L01

Ce montage est celui que j'utilise le plus souvent.

Voici quelques exemples :

Détecteur de mouvement MYSENSORS sur batterie

Prise connectée MYSENSORS

Thermomètre MYSENSORS sur batterie

Il fonctionne à coup sûr.

4. Dépannage

Alors comment s'en sortir ?

Je vous conseille de vérifier à l'aide d'un exemple simple le fonctionnement du couple ARDUINO / NRF24L01.

Branchez le NRF24L01 comme indiqué ICI.

Installez cette librairie RF24. Même si vous envisagez d'utiliser uniquement MYSENSORS, cela ne sera pas inutile.

Ensuite dans l'IDE ARDUINO chargez l'exemple de la bibliothèque nommé starping.

Modifiez-le comme ceci :

  // recherchez cette ligne
  radio.begin();
  // ajoutez ceci :
  Serial.print("Radio connected: ");
  Serial.println(radio.isChipConnected() ? "YES" : "NO !!!");

La méthode isChipConnected est récente. Elle permet de vérifier que le chip NRF24L01 est bien visible sur le bus SPI.

Téléversez le code et ouvrez la console.

Deux messages peuvent apparaître :

Radio connected: NO !!!

Vous avez un problème de communication sur le bus SPI.

Radio connected: YES

Votre bus SPI fonctionne. Vous pouvez envisager la suite avec sérénité.

ATTENTION : il existe deux librairies :

Actuellement lorsque l'on clone https://github.com/TMRh20/RF24.git github renvoie sur https://github.com/nRF24/RF24.

Par contre si vous faites une mise à jour de https://github.com/TMRh20/RF24.git celle-ci sera bien effectuée sur cette URL.

En cas de doute je vous conseille d'effacer votre répertoire RF24 et de refaire une installation propre.

5. Possibilités

Vérifiez et revérifiez votre câblage.

Ne faites pas passer de câbles sous l'antenne du NRF24L01.

Évitez les câbles trop longs.

Vérifiez votre tension d'alimentation. Alimentez votre ARDUINO avec un régulateur de qualité.

Si vous utilisez un ARDUINO ou un module radio ayant déjà servi, il se peut qu'il ait souffert de précédentes expérimentations. Essayez d'en changer.

Êtes-vous sûr de n'avoir pas inversé MISO / MOSI ?

Cela arrive ...

Si vous instanciez comme ceci :

RF24 radio(9,10);

Êtes-vous sûr que tes pins 9 et 10 sont reliées à CE et CS du NRF24L01 ?

6. Références

Librairie RF24 : https://github.com/nRF24/RF24

7. Mises à jour

21/09/2019 :  4. Dépannage (ATTENTION)


mardi 31 juillet 2018

Banc de Mesure de Consommation




Banc de Mesure de Consommation

Cet article décrit un banc de mesure de consommation. Il est réalisé autour d'une carte ARDUINO MEGA et possède deux modules INA226 et un afficheur OLED.

1. La théorie

La tension maximale aux bornes du shunt de l'INA226 est de 81.92mV, ce qui correspond pour un shunt de 100mΩ à un courant maximal mesurable arrondi de 820mA ou pour un shunt de 10Ω à un courant maximal mesurable arrondi de 8,20mA.

Pour le shunt de 100mΩ La résolution est donc de 820 / 32768 = 25µA.
Pour le shunt de 10Ω La résolution est donc de 8,20 / 32768 = 0.25µA.

Pourquoi 32768 alors que l'ADC de l'INA226 est un 16bits ? Parce qu'il est capable de mesurer des courants négatifs, donc 16 bits moins le bit de signe cela fait 15, et 2 à la puissance 15 = 32768.

Dans tous les cas, la chute de tension maximale aux bornes du shunt sera celle de l'INA226 : 81.92mV, ce qui est très acceptable.

2. Les fonctionnalités

Cette carte permet de mesurer la consommation de montages électroniques, en particulier de circuits à base de micro-contrôleurs à faible consommation comme décrit ICI.
Il est capable de mesurer des courants de 0.5µA à 0.8A.

Deux shunts sont utilisés :
  • un shunt 0.1Ω high-side
  • un shunt 10Ω low-side
Le shunt de 0.1Ω permet la mesure de courant jusqu'à 0.8A.
Le shunt de 10Ω est activé uniquement pour la mesure de courant inférieurs à 5mA.

La tension appliquée à la charge est également mesurée. Celle-ci peut être au maximum de 33V.
Un transil 33V et un fusible protègent le banc.

Ce banc permet donc d'alimenter des cartes à micro-contrôleur en 1.8V, 3.3V, 5V et plus. Il peut par exemple mesurer le courant sur le JACK d'alimentation d'un ARDUINO UNO en 7.5V ou 12V. Il n'est pas limité à la mesure de tensions faibles comme certains :
Exemple: ST microelectronics, limité à 1.8V - 3.3V.

Deux modes de fonctionnement sont possibles. Le choix se fait par un petit inverseur.

2.1. Mode autonome

Un petit afficheur OLED permet de visualiser la tension et le courant instantanés.

2.2. Mode connecté


Les données sont remontées vers un PC par le câble USB de l'ARDUINO MEGA.
Un logiciel sur le PC récolte les données et effectue les calculs :
  • tension minimale
  • tension maximale
  • tension moyenne
  • courant minimal
  • courant maximal
  • courant moyen
Le logiciel permet d'afficher également une courbe de consommation.
Il est développé en PYTHON + MATPLOTLIB.
 

2.3. Calibration

En l'absence de charge, l'appui sur un micro-switch permet de calibrer le zéro du banc.
Débrancher et brancher la câble USB. Appuyer sur le switch une vingtaine de secondes, relâcher. Appuyer à nouveau pour démarrer.
La calibration est sauvegardée en EEPROM.

2.4. Shield

La carte est développée sous forme de shield enfichable directement sur la carte ARDUINO MEGA. La carte MEGA est équipée de quatre pieds plastique.


3. Le matériel

Pour réaliser ce banc, il vous faudra réunir :
  • un ARDUINO MEGA
  • deux modules INA226
  • un shunt 10Ω CMS 2010
  • un shunt 100mΩ CMS 2010
  • un afficheur SSD1306 0.96 pouces
  • 1 condensateur de 100nF
  • un transistor MOSFET IRLZ44N
  • 1 résistance de 110Ω
  • 1 résistance de 9.1KΩ
  • deux connecteurs 2 broches mâles au pas de 2.54
  • trois connecteurs 8 broches mâles au pas de 2.54 
  • un connecteur 10 broches mâles au pas de 2.54 
  • un micro-switch pur PCB
  • un inverseur pour PCB
  • un porte-fusible 20mm
  • un transil 33V
  • une broche de test
  • quatre pieds plastique pour la MEGA
Souvent les modules INA226 sont équipés d'un shunt 10mΩ.
Ils doivent être remplacés. Il s'agit de résistance CMS 2010, maximum 2512.

Les valeurs des résistances de 110Ω et 9.1KΩ ne sont pas critiques. 100Ω et 10KΩ conviennent.
Le transil n'est pas obligatoire si vous êtes sûr de limiter la tension d'alimentation à 33V.


4. Le schéma


Sur ce diagramme de l'INA226 on peut voir que l'on peut faire la mesure de courant en low-side (côté GND) ou high-side (côté positif).

Le principe de fonctionnement du banc est le suivant :
  • un INA226 est utilisé en milliampèremètre (shunt de 100mΩ) et voltmètre en high-side
  • un INA226 est utilisé en microampèremètre (shunt de 10Ω) en low-side
  • un MOSFET canal N permet de court-circuiter le micro-ampèremètre lorsque la mesure est effectuée par le milliampèremètre
Le MOSFET canal N a une très faible résistance en état de conduction (22mΩ).

Le micro-ampèremètre est situé côté low-side car pour commander le MOSFET canal N il faut que sa source soit au GND, et que sa grille soit commandée par une tension positive suffisamment élevée (5V).

Le MOSFET est saturé en permanence, ce qui court-circuite le shunt de 10Ω du microampèremètre et permet d'éviter une chute de tension trop importante pendant la mesure des courants importants.Quand le courant mesuré sur le milliampèremètre est inférieur à 5mA, une tension de 0V est appliquée sur la grille du MOSFET afin de mettre en service le shunt de 10Ω. Une mesure est alors réalisée par le microampèremètre.



Le schéma est réalisé à l'aide de KICAD.

Pour récupérer le projet voir plus bas : 8. Téléchargements

Vous pouvez aisément essayer ce montage sur une breadboard.

5. IDE ARDUINO

Il vous faudra installer les bibliothèques ARDUINO suivantes :

Dans votre IDE (arduino-cc 1.8.5 par exemple), dans le menu "Outils/Type de Carte" choisir "Arduino MEGA".
 

6. Le code

Pour récupérer le projet voir plus bas : 8. Téléchargements

7. Photos

Voici quelques photos du montage réalisé :




La MEGA avec quatre pieds plastique.


La charge mesurée (à gauche) est une carte d'expérimentation MYSENSORS, montée en thermomètre basse consommation.
Elle est équipée d'un ARDUINO MINI, d'un module NRF24L01 et passe la plupart de son temps en mode sommeil profond. Toutes les 10 secondes elle se réveille pour effectuer une mesure de température et envoyer celle-ci via le module NRV24L01 à une passerelle MYSENSORS reliée à un serveur DOMOTICZ.
La carte est alimentée en 3.7V, et possède un régulateur 3.3V consommant à lui tout seul 14µA.
Cet exemple illustre parfaitement l'utilisation du banc. Le but est de connaître avec précision la consommation moyenne de la carte afin de dimensionner correctement la batterie LITHIUM-ION qui l'alimente.
Comme on le voit sur le graphe en 1.2, la carte consomme 15.5µA en mode sommeil, 33mA lors de l'émission des données, ce qui donne une moyenne de 75µA.
Avec une batterie de 600mAH, l'autonomie serait donc de 8000 heures, soit 333 jours.

La période de 10 secondes a été choisie à titre d'exemple pour cet essai. Une période de mesure de plusieurs minutes serait plus adaptée pour un thermomètre, et la consommation moyenne serait encore plus basse.

Mon thermomètre sur batterie effectue une mesure toutes les 15 minutes. Il est en service depuis décembre et affiche encore une capacité batterie de 92%.
Mon détecteur de mouvement  consomme 65µA. Il est en service depuis fin avril et affiche une capacité batterie de 77%.
 

8. Téléchargements

Le projet est disponible ici : https://bitbucket.org/henri_bachetti/ina226-usb-power-bench

Le logiciel PYTHON est fourni : INA226_powerbench.py

Cette page vous donne toutes les informations nécessaires :
https://riton-duino.blogspot.com/p/migration-sous-bitbucket.html

9. Bibliographie

Le sujet sur le forum ARDUINO :
https://forum.arduino.cc/index.php?topic=545217.0
Le projet sur le forum ARDUINO :
https://forum.arduino.cc/index.php?topic=561033.0

10. Mises à jour

01/08/2018 : améliorations du code.
02/11/2018 : ajout du paragraphe 1. La théorie
12/01/2019 : ajout de photos
22/03/2019 : déménagement du projet vers BitBucket.org
08/09/2019 : 4. Le schéma (synoptique)

lundi 7 mai 2018

Batteries LITHIUM-ION et NI-MH

Batteries LITHIUM-ION et NI-MH


Nous autres bidouilleurs sur ARDUINO utilisons fréquemment des batteries pour nos montages.
On trouve sur les sites chinois ou Amazon des batteries LITHIUM-ION ayant soit des capacités extraordinaires soit un prix dérisoire.
Qu'en est-il de leur qualité ? Et si l'on mesurait leur capacité réelle ?

1. Banc de test

J'ai utilisé pour cela un ARDUINO PRO MINI 8MHz, sur une carte développée par mes soins il y peu.

La décharge est assurée par une résistance bobinée métallique de 10 ohms 3W.
La batterie est chargée à bloc.
L'ADC de l'ARDUINO est étalonné : 1.088V avec un multimètre 40000 points
Une mesure est effectuée toutes les 30s.

La PRO MINI dort entre chaque mesure. La consommation est de 5µA.

La tension de la batterie est de 4.2V à vide.
La tension de la batterie avec la résistance connectée est de 3.7V.
Un buzzer est activé quand la tension descend à 3V.

Pour le calcul de la capacité des plutôt que de faire un relevé sur toute la longueur de la décharge. Nous choisirons une tension moyenne de 3.3V, ce qui semble assez réaliste quand on regarde une courbe de décharge.


2. Résultats

2.1. UltraFire 6000mAH

La batterie est neuve. Première recharge.

La décharge a duré 3H à 330mA.

Une capacité équivalente à 990mAH.

Cette batterie ne tient absolument pas ses promesses. je dirais même que c'est de l'escroquerie.
C'est une batterie que j'utilise pour des essais et des prototypes, pas pour des réalisations définitives. Sa taille est trop importante de toutes façons.

2.2. SAMSUNG 2500mAH

Cette batterie a déjà été utilisée dans une vapoteuse. Elle a déjà subi quelques recharges, moins de dix.

La décharge a duré 6H à 330mA.

Une capacité équivalente à 1980mAH.

Cette batterie a déjà délivré des courants importants, de l'ordre de 12A. Cela explique peut-être la différence entre la capacité annoncée et la capacité mesurée.

2.3. GTL 2300mAH

La batterie est neuve. Première recharge.

La décharge a duré 41 minutes à 330mA.

Une capacité équivalente à 225mAH.

Dommage, cette batterie a un format 16340, intéressant  pour les montages où la place est comptée. J'en ai deux en cours d'utilisation pour l'instant, dans un thermomètre et un détecteur de présence.
Le thermomètre est en service depuis la mi-décembre et la batterie a encore 92% de sa capacité.
Cela reste une batterie intéressante pour des montages à très faible consommation, mais il est certainement possible de trouver des modèles à un prix correspondant plus à sa capacité réelle.

2.3. CELLEVIA ACCU-600/3NI-MH/C

La batterie NI-MH est neuve. Première recharge.

La décharge a duré 2H45 à 330mA.

Une capacité équivalente à 900mAH.

Les fabricants de batteries NI-MH seraient-ils plus honnêtes que les fabricants de batteries LITHIUM-ION ?

3. Récapitulatif


Modèle Technologie Format Tension nominale Capacité mesurée Poids
UltraFire 6000mAH LI-ION 18650 3.7V 990mAH 35,4g
SAMSUNG 2500mAH LI-ION 18650 3.7V 1980mAH 43.5g
GTL 2300mAH LI-ION 16340 3.7V 225mAH 13.7g
CELLEVIA ACCU-600 NI-MH 2/3AA 3.6V 900mAH 42.3g

4. Conclusion 

Quand on achète une batterie sur AliExpress ou Amazon, il vaut mieux éviter celles qui semblent avoir des capacités irréalistes par rapport à d'autres, surtout si le prix est bas.
Ne vous faites pas avoir.


4. Versions

07.05.2018 : ajout de la CELLEVIA ACCU-600

dimanche 6 mai 2018

Carte de test ARDUINO NANO




Carte de test ARDUINO NANO

Cet article décrit une carte d'expérimentation et de test pour une carte ARDUINO NANO.


1. Les fonctionnalités

Cette carte permet de se passer de breadboard dans la plupart des cas.
Les problèmes de faux contacts habituels sont fortement diminués du fait de l'utilisation de connecteurs de qualité.

Elle permet également de tester une carte "douteuse" ou un lot de cartes dont vous auriez fait l'acquisition.

Elle est équipée de connecteurs de reprise des broches de l'ARDUINO permettant de tester rapidement un composant quelconque.

Il est possible de connecter 18 LEDs sur ses entrées sorties. Ces LEDs sont enfichées sur des connecteurs deux broches et peuvent être connectées au +5V ou à la masse, suivant le besoin.
Il est possible bien sûr de brancher autre chose sur ces connecteurs, des boutons poussoirs par exemple.
Deux LEDs bleues permettent de visualiser l'état des alimentations 5V et 3.3V.
Deux potentiomètres sont connectés sur les broches A6 et A7.

2. Le matériel

Pour réaliser cette carte, il faut réunir le matériel suivant :
  • 4 connecteurs femelle 2.54 15 broches
  • 2 batterie lithium-ion
  • 2 LEDs bleues
  • 18 LEDs vertes ou rouges ou jaunes
  • 2 potentiomètres 5K
  • 1 connecteur d'alimentation Jack 5.5 x 2.1
  • 1 interrupteur
  • 1 broche de test
  • 4 petites colonnettes 2.5 ou 3mm et 4 vis

3. Le schéma

Le schéma est réalisé à l'aide de KICAD.

Pour récupérer le projet voir ci-dessous : 7. Téléchargements

4. Photos

Voici une image de la carte :

5. Utilisation

Cette carte peut être utilisée soit alimentée par l'USB de l'ARDUINO, soit par les deux batteries, soit par le connecteur JACK.
Si vous alimentez par le connecteur JACK, enlevez les deux batteries.
L'USB peut être branché dans les deux cas.

A gauche des batteries on peut voir la broche de test. Vous pourrez y connecter la masse de votre multimètre ou oscilloscope.

Les LEDs peuvent être connectées entre sortie et masse (connecteurs extérieurs) ou sortie et +5V, comme sur la photo.
Elles consomment chacune 2mA.
Bien entendu, sur un même port de sortie il faudra éviter de connecter une LED à la masse et une au +5V. C'est l'un ou l'autre.

Lorsque vous communiquez avec un composant I2C par exemple, vous pouvez laisser deux LEDs entre les broches A5 et A6 et le +5V. Elle ne sont pas gênantes et vont clignoter pendant la communication.


6. Le code

Pour récupérer un sketch exemple voir ci-dessous : 7. Téléchargements
 
Il s'agit d'un code exemple permettant d'allumer successivement les 18 LEDs. Les deux potentiomètres permettent de régler le temps d'allumage et d'extinction.

7. Téléchargements

Le projet est disponible ici : https://bitbucket.org/henri_bachetti/arduino-nano-test-board

Cette page vous donne toutes les informations nécessaires :
https://riton-duino.blogspot.com/p/migration-sous-bitbucket.html


Cordialement
Henri

dimanche 29 avril 2018

Détecteur de mouvement MYSENSORS sur batterie


Détecteur de mouvement MYSENSORS

sur batterie


Le but de cette page est d'expliquer pas à pas la réalisation d'un détecteur de mouvement basse consommation à base d'ARDUINO PRO MINI, relié par radio à un serveur DOMOTICZ, à l'aide d'un module NRF24L01 2.4GHZ.

Il s'adresse à toute personne ayant une bonne expérience en matière de développement ARDUINO et quelques notions d'électroniques.

Un serveur DOMOTICZ (ou autre supporté par MYSENSORS) est nécessaire. Ce serveur domotique peut être installé avantageusement sur une plateforme du type RASPBERRY PI.
On lui connectera une passerelle MYSENSORS. Cette passerelle peut être construite avec une carte ARDUINO UNO ou NANO et un deuxième module NRF24L01.

Les liens suivants vous seront utiles :
https://riton-duino.blogspot.com/2019/05/mysensors-presentation.html 
https://easydomoticz.com/domoticz-arduino-mysensors-org-partie-2-la-passerelle

1. Les fonctionnalités

Le montage proposé permet de remonter au serveur DOMOTICZ une information de passage d'une personne devant un capteur du type HC-SR501.
Il permet de remonter également le niveau de la batterie.

L'autonomie est importante. Avec une consommation de 65µA, une batterie de 2300mAH devrait durer 35000 heures. Seule l'auto-décharge de la batterie peut poser problème. Préférer les modèles à faible auto-décharge.

2. Le matériel

Pour réaliser ce détecteur, il vous faudra réunir :
  • un ARDUINO PRO MINI 8Mhz 3.3V
  • un module radio NRF24L01
  • un détecteur de mouvement HC-SR501 ou HC-SR602
  • une résistance de 47 K
  • une résistance de 1 M
  • une résistance de 330 K
  • un régulateur LM2936-3.3
  • un condensateur 6.2V 10 µF 
  • une LED blanche 3 mm
  • un chargeur TP4056
  • un connecteur 2 broches mâle au pas de 2.54
  • un connecteur 3 broches mâle au pas de 2.54
  • un accumulateur  3.7V LI-ION 16340
  • un support de batterie 16340 pour PCB
  • un cavalier au pas de 2.54
  • un petit câble type DUPONT 3 broches
Voici le support que j'utilise :
https://fr.aliexpress.com/item/Coque-en-plastique-3-V-CR123A-Bouton-Titulaire-Sockets-Cas-Noir/32833014988.html?spm=a2g0s.9042311.0.0.ppOTYI
Le PCB est prévu pour une batterie 16340 sur support mais il est tout à fait possible d'utiliser une LIPO fixée au PCB par de l'adhésif double face ou de la colle. La place disponible pour la batterie est de 24x42mm, ou 31x36mm, ce qui autorise un vaste choix.

Personnellement j'ai utilisé une XTAR 16430 650mAH achetée chez Gotronic.

2.1 Le capteur HC-SR602

Ce capteur consomme moins que le HC-SR501 et n'a besoin d'aucune modification pour qu'il fonctionne en 3.3V.
De plus il est beaucoup plus petit et sera plus facile à intégrer dans un boîtier.
Je le recommande.
Par contre il n'a pas de réglage de portée ni de temps.

2.2 Le capteur HC-SR501

Si l'on a que ce modèle sous la main le détecteur HC-SR501 doit être modifié pour pouvoir fonctionner en 3.3V.

Partons du schéma :

On voir rapidement que l'intégralité de la carte fonctionne en 3.3V.
Il suffirait de :
- court-circuiter la diode D1
- dessouder le régulateur IC1
- court-circuiter les broches Vin et Vout.

 


C'est ce que j'ai fait et cela marche parfaitement bien.

Sur l'image, les deux traits rouges représentent les deux straps à mettre en place.
Je n'ai pas essayé de laisser le régulateur en place. Cela provoquerait certainement une surconsommation.
Attention, sans la diode D1, plus aucune protection contre les inversions de polarité de l'alimentation.

Dernière chose : la consommation de ce PIR modifié est de 60µA au repos.


3. Le schéma


Le schéma est réalisé à l'aide de KICAD.

Pour récupérer le projet voir plus bas :  12. Téléchargements.

Vous pouvez aisément essayer ce montage sur une breadboard.

Remarque  : sur le schéma, le brochage connecteur P1 ne correspond pas au brochage du capteur HC-SR501.

Le capteur doit être raccordé avec 3 fils en respectant son brochage :

Connecteur P1 :
1 : GND
2 : +3.3V
3 : OUT

HC-SR501 :
1 : GND
2 : OUT
3 : +3.3V

HC-SR602 :
1 : GND
2 : +3.3V
3 : OUT
 

4. Réalisation

La réalisation ne pose pas de problème particulier. Tout est sur la carte, sauf le détecteur.
Attention : le câble reliant celui-ci à la carte n'est pas droit.
Sur la carte le connecteur est câblé comme suit :
GND 3.3V SIGNAL
Sur le détecteur le connecteur est câblé comme suit :
GND SIGNAL 3.3V
Voir photo ci-dessous.

Un cavalier est placé sur le connecteur deux broches au dessus à gauche.  Celui-ci a deux fonctions :
  • connecter et déconnecter la batterie à l'aide du cavalier
  • mesurer la consommation du montage à l'aide d'un multimètre
Un petit câble de mesure maison

5. La basse consommation

Reportez-vous à la page traitant de l'ARDUINO MINI.

6. Photos

Voici une image de la carte :


7. IDE ARDUINO

Il vous faudra bien entendu installer les bibliothèques ARDUINO suivantes :
Librairie MYSENSORS : https://www.mysensors.org/download

Dans votre IDE (arduino-cc 1.6.9 par exemple), dans le menu "Outils/Type de Carte" choisir "Arduino Pro or Pro Mini". Dans le menu "Outils/Processeur" choisir "ATmega328 (3.3V, 8MHz)".


8. Le code

Pour récupérer le projet voir plus bas :  12. Téléchargements.
 
La fonction sleep() permet d'endormir l'ARDUINO et le NRF24L01.

La valeur de VREF dans le sketch est à adapter en fonction de la mesure réelle de la tension de la batterie.
La tension mesurée par l'ARDUINO est affichée dans le terminal. A comparer donc avec la valeur affichée par un bon multimètre.

9. Chargement

Reportez-vous à la page traitant de l'ARDUINO MINI.

10. DOMOTICZ

Reportez-vous à ce document :

11. Boîtier

Ce montage a été intégré dans boîtier kradex-Z-123.

https://www.tme.eu/fr/details/z-123_wh/boitiers-universels/kradex/z123b-abs/

12. Téléchargements

Pour télécharger le projet : https://bitbucket.org/henri_bachetti/mysensors-motion-sensor
 
Cette page vous donne toutes les informations nécessaires :
https://riton-duino.blogspot.com/p/migration-sous-bitbucket.html

13. Liens utiles

DOMOTICZ : https://domoticz.com/

14. Retour sur expérience

La batterie a une capacité théorique de 2300mAH, ce qui est totalement farfelu pour une batterie de cette taille. En réalité elle a une capacité de 225mAH.

Comme il y a pas mal de passage dans la couloir où le capteur est installé, la batterie tient environ 6 mois.

Le 23/04/2020 le l'ai remplacée par une batterie de marque : une XTAR 650mAH.

La Recharge suivante a été faite le 10/12/2021 : l'autonomie est de 20 mois.



Cordialement
Henri

14. Mises à jour

20/09/2018 : bug fix dans la mesure de tension batterie
29/06/2019 : 8. Le code (réglage de VREF)
25/10/2019 : 14. Retour sur expérience

jeudi 19 avril 2018

Carte d'expérimentation MYSENSORS




Carte d'expérimentation MYSENSORS


D'habitude lorsque j'ai besoin de développer un nouveau capteur MYSENSORS je fais d'abord une expérimentation sur breadboard.




J'enfiche Un ARDUINO MINI, un NRF24L01 sur un adaptateur, un régulateur 3.3V et quelques condensateurs.
Mais c'est un peut frustrant de recommencer à chaque fois la même opération fastidieuse de connexion entre ces composants.
L'idéal serait de pouvoir disposer d'une carte toute faite regroupant tout le nécessaire une bonne fois pour toutes.


1. Les fonctionnalités

La carte en question devrait idéalement regrouper :
  • un ARDUINO PRO MINI
  • un module NRF24L01
  • une batterie lithium-ion
  • un régulateur 3.3V
  • des connecteurs de reprise des broches de l'ARDUINO
  • des connecteurs d'alimentation
  • un connecteur de mesure de consommation
Le but de cette carte est de développer principalement des applications sur batterie mais un connecteur d'alimentation externe est prévu.
On peut y brancher une autre batterie ou une alimentation régulée.

Le régulateur utilisé est un LM2936-3.3. Sa tension de dropout est de seulement 200mV. C'est important dans le cas d'une alimentation par batterie NI-MH en 3.6V ou lithium-ion en 3.7V.

Il délivre 50mA. Cela peut paraître peu mais suffit amplement pour la majeure partie des application.

La puissance maximale dissipée par le régulateur est de 700mW.
Le courant maximal disponible sur la ligne 3.3V dépendra de la tension d'alimentation en entrée.

Pour une batterie lithium-ion à pleine charge, donc 4.2V :
Pmax = Imax * (Vin - Vout) = 0.05 * (4.2 - 3.3) = 45mW
Pour une alimentation en 12V :
Pmax = Imax * (Vin - Vout) = 0.05 * (12 - 3.3) = 435mW

Dans les deux cas, les 700mW ne sont pas dépassés.

2. Régulateurs

Il est bien entendu possible de remplacer ce régulateur par un modèle plus approprié à vos applications.Attention au brochage le pinout du LM2936 est le suivant :
  • 1: OUT
  • 2: GROUND
  • 3: IN
La tension d'une batterie lithium-ion chute à 3.7V lorsque sa capacité restante est de 55%.
Avec un LM2936 cette tension pourra descendre à 3.5V, ce qui correspond à une capacité restante de 30%.

Le LP2950 peut être une bonne alternative, mais sa tension de dropout est un peu trop importante.

En modifiant le schéma et le routage vous pourrez adapter d'autres régulateurs :
Pour vous aider dans votre choix, voici une liste de régulateurs que vous pourrez utiliser :
https://riton-duino.blogspot.com/2018/11/les-regulateurs-ldo.html

3. Le matériel

Pour réaliser cette carte, il faut réunir le matériel suivant :
  • un ARDUINO PRO MINI 8Mhz 3.3V
  • un module radio NRF24L01
  • un régulateur LM2936-3.3V
  • quatre connecteurs femelle 2.54 12 broches
  • un connecteur femelle 2.54 4 broches
  • deux connecteurs femelle 2.54 8 broches
  • un connecteur mâle 2.54 2 broches
  • 1 connecteur NS25-W2P
  • un support de batterie lithium-ion 18650
Vous pouvez trouver tous ces composants facilement chez les revendeurs classiques ou vous inspirer de leurs caractéristique pour trouver des équivalents sur les sites chinois.
J'ai par exemple trouvé des connecteurs identiques aux NS25 sur AliExpress, où ils s'appellent KF2510.


4. Le schéma


Le schéma est réalisé à l'aide de KICAD.

Pour récupérer le projet voir plus bas :  9. Téléchargements.

5. Connexions

Le NRF24L01 est connecté à l'ARDUINO comme suit :

NRF24L01 PIN ARDUINO PRO MINI
3 CE D7
4 CSN D8
5 SCK D13
6 MOSI D11
7 MISO D12
8 IRQ D2

Dans le sketch, il faudra définir CS et CSN comme suit:

#define MY_RF24_CE_PIN 7
#define MY_RF24_CS_PIN 8

6. Photos

Voici une image de la carte :


7. Utilisation

Le connecteur sur lequel est placé un cavalier bleu à côté de la batterie a deux fonctions :
  • connecter et déconnecter la batterie à l'aide du cavalier
  • mesurer la consommation du montage à l'aide d'un multimètre
Un petit câble de mesure maison
La consommation d'un montage dépend du matériel utilisé mais également du logiciel. Par exemple :

NŒUD Consommation Remarques
Répéteur 20mA Il est toujours en réception, jamais en veille.
Capteur de température DS18B20 20µA Il est en sommeil permanent et envoie périodiquement la température mesurée à la passerelle.

Si le sujet basse consommation vous intéresse, voyez ICI.

Sous le cavalier bleu se trouve le connecteur d'alimentation externe. Si vous branchez dessus une alimentation 5V à 24V ou une batterie NI-MH, il vous faudra retirer la batterie lithium-ion.

En bas à droite, un connecteur fournissant 8 masses.
En bas à gauche, un connecteur fournissant des alimentations
  • 4 pins de droite : tension batterie ou externe
  • 4 pins de gauche : 3.3V
En haut, de part et d'autre de l'ARDUINO, deux connecteurs 12 points fournissent un accès aux pins de l'ARDUINO.
Tout en haut un connecteur 4 points fournit un accès aux pins A6, A7, A4 et A5 de l'ARDUINO.

8. La sécurité

Le courant disponible sur la ligne VCC dépend totalement de la source de tension utilisée.
ATTENTION, une batterie lithium-ion peut délivrer des courants importants. Certaines d'entre elles peuvent délivrer 20A ou plus.
Il est très facile de faire fondre des fils de connexion ou les pistes de la carte en cas de court-circuit.
Je vous conseille d'utiliser une alimentation externe limitée en courant dans un premier temps, et de remplacer par la batterie une fois que vous êtes sûr que votre câblage est correct.

9. Téléchargements

Pour télécharger le projet : https://bitbucket.org/henri_bachetti/mysensors-experimentation-board
 
Cette page vous donne toutes les informations nécessaires :
https://riton-duino.blogspot.com/p/migration-sous-bitbucket.html

10. Références


LM2936 : http://www.ti.com/lit/ds/symlink/lm2936.pdf
NRF24L01 : http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01
Basse consommation : https://riton-duino.blogspot.fr/2018/02/arduino-pro-mini-basse-consommation.html
 

11. Mises à jour

20/04 : Régulateurs - ajout du régulateur 7133-1
24/04 : Régulateurs - ajout du régulateur 7533-1
04/05 : Régulateurs - ajout du régulateur 7333-1, MIC5205

dimanche 15 avril 2018

DFPLAYER MINI et bruit de fond

DFPLAYER MINI et bruit de fond

 

J'ai en cours de réalisation un carillon intelligent. Pour cela je suis en train d'expérimenter le DFPLAYER MINI. J'utilise la librairie DFROBOT.

1 Présentation

Le carillon est équipé d'un détecteur de mouvement HR-SR501 afin de diffuser un premier son (aboiement de chien) et éventuellement allumer la lumière en cas de visite. Reste à compléter avec un détecteur de luminosité.

Afin d'obtenir plus de puissance un amplificateur à base de TDA8932 alimenté en 24V est branché en sortie du DFPLAYER, car je compte utiliser un haut-parleur de 10cm large-bande de plusieurs dizaines de watts :

1.1. L'amplificateur intégré

Le DFPLAYER est équipé d'un amplificateur 8002A de 3W mono :


Sur ce schéma on voit que les 2 sorties du DAC, DAC_L et DAC_R sont mélangées par les deux résistances R2 et R3, avant d'attaquer l'amplificateur mono 8002A.

ATTENTION : Les deux sorties SPK_1 et SPK2 du DFPLAYER sont deux sorties en opposition de phase. L'amplificateur 8002A du DFPLAYER est un amplificateur bridgé :

Il ne faut en aucun cas considérer que SPK_1 ou SPK_2 est une masse, sous peine de griller le 8002A. Cela m'est arrivé, mais le module n'est pas mort pour autant. Je continue à l'utiliser, sans le 8002A (voir plus loin :  2.3. Suppression de l'amplificateur intégré).

REMARQUE : le DFPLAYER peut parfaitement être utilisé sans haut-parleur, en reliant un casque stéréo sur les sorties DAC_L et DAC_R.

2. Expérimentation

J'ai dans un premier temps réglé le volume du DFPLAYER sur 5 afin de limiter la puissance de sortie.

  myDFPlayer.volume(5);

La première chose que j'ai remarqué et un bruit important, d'une part un bruit de fond au repos, et d'autre part des bruits numériques très gênants pendant la restitution d'un MP3.

J'ai lu que certains problèmes de bruit pouvaient être réglés par l'ajout de résistances de 1K sur RX TX. Cela n'apporte rien ou presque.

L'amplificateur est hors de cause car en débranchant son entrée, le bruit de fond disparaît.

Je me suis dit que je pouvais certainement diminuer ces bruits en augmentant le signal de sortie du DFPLAYER.

J'ai donc intercalé un potentiomètre 47K logarithmique entre le DFPLAYER et l'amplificateur :

Et je règle le volume du DFPLAYER au maximum.

  myDFPlayer.volume(30);

La solution apporte un gain énorme en terme de rapport signal sur bruit. Je passe d'une solution à peine utilisable à une solution pleinement satisfaisante.

2.1. Câblage

2.1.1. Version mono



On utilise les sorties DAC_L et DAC_R et on les mélange à l'aide de deux résistances. Le connecteur OUT est relié par un câble à l'entrée de l'amplificateur additionnel.

Pour déterminer le réglage optimal du volume, régler le potentiomètre sur zéro, jouer un morceau et augmenter le volume jusqu'à atteindre la puissance désirée.

2.1.1. Version stéréo

il faut tout simplement relier les sorties DAC_L et DAC_R à l'entrée d'un amplificateur stéréo, en intercalant un potentiomètre logarithmique stéréo si celui-ci n'en est pas équipé.

2.2. Choix de l'amplificateur

On peut soit augmenter la puissance disponible en adoptant un amplificateur alimenté en 12V ou plus, soit utiliser un autre amplificateur 5V comme un PAM8403, ce qui limitera la puissance à 3W.

2.3. Suppression de l'amplificateur intégré

Il peut arriver que l'amplificateur 8002A du DFPLAYER soit grillé par une mauvaise manipulation. Si cela arrive, ne pas jeter le module.

On peut continuer à l'utiliser en reliant un casque stéréo sur les sorties DAC_L et DAC_R. 

Pour une utilisation sur haut-parleur :

On peut l'utiliser en version stéréo (voir 2.1.1. Version stéréo), mais je pense qu'il serait plus sage de dessouder le 8002A, car sinon il pourrait être la cause d'une consommation excessive. Sinon, il est préférable de mesurer sa consommation. Elle ne doit pas excéder une vingtaine de mA sans la µSD.

Pour une version mono on peut s'en sortir sans ajouter de résistances de mélange comme sur le schéma ci-dessus, en réutilisant celles du DFPLAYER (R2 et R3). Il faut dessouder le 8002A. Ensuite, il faut relier la broche 4 du 8002A à la broche SPK_2 ou SPK_1 du DFPLAYER à l'aide d'un petit fil :

Amplificateur 8002A dessoudé

Ensuite on n'aura plus qu'à ajouter un potentiomètre et un amplificateur, un PAM8403 par exemple, dont on utilisera une seule voie.

3. Conclusion

S'il vous est déjà arrivé d'essayer un DFPLAYER et que vous avez trouvé ce module exécrable en terme de bruit, voilà la solution pour le réhabiliter.Je ne manquerai pas de créer un article quand le projet sera terminé.


Cordialement

Henri

4. Bibliographie

DFPLAYER : http://www.picaxe.com/docs/spe033.pdf

4 Mises à jour

03/07/2019 : 1.1. L'amplificateur intégré
                     2.1. Câblage                     2.2. Choix de l'amplificateur 
                     2.2. Suppression de l'amplificateur intégré

samedi 31 mars 2018

STM32 et ARDUINO

STM32 et ARDUINO

 

J'avais récemment fait l'acquisition de quelques cartes STM32 dites "BLUE PILL" dans le but de les utiliser avec les librairies STM32DUINO.

1. Présentation

Les cartes "BLUE PILL" sont équipées d'un processeur STM32F103C8T6 :

  • Large gamme de tension d'utilisation de 2V à 3.6V
  • 64Ko de mémoire flash
  • 20Ko de SRAM
  • Unité de calcul CRC, ID unique 96 bits
  • Deux convertisseurs A/N 1µs 12 bits (jusqu'à 10 voies)
  • Contrôleur DMA 7 voies, 3 timers à usage général et 1 timer de contrôle avancé
  • 37 ports E/S rapides dont 15 PWM
  • Interfaces de débogage fil série (SWD) et JTAG
  • Interfaces : deux SPI, deux I2C, trois USART, une USB et une CAN

La carte "BLUE PILL" vous permet d'exploiter 32 ports sur les 37 disponibles.

Souvent ces cartes sont équipées de 128K de mémoire FLASH.

Comme vous pouvez le constater, rien à voir avec l'ATMEGA 328 équipant les ARDUINO UNO, NANO ou MINI.

2. Pourquoi ARDUINO

Concernant le développement STM32 en général, on peut objecter que l'on peut développer avec d'autres librairies :

  • les librairies ST STM32Cube. Trop bas niveau, demande beaucoup de travail
  • MBED qui vous offrira un ensemble de librairies permettant de gérer des afficheurs, des modules de communication et des composants divers

Dans ce cas, on utilise un compilateur GCC ou ARM et l'utilisation d'un ST-LINK ou JLINK permet en plus du chargement en FLASH ... de profiter du DEBUGGER, gdb ou autre. Les IDE KEIL, PlatformIO ou à base d'ECLIPSE permettent de travailler bien plus confortablement qu'avec l'IDE ARDUINO.

Une présentation est faite ici : https://riton-duino.blogspot.com/2019/03/stm32-environnements-de-developpement.html

Mais dans ce cas, on ne bénéficie pas de toutes les bibliothèques ARDUINO et c'est franchement dommage.

Normalement, certaines librairies ARDUINO devraient fonctionner avec ces environnements, par contre il faudra les intégrer vous-même à vos projets, et gérer les dépendances (certaines librairies ont besoin d'autres librairies). L'opération ne sera pas aussi facile qu'avec l'IDE ARDUINO et STM32DUINO.

L'intérêt de cette manip est de bénéficier de la puissance de feu extraordinaire des STM32 en développant des applications comme sur un ARDUINO, avec le capital fantastique des librairies ARDUINO.

3. Bootloader

Le STM32 possède déjà un bootloader (hard-coded), celui de ST MICROELECTRONICS. Celui-ci est même capable de charger une application par I2C et SPI !!!

Nous allons donc nous passer du bootloader ARDUINO, totalement inutile.

Certains développeurs se passent fort bien du bootloader sur leurs cartes ARDUINO. Ils chargent leur application avec un boîtier AVRISP ou USBasp, etc. Cela permet d'économiser l'espace occupé par le bootloader.

4. Installation

Comme dit au début de ce document, le but est de développer du logiciel en utilisant les librairies ARDUINO. Nous allons donc commencer par installer les librairies logicielles spécifiques à ce processeur.

Il faut d'abord télécharger cette archive, et la décompresser dans le répertoire hardware de votre répertoire d'installation ARDUINO.

Ensuite ouvrez le menu Outils -> Type de carte -> Gestionnaire de carte. Installer le paquet "Arduino SAM Boards (32-bits ARM Cortex-M3)".

Ce paquet supporte l'ARDUINO DUE.

Il y a plus simple :

Il suffit d'ajouter l'URL https://raw.githubusercontent.com/stm32duino/BoardManagerFiles/master/STM32/package_stm_index.json  aux gestionnaires de cartes supplémentaires : voir Fichier / Préférences.

Dans sa dernière version 2.1.0 l'URL change :

https://github.com/stm32duino/BoardManagerFiles/raw/master/package_stmicroelectronics_index.json

Une autre URL existe (je n'ai pas testé)

http://dan.drown.org/stm32duino/package_STM32duino_index.json

5. Câblage

Pour pouvoir charger un logiciel dans la carte et disposer du Moniteur série de l'IDE ARDUINO nous allons utiliser un convertisseur USB / série. Choisissez un modèle compatible 3.3V. La photo suivante représente un convertisseur supportant le 5V et le 3.3V.

Seules 4 pins seront utilisées :



Provenance de la photo : www.hackster.io

6. Premier sketch

Pour tester le premier sketch "blink", nous allons utiliser LED_BUILTIN (PC13) pour faire clignotter la LED de la carte.

Nous allons écrire un petit logiciel "blink".

#define LED LED_BUILTIN

void setup() { 
  pinMode(LED, OUTPUT);
  Serial.begin(115200);
}

void loop() {
  digitalWrite(LED, HIGH);
  delay(1000);
  digitalWrite(LED, LOW);
  delay(1000);
  Serial.println("OK");
}

Comme vous pouvez le constater, rien ne distingue ce premier sketch d'un sketch ARDUINO classique.

7. Chargement

7.1 Avec le bootloader intégré

7.1.1. Version 2.1.0

STM32DUINO évolue sans cesse, et les outils ST MICROELECTRONICS aussi.

23/04/2022 : dans la version 2.1.0, l'utilitaire ST-FLASH a été remplacé par STM32CubeProgrammer. Cette méthode de chargement par la ligne série ne fonctionne plus, en tous cas je n'ai pas réussi à l'utiliser.

Lire le paragraphe suivant : 7.2. Avec ST-LINK

7.1.2. Anciennes versions

Dans le menu Outils choisissez votre type de carte et la méthode de chargement :
Type de carte : Generic STM32F103C
Variant : STM32F103C8 (20k RAM, 64K Flash)
Upload method : serial
Port : le port série correspondant à votre convertisseur

Remarque : avec la version STM32DUINO 1.5.0, la BLUE PILL se trouve ici :

Type de carte : Generic STM32F1 series
Board part Number : Blue Pill F103C8

Placez le cavalier boot0 sur 1 et appuyez sur le bouton RESET. Cliquer sur téléverser. Il doit se produire ceci :

stm32flash Arduino_STM32_0.9

http://github.com/rogerclarkmelbourne/arduino_stm32

Using Parser : Raw BINARY
Interface serial_posix: 230400 8E1
Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0410 (Medium-density)
- RAM        : 20KiB  (512b reserved by bootloader)
- Flash      : 128KiB (sector size: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB
Write to memory
Erasing memory

Wrote address 0x08000100 (3.30%) 
Wrote address 0x08000200 (6.61%) 
Wrote address 0x08000300 (9.91%) 
Wrote address 0x08000400 (13.22%) 
Wrote address 0x08000500 (16.52%) 
Wrote address 0x08000600 (19.82%) 
Wrote address 0x08000700 (23.13%) 
Wrote address 0x08000800 (26.43%) 
Wrote address 0x08000900 (29.74%) 
Wrote address 0x08000a00 (33.04%) 
Wrote address 0x08000b00 (36.34%) 
Wrote address 0x08000c00 (39.65%) 
Wrote address 0x08000d00 (42.95%) 
Wrote address 0x08000e00 (46.26%) 
Wrote address 0x08000f00 (49.56%) 
Wrote address 0x08001000 (52.87%) 
Wrote address 0x08001100 (56.17%) 
Wrote address 0x08001200 (59.47%) 
Wrote address 0x08001300 (62.78%) 
Wrote address 0x08001400 (66.08%) 
Wrote address 0x08001500 (69.39%) 
Wrote address 0x08001600 (72.69%) 
Wrote address 0x08001700 (75.99%) 
Wrote address 0x08001800 (79.30%) 
Wrote address 0x08001900 (82.60%) 
Wrote address 0x08001a00 (85.91%) 
Wrote address 0x08001b00 (89.21%) 
Wrote address 0x08001c00 (92.51%) 
Wrote address 0x08001d00 (95.82%) 
Wrote address 0x08001e00 (99.12%) 
Wrote address 0x08001e44 (100.00%) Done.

Starting execution at address 0x08000000... done. 

LA LED CLIGNOTE.

Le terminal fonctionne aussi.

Un petit détail : pendant le chargement le device ID est affiché, ainsi que les tailles mémoire. Souvent ces cartes sont équipées de 128K de FLASH. Bonne surprise.

7.2. Avec ST-LINK

Si l'on dispose d'un boîtier ST-LINK on peut aussi l'utiliser.

Voir ici pour l'installation : https://riton-duino.blogspot.com/2019/03/stm32-boitier-st-link.html

7.2.1. Version 2.1.0

Comme dit plus haut, STM32DUINO évolue sans cesse, et les outils ST MICROELECTRONICS aussi.

23/04/2022 : dans la version 2.1.0, l'utilitaire ST-FLASH a été remplacé par STM32CubeProgrammer.

Il n'est plus nécessaire de passer par la ligne de commande pour charger le code dans la carte, comme auparavant.

Il suffit de choisir STM32CubeProgrammer (SWD) dans le menu Outils / Upload Method, et ensuite de cliquer sur le bouton "Téléverser". Il y a du progrès.

Voici ce qui se passe lors du chargement :

      -------------------------------------------------------------------

                        STM32CubeProgrammer v2.10.0
      -------------------------------------------------------------------

ST-LINK SN  : 52FF6F065177525451252087
ST-LINK FW  : V2J29S7
Board       : --
Voltage     : 3,26V
SWD freq    : 4000 KHz
Connect mode: Under Reset
Reset mode  : Hardware reset
Device ID   : 0x410
Revision ID : Rev X
Device name : STM32F101/F102/F103 Medium-density
Flash size  : 64 KBytes
Device type : MCU
Device CPU  : Cortex-M3
BL Version  : --

Memory Programming ...
Opening and parsing file: sketch_apr22a.ino.bin
  File          : sketch_apr22a.ino.bin
  Size          : 12,53 KB 
  Address       : 0x08000000 

Erasing memory corresponding to segment 0:
Erasing internal memory sectors [0 12]
Download in Progress:

File download complete
Time elapsed during download operation: 00:00:00.837

RUNNING Program ... 
  Address:      : 0x8000000
Application is running, Please Hold on...
Start operation achieved successfully

7.2.2. Anciennes versions

Le chargement se fait avec l'utilitaire st-flash.
Cet utilitaire se trouve ici :

Si la machine est en 64bits :
.arduino15/packages/STM32/tools/STM32Tools/1.2.1/tools/linux64/stlink/st-flash
Si la machine est en 32bits :
./.arduino15/packages/STM32/tools/STM32Tools/1.2.1/tools/linux/stlink/st-flash

Sinon, le nécessaire se trouve dans le répertoire .arduino15 de votre répertoire personnel. Vous pouvez soit modifier votre variable d'environnement PATH pour y ajouter le répertoire où se trouve st-flash, soit copier st-flash dans /usr/local/bin (pour une machine LINUX, pour une machine Windows vous trouverez bien un répertoire approprié).

Méthode :
Récupérez cette ligne à la fin de la compilation dans l'IDE ARDUINO :

"/home/riton/.arduino15/packages/STM32/tools/arm-none-eabi-gcc/6-2017-q2-update/bin/arm-none-eabi-objcopy" -O binary  "/tmp/arduino_build_579822/Blink.ino.elf" "/tmp/arduino_build_579822/Blink.ino.bin"

Ensuite entrer la commande suivante dans un terminal :

st-flash write /tmp/arduino_build_579822/Blink.ino.bin 0x8000000

st-flash s'exécute :

2019-03-29T18:54:09 INFO src/stlink-common.c: Loading device parameters....
2019-03-29T18:54:09 INFO src/stlink-common.c: Device connected is: F1 Medium-density device, id 0x20036410
2019-03-29T18:54:09 INFO src/stlink-common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x10000 bytes (64 KiB) in pages of 1024 bytes
2019-03-29T18:54:09 INFO src/stlink-common.c: Attempting to write 12844 (0x322c) bytes to stm32 address: 134217728 (0x8000000)
Flash page at addr: 0x08003000 erased
2019-03-29T18:54:09 INFO src/stlink-common.c: Finished erasing 13 pages of 1024 (0x400) bytes
2019-03-29T18:54:09 INFO src/stlink-common.c: Starting Flash write for VL/F0/F3 core id
2019-03-29T18:54:09 INFO src/stlink-common.c: Successfully loaded flash loader in sram
 12/12 pages written
2019-03-29T18:54:10 INFO src/stlink-common.c: Starting verification of write complete
2019-03-29T18:54:10 INFO src/stlink-common.c: Flash written and verified! jolly good!
riton@alpha:/mnt/sdc1/riton$

LA LED CLIGNOTE AUSSI.

Quel est l'intérêt du boîtier ST-LINK puisque le chargement peut se faire depuis l'IDE ARDUINO en un seul clic ?

Effectivement le chargement est plus facile avec l'IDE. Mais l'IDE ne permettra pas de déboguer, alors qu'avec le boîtier ST-LINK c'est possible, tout en conservant le chargement par l'IDE.

Les explications ICI : https://riton-duino.blogspot.com/2019/03/stm32-duino-deboguer.html

Il est très probable que sous LINUX vous ayez à créer un petit fichier pour autoriser l'accès au device ST-LINK.

Si vous lancez st-flash et que vous voyez ceci :

2019-03-29T19:12:31 WARN usb.c: Couldn't find any ST-Link/V2 devices

Créez un fichier /etc/udev/rules.d/49-stlinkv2.1.rules :

# stm32 nucleo boards, with onboard st/linkv2-1
# ie, STM32F0, STM32F4.
# STM32VL has st/linkv1, which is quite different

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", \
    MODE:="0666", \
    SYMLINK+="stlinkv2-1_%n"

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", \
    MODE:="0666", \
    SYMLINK+="stlinkv2_%n"

# If you share your linux system with other users, or just don't like the
# idea of write permission for everybody, you can replace MODE:="0666" with
# OWNER:="yourusername" to create the device owned by you, or with
# GROUP:="somegroupname" and mange access using standard unix groups.

Ce fichier permet à l'utilisateur non root d'accéder au device, qu'il soit un ST-LINK ST MicroElectronics ou un ST-LINK chinois.

8. Quelques explications supplémentaires

Pendant le développement de l'application il est possible de laisser le cavalier BOOT0 sur 1 et téléverser / exécuter dans la foulée.

Avec BOOT0 sur 1, le STM32 démarre son propre bootloader. Il attend les caractères sur sa ligne série, écrit ce qui arrive en FLASH et lance l'application.

Par contre pour la version finale, il faudra remettre le cavalier sur 0. Dans ce cas, le STM32 démarre directement l'application.

9. Le pinout de la carte


10. Cartes

Outre la "BLUE PILL", il existe une grande variété de cartes exploitables :

STM32F030F4 (Cortex M0)
https://fr.aliexpress.com/item/STM32F103RCBT6-ARM-Cortex-M3-leaflabs-Leaf-maple-mini-module-for-arduino-STM32/1878982440.html?spm=a2g0w.search0104.3.2.714e6104EtNQ1I&ws_ab_test=searchweb0_0,searchweb201602_2_10152_10151_10065_10344_10068_5722918_10342_5722818_10343_10340_10341_5722618_10696_10084_10083_10618_10305_10304_10307_10306_5722718_10302_10059_10184_10534_100031_10103_5722518_441_10624_10623_10622_10621_10620,searchweb201603_25,ppcSwitch_5&algo_expid=c382cbc1-bfa5-4312-a165-c53b99374e8e-0&algo_pvid=c382cbc1-bfa5-4312-a165-c53b99374e8e&transAbTest=ae803_1&priceBeautifyAB=0
https://fr.aliexpress.com/item/STM32F407ZET6-Cortex-M4-Development-Board-STM32-Mini-System-Learning-Core-Module-R179T-Drop-Shipping/32819697572.html?spm=a2g0s.9042311.0.0.OtVutY
La Black VET6 (STM32F407VET6)

Dernièrement les membres du projet STM32DUINO ont ajouté de nombreuses cartes d'évaluation ST MicroElectronics :

Cartes ST NUCLEO32

Cartes ST NUCLEO64

Cartes ST NUCLEO144
Carte ST DISCOVERY

Certaines cartes comme la NUCLEO F429ZI possèdent un port USB host, et un port Ethernet. Certaines DISCOVERY sont équipées d'un écran TFT :



Un conseil : achetez vos cartes sur Farnell Particuliers, Mouser ou RS. Une NUCLEO32 L031K6 vous coûtera moins de 10€ HT. Sur AliExpress la même carte vous coûtera 16€ TTC.

On trouve la description de ces cartes ici :

https://www.st.com/en/evaluation-tools/stm32-nucleo-boards.html?querycriteria=productId=LN1847

https://www.st.com/b/en/evaluation-tools/stm32-discovery-kits.html

10.1.  Les cartes génériques

10.1.1. La STM32F030 demo board
Cette carte est équipée d'un petit Cortex M0 STM32F030F4P6 :
  • 32 bits
  • 48 MHz
  • 16K de Flash
  • 4K de RAM
  • 6 UARTs
  • 2 I2C
  • 2 SPI
  • 1 ADC 12bits
  • RTC
  • low power :
    • 2μA Standby mode
    • 5μA Stop mode
    • 2μA Stop mode + RTC
Le connecteur USB semble servir uniquement d'alimentation.


10.1.2. La Blue Pill
Cette carte est équipée d'un processeur STM32F103C8T6 :
  • 72 MHz
  • 128Ko de Flash
  • 20Ko de RAM
  • 2 ADC 12bits
  • 3 UARTs
  • 2 SPI
  • 2 I2C
10.1.3. La Maple Mini
https://fr.aliexpress.com/item/STM32F103RCBT6-ARM-Cortex-M3-leaflabs-Leaf-maple-mini-module-for-arduino-STM32/1878982440.html?spm=a2g0w.search0104.3.2.714e6104EtNQ1I&ws_ab_test=searchweb0_0,searchweb201602_2_10152_10151_10065_10344_10068_5722918_10342_5722818_10343_10340_10341_5722618_10696_10084_10083_10618_10305_10304_10307_10306_5722718_10302_10059_10184_10534_100031_10103_5722518_441_10624_10623_10622_10621_10620,searchweb201603_25,ppcSwitch_5&algo_expid=c382cbc1-bfa5-4312-a165-c53b99374e8e-0&algo_pvid=c382cbc1-bfa5-4312-a165-c53b99374e8e&transAbTest=ae803_1&priceBeautifyAB=0
Cette carte est équipée d'un STM32F103CBT6 :
  • 72 MHz
  • 128K de Flash
  • 20K de RAM
  • 3 UARTs
  • 2 I2C
  • 2 SPI
  • 2 ADC 12bits
  • RTC
10.1.4. La Black VET6
https://fr.aliexpress.com/item/STM32F407ZET6-Cortex-M4-Development-Board-STM32-Mini-System-Learning-Core-Module-R179T-Drop-Shipping/32819697572.html?spm=a2g0s.9042311.0.0.OtVutY
Cette carte est équipée d'un STM32F407VET6 :
  • 168 MHz
  • 1M de Flash
  • 196K de RAM
  • interface LCD 8080/6800 
  • 4 UARTs
  • 3 I2C
  • 3 SPI
  • 2 CAN
  • 3 ADC 12bits
  • 3 DAC 12bits
  • SDIO
  • RTC
Cette carte est également équipée de :
  • slot pour un NRF24L01
  • slot µSD
  • 3 boutons + reset
  • 2 LEDs
  • mini USB
  • 2 oscillateurs 8MHz et 32.768Hz
  • support de pile pour RTC
  • flash 16M SPI W25Q16
Une carte de gros calibre pour de grosses applications.

10.2.  Les cartes NUCLEO

Il s'agit de cartes d'évaluation produites par ST MicroElectronics.
La documentation se trouve ici :
https://www.st.com/content/ccc/resource/technical/document/user_manual/98/2e/fa/4b/e0/82/43/b7/DM00105823.pdf/files/DM00105823.pdf/jcr:content/translations/en.DM00105823.pdf

10.2.1. Alimentation

Ces cartes possèdent différents modes d'alimentation :
  • USB
  • VIN (7V-12V)
  • E5V (5V)
  • +3.3V
Voir 6.3 Power supply and power selection

10.2.2. Le port USB

Ces cartes possèdent une particularité. Le port USB a trois fonctions :
  • port de chargement ST-LINK
  • support de masse USB
  • debugger
Sur un STM32 la fonction de chargement et debug ST-LINK est normalement assurée par un boîtier de communication USB tel celui-ci :
ST-LING V2 ST MicroElectronics

ST-LINK V2 Clone chinois
Sur les cartes NUCLEO, le ST-LINK est intégré à la carte. Et il est détachable sur les NUCLEO64 et NUCLEO144.

Le support de masse USB n'est pas un support de stockage classique. C'est en fait un espace virtuel qui se comporte comme une clé USB, sur lequel il est possible de déposer le programme exécutable pour qu'il soit chargé en FLASH.

Sur les cartes NUCLEO toutes ces fonctions sont assurées par un STM32F103 situé sur la partie détachable de la carte :
10.2.3. Choisir le type de carte dans l'IDE ARDUINO

L'équipe STM32DUINO a poussé très loin l'intégration de ce matériel. Le menu Outils de l'IDE ARDUINO propose tout d'abord un choix de famille de carte :
  • Nucleo-144
  • Nucleo-64
  • Nucleo-32
  • Discovery
  • Generic STM32F0 Series
  • Generic STM32F1 Series
  • Generic STM32F4 Series
  • etc. 
Le menu Outils permet ensuite de choisir le modèle de carte. Pour une BLUE PILL il faut choisir :
  • Type de carte : Generic STM32F1 series
  • Board part Number : Blue Pill F103C8
Ensuite il y a pas mal d'options en fonction du type de carte :
  • le chargement par le support de masse et ST-LINK sont accessibles
  • il est possible de customiser la librairie C
    • NewLib nano
    • NewLib avec printf des float
    • NewLib avec scanf des float
    • NewLib avec printf + scanf des float
    • NewLib standard
  • vitesse du port USB host
  • support du port USB host (CDC, HID)

10.2.4. Les connecteur

Les cartes NUCLEO32 adoptent le format ARDUINO NANO. La majorité des pins correspondent à ceux de la NANO, en particulier D0-D13 et A0-A7.

Les pins SDA SCL sont bien sur A4 A5 comme sur un ARDUINO NANO :

Sur les NUCLEO64, il y a deux types de connecteurs :
  • deux connecteurs MORPHO 38 points
  • 4 connecteurs correspondant à ceux de l'ARDUINO UNO


Si l'utilisation des connecteurs ARDUINO ne pose pas de problème particulier, il n'en va pas de même pour les connecteurs MORPHO.
Tout dépendra du modèle de carte choisi. Comme on le voit sur les deux images ci-dessus il y a de petites différences.

De plus certaines pin sont configurables par des résistances 0Ω situées à l'arrière de la carte.
Par exemple :
  • enlever le cavalier SB21 permet de déconnecter la LED sur D13.
  • le cavalier SB64 relie VREF/PB1 du STM32 à la pin PBI de la carte
  • le cavalier SB65 permet de relier cette même pin au 3.3V analogique AVDD
  • etc.
La consultation de la documentation de la carte est indispensable :

NUCLEO32 : https://www.st.com/content/ccc/resource/technical/document/user_manual/e3/0e/88/05/e8/74/43/a0/DM00231744.pdf/files/DM00231744.pdf/jcr:content/translations/en.DM00231744.pdf

Les schémas de la carte sont en figure 9 à 11.

NUCLEO64 : https://www.st.com/content/ccc/resource/technical/document/user_manual/98/2e/fa/4b/e0/82/43/b7/DM00105823.pdf/files/DM00105823.pdf/jcr:content/translations/en.DM00105823.pdf

Les schémas de la carte sont en figure 27 à 30.

NUCLEO144 : https://www.st.com/content/ccc/resource/technical/document/user_manual/group0/26/49/90/2e/33/0d/4a/da/DM00244518/files/DM00244518.pdf/jcr:content/translations/en.DM00244518.pdf

Les schémas de la carte sont en figure 15 à 20.

Si sur les schémas il est facile de voir la correspondance entre chaque pin des connecteurs MORPHO et les pins du STM32.

Par contre dans le code on utilise un N° de port. Quelle va être la correspondance ?

  digitalWrite(port, HIGH);

Par exemple, pour allumer la LED de la carte :

  digitalWrite(13, HIGH);
// OU
  digitalWrite(LED_BUILTIN, HIGH);

Mais on peut aussi utiliser le N° de port STM32 :

  digitalWrite(PB3, HIGH);

Mais cette écriture n'est valable que pour les cartes dont la LED est connectée sur PB3, ici une L031K6, donc préférez la première.

Pour ce qui concerne les pins des connecteurs MORPHO, dans la repository STM32DUINO, il est facile de s'y retrouver :

https://github.com/stm32duino/Arduino_Core_STM32/tree/master/variants

Dans ce répertoire, cliquer sur le lien de votre carte.

Dans le fichier variants.h on trouve toutes les définitions des GPIOs de la carte choisie.

Par exemple pour faire clignoter les 3 LEDs d'une F429ZI :

#define LED_GREEN LED_BUILTIN
#define LED_BLUE PB7
#define LED_RED PB14
#define LED_BUILTIN PB0

10.2.5.  Quelque cartes courantes

10.2.5.1. La NUCLEO L031K6


C'est une carte NUCLEO32 équipée d'un STM32L31K6 :
Elle est plus performante qu'une NANO :
  • 32 bits
  • 32 MHz
  • 32K de Flash
  • 8K de RAM
  • 1K d'EEPROM
  • 2 UARTs
  • 1 ADC 12bits
  • RTC
  • low power :
    • 0.23 μA Standby mode (2 wakeup pins)
    • 0.35 μA Stop mode (16 wakeup lines)
    • 0.6 μA Stop mode + RTC + 8 KB RAM retention
Cette carte a le format d'une ARDUINO NANO, mais comme vous le voyez, elle est beaucoup plus performante.

10.2.5.2.  La NUCLEO L053R8
C'est une carte NUCLEO64 équipée d'un STM32L053R8 :
  • 32MHz
  • 64K de Flash 
  • 8K de RAM
  • 2K d'EEPROM
  • driver LCD 8×28 segments 
  • support 24 touches capacitive
  • 3 UARTs
  • 1 ADC 12bits
  • 1 DAC 12bits
  • 2 I2C
  • 4 SPI
  • RTC 
Cette carte a le format d'une ARDUINO UNO. Je vous laisse apprécier les différences.

10.2.5.3.  La NUCLEO L476RG
C'est une carte NUCLEO64 équipée d'un STM32L476RG :
  • 80MHz
  • 1M de Flash 
  • 128K de RAM
  • driver LCD 8×40 ou 4x44 segments
  • support 24 touches capacitive
  • 6 UARTs
  • 3 ADC 12bits
  • 2 DAC 12bits
  • 3 I2C
  • 3 SPI
  • RTC 
Cette carte a le format d'une ARDUINO UNO. Je vous laisse apprécier les différences.

10.2.5.4.  La NUCLEO F401RE
C'est une carte NUCLEO64 équipée d'un STM32F401RE :
  • 84MHz
  • 512K de Flash 
  • 96K de RAM
  • 3 UARTs
  • 1 ADC 12bits
  • 3 I2C
  • 4 SPI
  • 1 SDIO
  • 2 CAN
  • RTC 
Cette carte a également le format d'une ARDUINO UNO.

10.2.5.5.  La NUCLEO F429ZI


C'est une carte NUCLEO144 équipée d'un STM32F429ZI :
  • 180MHz
  • 2M de Flash
  • 256K de RAM
  • 4K de SRAM
  • USB OTG
  • Ethernet
  • interface LCD 8080/6800 
  • 4 UARTs
  • 2 ADC 12bits
  • 2 DAC 12bits
  • 3 I2C
  • 6 SPI
  • 1 SAI
  • 2 CAN
  • RTC
  • 3 LEDs utilisateur 
Cette carte n'a plus rien à voir avec les cartes précédentes, elle ne possède pas les connecteurs correspondants à ceux d'une UNO.

10.2.5.6. La DISCOVERY F469I


C'est une carte DISCOVERY équipée d'un STM32F469NI
  • 180MHz
  • 2M de Flash
  • 384K de RAM
  • 4K de SRAM 
  • 4Mx32bit SDRAM
  • 128Mbit Quad-SPI NOR Flash
  • USB OTG
  • écran TFT 4" 800x480 capacitif
  • 4 UARTs
  • 3 I2C
  • 6 SPI
  • 1 SAI
  • 2 CAN
  • RTC
  • support µSD
  • 4 LEDs utilisateur 
  • JACK audio
  • connecteurs au format ARDUINO UNO
Cette carte n'est pas encore supportée par STM32DUINO, mais elle l'est par PlatformIO en mode MBED et STM32Cube.

11. Tests effectués

11.1. Les ports série

Les ports série sont instanciés en fonction de leur numéro hardware. Sur les cartes précédentes il s'agit de Serial2, sauf la F429ZI : Serial3.

Ensuite la librairie redéfinit Serial :

#define Serial Serial2

Les ports supplémentaires ne semblent pas instanciés, mais il est facile de remédier à cela. Il suffit d'instancier un HardwareSerial dans le code de l'application.

Par exemple pour une F401RE :
- USART1_TX est sur PA9
- USART1_RX est sur PA10

#define LED LED_BUILTIN

HardwareSerial Serial1(USART1); 
void setup() {
  pinMode(LED, OUTPUT);
  Serial.begin(115200);
  Serial1.begin(115200);
}

void loop() {
  digitalWrite(LED, HIGH);
  delay(1000);
  digitalWrite(LED, LOW);
  delay(1000);
  Serial.println("OK");
  Serial1.println("OK");
}

Il suffit ensuite de brancher un convertisseur USB / série sur PA9 et PA10 pour que cela fonctionne.

11.2. L'ADC

L'ADC du STM32 a une résulution de 12bits. La tension de référene par défaut est de 3.3V. Afin d'obtenir un résultat de mesure correct il faut écrire ceci :

#define VREF      3.3
// pont diviseur 100KΩ / 10KΩ
#define DIVIDER   0.09

void setup()
{
  Serial.begin(115200);
  pinMode(A0, INPUT_ANALOG);
  analogReadResolution(12);
}

void loop()
{
  uint16_t valA0 = analogRead(A0);
  Serial.print("analogRead: ");
  Serial.println(valA0);
  float voltage = (float)valA0 * VREF / 4096 / DIVIDER;
  Serial.print("Voltage: ");
  Serial.print(voltage);
  Serial.println(" V");
  delay(1000);
}


Cet exemple mesure une tension de 5V à travers un pont diviseur de 100KΩ / 10KΩ.
La vitesse d’échantillonnage est supérieure à celle d'un ARDUINO mais reste faible : 18000 SPS sur une F401RE.

Le problème :
La fonction adc_read_value() de la librairie STM32DUINO initialize l'ADC et le canal à chaque appel, ce qui provoque une perte de temps considérable.

Il est préférable d'initialiser l'ADC dans la fonction setup() une bonne fois pour toutes, et de faire uniquement la lecture en cas de besoin. On obtient ainsi plus de 26000 SPS :

https://bitbucket.org/henri_bachetti/stm32duino-samples/src/f4ce90e5178f68423e827b45d455dd0b04afd53e/adc/f401re-polling

Il est possible également de faire la lecture par interruption ou par DMA.
 

11.3. L'affichage

11.3.1. Le PCF8574

J'ai essayé de connecter sur une carte L031K6 un afficheur LCD 2x16 caractères avec un module I2C PCF8574.

J'ai utilisé la librairie suivante : https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library.git

La mise en œuvre de l'exemple HelloWorld se déroule parfaitement bien.

11.3.1. Le MAX7219

J'ai réalisé un petit projet personnel sur une BLUE PILL : MAX7219 sur STM32.
Ce projet comprend :
  • un afficheur 8 x 7 segments MAX7219
  • un module I2C RTC DS3231
Le MAX7219 est un composant utilisant un protocole à deux fils :
  •  un fil horloge
  • un fil pour les données
Il ne s'agit donc pas d'I2C ou de SPI.

Ce projet a débuté sur un ARDUINO NANO et je l'ai porté ensuite avec une grande facilité sur la BLUE PILL. Il fonctionne depuis le 25 novembre :



11.3.2. Le ST7735

L'utilisation d'un TFT 1.8" SPI ST7735 est aussi facile que sur un ARDUINO.  L'écran est celui-ci : https://fr.aliexpress.com/item/1-8-1-8-pouce-TFT-LCD-Module-D-affichage-ST7735S
J'utilis en général la librairie suivante : https://github.com/adafruit/Adafruit-ST7735-Library

La mise en œuvre de l'exemple graphicstest ne pose aucun problème.

Le câblage est le celui indiqué dans le code :
  • VCC sur 5V
  • GND sur GND
  • CLK sur D13
  • SDA (MOSI) sur D12
  • CS sur D10
  • RS (sur A0
  • RST sur A1

11.3.3. Le ILI9341

L'écran est celui-ci : https://fr.aliexpress.com/item/2-8-240x320-SPI-TFT-LCD-Port-S-rie-Module-Adaptateur-PCB-Micro-SD-ILI9341-5/32899132892.html?spm=a2g0s.9042311.0.0.27426c37X0SmM6
Mauvaise surprise la librairie UTFT  n'accepte pas ces processeurs ARM. Mais il reste celle-ci : https://github.com/adafruit/Adafruit_ILI9341

Ici aussi la mise en œuvre de l'exemple graphicstest ne pose aucun problème.

Le câblage est le celui indiqué dans le code :
  • VCC : 5V ou 3.3V
  • GND
  • CS : pin D10
  • RST : pin D8
  • DC : pin D9
  • MOSI : pin D11
  • SCK : pin D13
  • LED : 5V ou 3.3V
  • MISO : pin D12

11.4. Divers

11.4.1. Circuit RTC

Comme dit plus haut, un module I2C RTC DS3231 fonctionne sans problème avec la même librairie qu'un ARDUINO.

11.4.2. Le bus One Wire

Un capteur de température du type DS3231 ne peut pas fonctionner car la librairie OneWire ARDUINO n'est pas adaptée.
Recherches en cours ...

11.4.3. Déboguer une application STM32

Ici un article sur le sujet : https://riton-duino.blogspot.com/2019/03/stm32-duino-deboguer.html

12. Liens utiles

Le forum STM32DUINO.Le lien sur la carte BLUE PILL.
La datasheet du processeur.
Le schéma de la carte.

Environnements : https://riton-duino.blogspot.com/2019/03/stm32-environnements-de-developpement.html
ST-LINK : https://riton-duino.blogspot.com/2019/03/stm32-boitier-st-link.html
Déboguer : https://riton-duino.blogspot.com/2019/03/stm32-duino-deboguer.html

13. Conclusion

Les cartes STM32 sont de mieux en mieux supportées par STM32DUINO. Les progrès réalisés ces derniers mois en particulier sur le support des cartes ST MicroElectronics NUCLEO et DISCOVERY sont énormes.


Cordialement
Henri

14. Mises à jour

25/11/2018 : ajout lien sur "MAX7219 sur STM32".
                       ajout paragraphe 9. Pinout de la carte.
22/03/2019 : 10. Les cartes
                       11. Tests effctués
                       11.1. Les ports série
25/03/2019 : 11.2. L'ADC
27/03/2019 : 11.3. L'affichage
28/03/2019 : 11.4. Divers
                       11.4.3. Déboguer une application STM32
30/03/2019 : 10.1.1. La STM32F030 demo board
                       10.1.2. La Blue Pill
                       10.1.3. La Maple Mini
                       10.1.4. La Black VET6
                       12. Liens utiles
29/08/2019 : 4. Installation
23/04/2022 : version STM32DUINO 2.1.0