- Pas adapté aux applications mobiles (consommation, pas de connecteur pour batterie)
- Avant tout conçu pour un usage bureautique
- Limité à l’USB
Sommaire
- 1 Bien choisir son MCU ou Mini-PC en fonction de l’application
- 2 Vous êtes allergique au WiFi, pensez à l’Ethernet !
- 3 Fabriquer un objet connecté DIY, quel format de carte de développement choisir ?
- 4 Fabriquer un objet connecté DIY, les différents types d’entrées / sorties des micro-contrôleurs
- 5 Le bus I2C, le bus à tout faire idéal pour les objets connectés ?
- 6 Comment alimenter un objet connecté ?
- 7 Alimentation 3.3V à l’aide d’un régulateur de tension LD1117V33
- 8 Prêt à vous lancer, tous les tutoriels pour débuter
- 9 Pour aller plus loin
- 10 Signification des abréviations
- 11 Mises à jour
Bien choisir son MCU ou Mini-PC en fonction de l’application
La plupart des librairies sont maintenant compatibles avec les MCU Atmel et ESP8266. Si ce n’est pas le cas, vous trouverez un équivalent. En général, c’est un clone (un fork) de la librairie originale qui a ensuite été adapté pour fonctionner sur les modules ESP8266.
Pour les modules ESP32, c’est un peu plus compliqué. Même s’il n’y a pas de différences significatives dans la manière de programmer les ESP32, nous sommes encore dans une phase de transition. Il reste encore beaucoup de librairies à adapter à l’ESP32. Il est préférable de vérifier la disponibilité des librairies que vous souhaitez utiliser. C’est pour cela que les notes sont plus basses pour les modules ESP32. Rien à voir avec la qualité et les performances des cartes de développement.
Atmel AVR
(Arduino et compatibles) |
ATTiny | ESP8266 | ESP32 | STM32 | Mini-PC ARM* | Mini-PC x86** | |
Initiation à la programmation | ***** | **** | ***** | *** | *** | ***** | ***** |
Initiation à la mesure avec des capteurs | ***** | ** | ***** | **** | **** | **** | **** |
Initiation au pilotage d’actionneur : moteur, servo-moteur, LED, pompe… | ***** | ** | ***** | **** | **** | **** | *** |
Communiquer avec un serveur domotique en WiFi | ** | * | ***** | **** | ** | ***** | ***** |
Publier des mesures sur un serveur distant | ** | * | ***** | **** | ** | ***** | ***** |
Projets électronique vestimentaire (cosplay, wearable…) | ** | ***** | *** | *** | *** | – | – |
Projets | |||||||
RC, drone | *** | * | **** | ***** | *** | *** | * |
Robotique | **** | * | ***** | ***** | ***** | ***** | ***** |
Environnemental | **** | ** | ***** | ***** | ***** | ***** | ***** |
CNC, impression 3D | ***** | * | ** | **** | ***** | ***** | ***** |
Accessoires domotiques | *** | * | ***** | ***** | *** | ** | * |
Mobile, embarqué | * | ** | **** | ***** | *** | ***** | ** |
Vision | – | – | – | * | ** | ***** | **** |
Traitement du signal | ** | * | ** | *** | **** | **** | ***** |
IA, réseau de neurones | – | – | – | – | – | **** | ***** |
(*) Ordinateur carte à processeur ARM
(**) Mini-PC à architecture x86 Intel ou AMD
Vous êtes allergique au WiFi, pensez à l’Ethernet !
Le WiFi ne fait pas toujours l’unanimité. Même s’il s’est imposé comme la méthode principale de communication, des doutes subsistent sur ses effets sur la santé. C’est d’ailleurs le cas quelque soit la technologie radio employée. Dans ce cas, vous pouvez opter pour l’Ethernet.
Il existe des cartes d’extension pour tous les modèles d’Arduino
Fabriquer un objet connecté DIY, quel format de carte de développement choisir ?
Pour débuter
L’Arduino Uno est quasiment devenu un format de carte standard depuis sa création. Il existe des cartes d’extension (shield) pour quasiment tout faire. Piloter des servo-moteurs pour faire de la robotique, du déplacement d’axes (CNC, graveur laser…). L’Arduino Uno est équipé de connecteurs sur lequel on viendra directement brancher les capteurs ou les actionneurs. C’est un format idéal pour débuter.
Arduino Uno Rev.3 compatible
Fabriquer de petits objets connectés : sonde d’ambiance, pollution de l’air, détecteur d’ouverture
Vous maitrisez le code et vous voulez passer à un projet concret. Une station météo, une station de surveillance de la qualité de l’air, piloter l’ouverture et la fermeture à distance d’un portail… l’Arduino Uno est très encombrant. Vous pouvez passer
Pour la robotique, CNC, RC
Pour ce type de projet, vous aurez besoin d’utiliser une carte d’extension qui permet de piloter des moteurs et/ou de générer des signaux PWM (explications au prochain paragraphe). Dans ce cas, vous pouvez rester sur le format de l’Arduino Uno Rev.3. On trouve des cartes à base de MCU ATmega, ESP8266 (que l’on trouve aussi sous le nom d’ESPduino) et ESP32.
Vous pouvez par exemple lire cet article sur le déballage de la carte ESPduino équipée d’une carte d’extension PCA9685 qui permet de piloter jusqu’à 16 servos et 2 moteurs DC via le bus I2C.
ESPduino Wemos R2 équipée d’une carte d’extension PCA9685
Fabriquer un objet connecté DIY, les différents types d’entrées / sorties des micro-contrôleurs
Le μC est fait pour communiquer avec l’extérieur. Pour cela, il dispose d’un nombre plus ou moins important de broches de connexion appelées Entrées / Sorties (E/S ou I/O en anglais pour Input / Output).
Sur le Raspberry Pi ou les autres mini-PC, c’est exactement la même chose. Il s’appel le GPIO qui signifie General-purpose Input Output. C’est un connecteur de 26 ou 40 broches (le plus souvent) sur lequel on viendra brancher des capteurs ou des actionneurs.
Chaque broche peut avoir une ou plusieurs fonctions. Pour savoir ou brancher vos actionneurs ou capteurs vous devez récupérer le schéma de repérage de votre carte de développement. En anglais, le terme est pinout. Il suffit de faire une recherche d’image sur internet, par exemple arduino pinout, wemos d1 mini pinout, pour trouver très facilement la correspondance des broches.
Voici par exemple le repérage des broches de la carte Sparkfun ESP32 Thing.
Comme vous pouvez le voir, une broche peut servir à plusieurs choses. Par exemple, la broche 25 pourra être utilisée comme :
- Entrée analogique (ADC)
- Sortie analogique (DAC)
- Entrée ou sortie numérique
On devra indiquer à l’initialisation du programme, quel est le type de la broche. Par exemple avec du code Arduino :
- la commande pinMode(25, INPUT) configure la broche 25 comme une entrée numérique.
- pinMode(25, OUTPUT) configure la broche 25 comme une sortie numérique.
- int signal = analogRead(25) permettra de lire le signal analogique numérisé par le convertisseur ADC disponible sur la broche 25
Les cartes de développement supportent donc une très grande variété de bus de données qui dépend de chaque MCU. Voici les principaux bus de données que vous allez rencontrer dans l’électronique grand public.
Bus de données, E/S | Utilisation |
ADC | Entrée analogique (Analog to Digital Converter) qui permet de convertir un signal analogique en numérique. En fonction de la précision du convertisseur, le signal sera plus ou moins précis :
|
DAC | Convertisseur numérique analogique (Digital to Analog Converter) qui permet de convertir un signal numérique en un signal analogique de 0 à 5V ou 0 à 3.3V en fonction de la carte. On pourra par exemple s’en servir pour générer un signal audio. |
Entrée/sortie numérique (PWM) | Renvoi l’état d’un capteur. Par exemple un interrupteur appuyé laisse passer le courant, l’état passe à 1 (5V ou 3.3V). Il passe à 0 (0V) lorsqu’on relâche le bouton.
Il est également possible de fabriquer un signal numérique en envoyant une succession de signaux électriques (0V / 5V), c’est ce qu’on appel le PWM (Wikipedia), Pulse With Modulation ou MLI en français (modulation de largeur d’impulsions). C’est par exemple ce qu’on utilise pour faire varier l’intensité lumineuse d’une LED. Certains capteurs disposent également d’une sortie PWM pour envoyer les mesures. C’est par exemple le cas des capteurs de température et d’humidité DHT11 et DHT22. Voici un exemple de signal envoyé par le MHZ19 qui permet de mesurer la teneur en CO2 dans l’atmosphère Le protocole 1-Wire (One Wire) utilisé par exemple sur les sondes de température DS18B20 (et similaires) utilise également ce principe pour fonctionner Vérifiez les E/S qui supportent les signaux PWM sur votre carte Arduino. |
UART | UART, pour Universal Asynchronous Receiver Transmitter, est un émetteur-récepteur asynchrone universel. C’est ce qu’on appel le port série ! IL date de tout début de l’informatique. C’est ce qu’on utilise pour programmer le micro-contrôleur, récupérer les messages de debogage envoyé sur le moniteur série de l’IDE Arduino. Certains composants utilisent également le port série pour communiquer avec le MCU. Le MHZ19 par exemple dispose d’une sortie RX/TX. La vitesse de transmission s’exprime en baud (bit par seconde).
Chaque MCU dispose au moins d’un port UART. Dans ce cas on pourra le programmer puis récupérer les messages envoyés. Le port série n’est pas un bus de données. C’est à dire qu’il n’est possible de créer communication que entre deux appareils (et un seul logiciel) à la fois. Pour pouvoir mettre au point le programme depuis le moniteur série et utiliser un capteur série, il faudra disposer d’un second port UART. C’est le cas de l’Arduino Mega2560 et de l’ESP32 qui en possèdent quatre. |
I2C | Bus de données numériques (Inter-Integrated Circuit en anglais) qui permet de connecter jusqu’à 128 périphériques. Chaque périphérique dispose de sa propre adresse sur le bus. Ce bus ne nécessite que 2 lignes (2 broches) pour fonctionner :
Il est possible de communiquer plus facilement avec le MCU du capteur / actionneur. On pourra régler certains paramètres (sensibilité du capteur, demander une données particulière…). Tout est numérique. C’est le bus de données idéal pour développer des projets sans avoir à se soucier des conversions de tensions, d’interprétation des mesures. Il faut juste vérifier la disponibilité de la librairie du capteur / actionneur avant d’acheter votre composant. |
I2S | Inter-IC Sound, Integrated Interchip Sound, ou IIS, est un standard d’interface qui permet connecter des matériels audio numériques ensemble. Plus d’informations sur Wikipedia |
SPI | La liaison SPI (pour Serial Peripheral Interface) est un bus de données série synchrone full-duplex développé Motorola au milieu des années 1980. Plus d’information sur Wikipedia. Plus rapide que le bus I2C, il est souvent utilisé pour communiquer avec des écrans d’affichage car il permet d’obtenir un taux de rafraichissement correct. Par contre, il consomme plus 4 broches (au lieu de 2 pour l’I2C) ce qui peut être un point limitant pour certains projets :
Même inconvénient que l’UART, il n’est pas possible d’adresser les périphériques. Il faudra donc autant de sorties SPI que de périphérique ce qui est très consommateur en broches. Si vous avez le choix, optez pour le bus I2C. |
CAN | Le bus CAN (Controller Area Network) est un bus Série conçu pour réduire les câblages dans l’automobile ou l’aéronautique. Il n’est quasiment pas utilisé dans l’électronique grand publique. Schématiquement, les capteurs, calculateurs, actionneurs sont branchés sur un bus de données, un câble. Cela permet de réduire très fortement la quantité de câbles, la masse, le coût, simplifie le montage et les réparations.
Source : APRM https://www.apem.com/fr/content/45-pourquoi-integrer-un-systeme-bus-can- |
Capteurs, entrées analogiques ou numériques
Voici quelques exemples assez courants de capteurs et cartes d’extensions que vous pouvez utiliser pour concevoir vos objets connectés.
Exemple | Entrée analogique | Entrée numérique, 1-Wire ou PWM | I2C | SPI | UART | |
Compteur de pulsation | ||||||
Température
|
||||||
Baromètre numérique | ||||||
Intensité lumineuse | ||||||
Température, humidité | ||||||
RFID | ||||||
Distance / proximité | ||||||
Micro-interrupteurs (push button) | ||||||
Carte analogique externe | ||||||
Entrées digitales supplémentaires | ||||||
Récepteur Infra rouge | ||||||
Poussières, particules | ||||||
Teneur en CO ou CO2 | ||||||
CCS811
eCO2, équivalent CO2 de 400ppm ~ 29206ppm eTVOC, équivalent Total Volatile Organic (ou COV) jusqu’à 32768ppb |
||||||
Tension et Intensité du courant | ||||||
Détecteur de polluants, capteur MQ135 et similaires. Attention, ces capteurs manquent de précision et nécessitent d’être alimentés en permanence pour pouvoir faire de mesures. |
Actionneurs, écrans
Exemple | Entrée analogique | Entrée numérique, 1-Wire ou PWM | I2C | SPI | UART | |
Sorties numériques supplémentaires | ||||||
Sorties PWM (LED essentiellement)
|
||||||
Ecrans |
Pensez aux shields (carte d’extension sans soudure)
Il existe une carte d’extension pour presque toutes les applications. Si vous n’avez pas les compétences ou les outils nécessaires, c’est une excellente solution. Les shields sont aussi une excellente solution pour l’apprentissage et l’étude de faisabilité d’un projet.
Les shields au standard Wemos D1 mini sont les plus répandus.
Le bus I2C, le bus à tout faire idéal pour les objets connectés ?
Il existe donc de nombreux moyens de communiquer avec les actionneurs et capteurs. La plupart ont été développés pour des applications industriels et sont aujourd’hui des standards. Les entrées / sorties analogiques ainsi que les entrées numériques peuvent être exploitées sans librairie additionnelle. Voici quelques exemples simples avec du code Arduino.
Lire un signal analogique
int signal = analogRead(A0);
Lire un signal numérique
La ligne pinMode permet d’indiquer au micro-contrôleur que la broche 2 est une entrée numérique
int pushButton = 2; void setup() { // Initialise le port série - Init serial communication Serial.begin(9600); // La broche 2 est une entrée numérique - Pin 2 is a numerical input pinMode(pushButton, INPUT); } void loop() { // Lit l'état de l'entrée numérique - read the input pin: int buttonState = digitalRead(pushButton); // Renvoi sur le moniteur série l'état de l'entrée numérique - print out the state of the button: Serial.println(buttonState); delay(1); }
Pour utiliser les bus de données industriels, nous avons deux possibilités :
- Développer votre propre code (driver), ce qui nécessite du temps, des compétences et de connaître les spécifications techniques de l’appareil et du protocole de communication employé.
- Utiliser une librairie. Le plus souvent elle a été développée par le fabricant du matériel ou par des Makers qui travaillent dans l’électronique. C’est la solution à privilégier en priorité.
Avant d’acheter votre matériel, je vous conseille donc de passer un peu de temps sur le gestionnaire de librairies de l’IDE Arduino ou de faire une recherche sur internet pour vérifier qu’il existe une librairie.
Parmi toutes les solutions disponibles, c’est le bus I2C qui est le plus souple. Avec seulement 2 fils, vous pourrez utiliser plusieurs capteurs et actionneurs sans vous soucier du nombre de broches restant.
Nombre de broche nécessaire pour communiquer avec l’appareil* | Librairie nécessaire | |
Signal analogique | 1 | |
Signal numérique, 1-Wire, PWM | 1 | Conseillé |
Interface I2C | 2 | Conseillé |
SPI, port série industriel rapide | 3 ou 4 | Conseillé |
Port Série (UART) | 2 | Conseillé |
(*) sans tenir compte de l’alimentation 5V ou 3.3V
Comment alimenter un objet connecté ?
C’est souvent le premier problème à résoudre. Voici quelques solutions faciles à mettre en oeuvre.
Batterie LiPo
Pour les cartes équipées d’un connecteur au standard JST PH2 (2 mm), le plus facile est d’utiliser une batterie LiPo (Lithium Polymère). Généralement, les cartes qui embarquent un connecteur pour batterie LiPo intègrent également un circuit qui permet de charger la batterie via le connecteur micro-USB sans interrompre le fonctionnement du MCU.
TTGO T8 équipée d’un connecteur au standard JST PH2 pour batterie LiPo
Choisissez une batterie délivrant 3,7V au maximum pour éviter de dépasser la tension admissible par la carte.
Boitier pour piles AA
C’est la solution la plus économique pour alimenter vos projets. Certaines cartes de développement à base d’ESP8266 ou ESP32 sont équipées d’un connecteur au standard JST PH2.0mm qui permet de brancher directement une alimentation. Il suffira d’acheter un connecteur JST PH2.0 pour adapter un boitier de piles AA. Il suffit de multiplier le nombre de piles par 1,5V pour connaitre la tension délivrée. Par exemple avec 3 piles, le boitier délivrera une tension de 4,5V.
Si votre carte de développement ne dispose pas de connecteur d’alimentation, utilisez la broche VCC. Attention à ne pas dépasser la tension maximale admissible au risque de détériorer la carte.
Boitier pour piles AA avec connecteur DC2.1
Pour les ordinateurs cartes ou les Arduino qui disposent d’un connecteur au standard DC2.1, il est très facile d’alimenter le projet avec un bloc pour 6 piles AA qui délivre une tension de 9V.
Power bank (solaire) Waterproof (résistante aux projections d’eau)
Bien plus simple que de fabriquer son propre système de recharge solaire, certaines Power Bank sont certifiées Waterproof. Attention, ça ne veut pas dire qu’on peut la laisser sous un pluie battante mais elle pourra résister à l’humidité et quelques gouttes d’eau. Attention aux capacités alléchantes de certains marchands. Au delà de 20000mAh, il faudra plus d’une journée pour obtenir une recharge complète…et ce en plein soleil.
Shield pour batterie 18650, plusieurs sorties 3.3V ou 5V, interrupteur, contrôleur de charge
Il existe des cartes d’alimentation dédiées aux batteries 18650 de grande capacité. Ces shields disposent d’un connecteur micro-ISB ainsi que de plusieurs broches pour souder directement l’alimentation 5V ou 3.3V. Cerise sur le gateau, il dispose d’un circuit de recharge qu’on pourra par exemple alimenter par un panneau solaire !
Il existe deux versions. Pour une batterie
Double batterie permettant de délivrer jusqu’à 3A, ce qui est largement suffisant pour alimenter un Raspberry Pi 3 durant plusieurs heures pour quelques euros !
Alimentation pour breadboard 3.3V ou 5V
Si vous avez de nombreux projets, acheter une alimentation pour breadboard (moins de 2€) pouvant délivrer 3.3V ou 5V n’est pas une dépense inutile.
Alimentation 3.3V à l’aide d’un régulateur de tension LD1117V33
Vous pouvez utiliser une ancienne alimentation d’un smartphone. Pour cela vous aurez besoin d’un adaptateur jack muni d’un bornier à vis et d’un régulateur de tension (LD1117V33 par exemple) permettant de délivrer les 3.3 Volts nécessaires à l’ESP8266. Attention à ne pas dépasser la tension d’alimentation préconisée (documentation technique). Enfin, tenez compte dans la conception de vos projets que le LD1117 chauffe (beaucoup). Vous pouvez également ajouter un condensateur 10µF pour obtenir une alimentation plus stable.
Pour les projets qui fonctionnent sur batterie, il faut faire la chasse au dépenses énergétiques. C’est la connexion WiFi qui consomme le plus d’énergie. Le mieux est donc d’ouvrir la connexion uniquement lorsque vous voulez envoyer des données sur un serveur.
Si votre objet n’a pas besoin d’être piloté à distance (commander le moteur d’ouverture de volet par exemple), il est préférable de mettre en veille en activant le mode deep sleep. Lisez ce tutoriel pour en savoir plus.
ESP8266, test du mode Deep Sleep, réveil (wake up) avec un détecteur de mouvement PIR
Certains capteurs (détection de polluants) sont très consommateur en énergie. En effet, pour détecter la présence de polluants dans l’atmosphère, le capteur doit être chauffé en permanence à une certaine température. Un fonctionnement sur batterie n’est pas une bonne solution pour ce type d’application.
Les capteurs de la série MQ doivent être chauffés pour détecter la présence de polluants ce qui n’est pas compatible avec un fonctionnement sur batterie
Prêt à vous lancer, tous les tutoriels pour débuter
Prêt à vous lancer, voici d’autres tutoriels pour vous aider dans votre projet
Pour aller plus loin
Pour aller encore plus loin, voici un tableau qui vous permet d’accéder rapidement aux articles et tutoriels. Les sujets déjà traité sur le blog sont indiqués par un fond verte.
—> Faites défiler le tableau vers la droite pour accéder à la suite
Signification des abréviations
ADC – Analog to Digital Converter CAN – Controller Area Network, bus de données CNC – Computer numerical control, machine à commande numérique DAC – Digital to Analog Converter E/S – Entrées / Sorties (I/O en anglais) GPIO – General-purpose input/output I/O – Input/Output I2C – Inter-Integrated Circuit I2S ou IIS – Inter-IC Sound, Integrated Interchip Sound MCU – MicroController Unit MISO – Master Input Slave Output MOSI – Master Output Slave Input OLED – Organic light-Emitting Diode PWM – Pulse-width modulation SCL – Serial Clock Line SCLK – Serial Clock SDA – Serial Data Line SS – Slave Select
UART – Universal Asynchronous Receiver Transmitter
Mises à jour
19 mai 2019 Ajout des MCU STM32 les plus utilisés. Core M3 STM32F103C8T6 et Core M4 STM32F407VET6
Avez-vous aimé cet article ?