Débuter avec les objets connectés DIY (1). Choix du micro-contrôleur, bus de données, carte de développement, composants • Domotique et objets connectés à faire soi-même

Vous voulez vous lancer dans la fabrication de vos propres objets connectés à base d’Arduino, ESP8266, ESP32, Raspberry Pi ou vous êtes étudiants et vous avez un projet de fin d’étude à réaliser. Dans cette nouvelle série d’articles, nous allons aborder tous les aspects techniques à connaître sur les objets connectés et les micro-contrôleurs en général.

Impossible de passer en revue l’intégralité des solutions disponibles, il y aurait de quoi en écrire plusieurs livres ! Je vous propose de présenter les solutions les plus utilisées et les plus accessibles lorsqu’on débute en programmation. Si vous êtes étudiant, la plupart des solutions sont également disponibles dans l’industrie ou sont très similaires.

Toutes les abréviations sont expliquées à la fin de l’article.

Dans ce premier article nous allons aborder les points suivants

Sommaire

C’est quoi un objet connecté ?

Il n’existe pas encore de définition précise de ce que sont les objets connectés. Les objets connectés portent plusieurs autres dénominations. On pourra aussi parler d’Internet des Objets (IdO) ou Internet of Things (IoT) en anglais.

Finalement, ce sont des objets qui embarquent un micro-processeur qui est chargé de réaliser des tâches locales et qui peut communiquer avec d’autres services (au sens large). Un service pourra être

  • Un serveur. Par exemple une caméra de surveillance de trafic routier qui envoi régulièrement le nombre de véhicules à un serveur en charge de prévision le trafic.
  • Un autre objet. Un smartphone qui s’authentifie auprès d’une serrure connectée.

La notion d’internet est omniprésente mais c’est une notion restrictive, il vaudrait mieux parler d’objets communicants. Mais c’est vrai que le principal objectif est de pouvoir piloter ou connaître l’état des objets via un accès internet.

Voici un schéma qui permet de mieux comprendre un exemple de logique à mettre en place. Dans cette première partie, nous allons nous concentrer sur les zones en vert clair.

  • Un premier objet connecté fonctionnant sur batterie permet de collecter la mesure d’un anémomètre (capteur). La vitesse du vent (mesure) pourra être récupérée par exemple sous la forme d’un signal électrique 0-5V sur un entrée analogique (DAC).
  • Le micro-contrôleur (aussi dénommé MCU en anglais) est alimenté par une batterie rechargée à l’aide d’un petit panneau solaire (lisez ce tutoriel pour en savoir plus). Il transmet la vitesse du vent à intervalle régulier via une connexion WiFi à un serveur via des messages MQTT. Il pourrait également communiquer avec le serveur par ondes radio sur une fréquence libre (par exemple en LoRa 433MHz pou une plus grande portée). Dans ce cas, il faudra installer une passerelle (ou gateway en anglais). La passerelle permet de faire communiquer le (les) objet(s) entre eux ou le serveur.
  • Un second objet connecté est chargé de piloter le moteur (actionneur) d’un volet roulant. Il est connecté en WiFi à un broker MQTT. Le programme développé en C++ à l’aide de l’IDE Arduino réalise un traitement local. Par exemple, il pourra commander la fermeture du volet si la vitesse du vent dépasse un certain seuil.
  • Le 2nd objet connecté fonctionnant sur le secteur, il dispose d’une interface de commande accessible sur le réseau local (ou depuis internet en configurant un routage de port). Entièrement développée avec du code HTML, elle pourrait permettre de piloter manuellement le moteur du volet roulant, de connaître l’état du volet et l’historique des actions précédentes.
  • Le serveur permet de réaliser des traitements plus complexes :
    • Un moteur de règles développé avec Node-RED permet d’ouvrir partiellement les volets en fonction de la météo du jour récupérée sur un service en ligne.
    • Donner accès à une interface de contrôle de tous les objets connectés disponibles. Le plugin Dashboard pour Node-RED permet de créer rapidement des interfaces sans avoir aucune connaissance en HTML, CSS, PHP, Javascript…
    • Les données pourront être stockées sur une base de données locale pour conserver un historique (actions ouverture / fermeture / partielle, vitesse du vent…). On pourra utiliser une base de données traditionnelle (MySQL, MariaDB, PosgreSQL…) ou plus dédiée au stockage rapide (MongoDB, InfluxDB)
    • Tracer des relevés. Le plugin Dashboard pour Node-RED dispose d’un objet pour tracer ds courbes simplifié. Pour des projets plus complexes, Grafana est la Rolls dans le domaine.
    • On pourra également utiliser un logiciel spécialisé dans la domotique pour récupérer les mesures des sondes (température, pollution de l’air…), l’état des modules (allumés, éteint, vitesse, température de consigne…) et des détecteurs (portes, fenêtres, volets, présence…). Un serveur domotique permet de créer facilement des scénarios (ouvrir les volets tous les jours à 7h00…) et de réagir à des événements (fermer tous les volets et envoyer une notification si une intrusion et détectée en votre absence…). Pour en savoir plus, commencez par la lecteur de cet article plus détaillé.

Comme vous avez pu le constater, toutes les solutions proposées sont totalement Open Source et gratuites.

Les zones avec un fond vert sont traitées dans la 1ère partie de l’article.

Fabriquer un objet connecté DIY, quel micro-contrôleur choisir ?

Il existe un très grand nombre de micro-contrôleurs disponibles sur le marché, Atmel AVR, Atmel SAM, Espressif ESP32 ou ESP8266, Freescale Kinetics, Intel ARC32, Lattice iCE40, Maxim 32, Microchip PIC32, Nordic nRF51, Nordic nRF52, NXP LPC, samsung ARTIK, Silicon Labs EFM32, ST Microelectronic STM32, Teensy, TI MSP430, TI TIVA, WIZNet W7500… mais la plupart sont destinés à des cartes de développement ou des projets professionnels.

Microchip Atmel ATmega AVR

Pour des projets personnels ou le coût des composants est un critère primordial, le choix se réduit drastiquement. On retiendra les cartes à base de micro-contrôleurs (MCU en anglais pour Micro Controller Unit) Atmel AVR. Ce sont des MCU basés sur une architecture RISC 8 bits. On retrouve ces MCU sur toutes les cartes Arduino et les clones asiatiques. Ce sont des MCU 8 ou 32-bits performants et peu gourmand en énergie. Impossible de lister tous les MCU Microchip Atmel ici. Si vous avez besoin de plus d’informations techniques, vous trouverez tout ce qu’il vous faut ici. Voici un tableau comparatif des principaux MCU qui équipent le plus souvent les cartes Arduino (officielles et compatibles).

On trouve les MCU Microchip Atmel dans la plupart des cartes de développement Arduino ainsi que les cartes compatibles. Plutôt qu’un long discours, voici en image l’encombrement des principaux modèles d’Arduino. De gauche à droite

  • 1ère colonne : Arduino Uno Rev.3, Arduino Leonardo
  • 2nd colonne : Arduino Micro, Arduino Nano, Arduino Pro Mini
  • 3ème colonne : Arduino Mega 2560, Arduino Due

Le défaut majeur des solutions Atmel (propriété de Microchip depuis 2016), c’est l’absence de connectivité (WiFi ou Ethernet) qui oblige à recourir une carte additionnelle (WiFi, Ethernet, Bluetooth) dès que l’on veut communiquer avec un serveur domotique par exemple. En plus du coût, les projets sont beaucoup plus volumineux. Pour des projets qui nécessitent une connectivité WiFi, optez directement pour une carte à base d’ESP8266EX ou ESP32.

Microchip Atmel ATTiny85

L’ATTiny85 est un MCU développé par Atmel adapté à la réalisation de projets d’électronique vestimentaire ou nécessitant peu d’E/S. Voici un tableau de comparaison entre l’ATTiny85 et le MCU  ATmega328. Pour en savoir plus et débuter la programmation de cartes à ATTiny85, lisez ce tutoriel.

ATiny85 ATmega328
Nombre de broches 8 28
Taille Flash (ko) 8 32
Taille SRAM (octets) 512 2048
Taille EEPROM (octets) 512 1024
Canaux PWM 2 6
GPIO (en comptant les ADC et PWM) 6 (5 disponibles sans désactiver le fusible de reset*) 23 (dont 20 exposés sur Arduino Uno)
Connectivité I2C oui oui
Connectivité SPI oui oui
Connectivité UART non oui

L’ATTinyest très utilisé dans les cartes LilyPad, LilyTiny et Gemma ou Flora d’Adafruit destinées au développement de projets vestimentaires (costumes, cosplay…)

Attention toutefois au moment de choisir votre carte. Pour gagner en encombrement (et en prix), certaines cartes n’embarquent pas de convertisseur Série / USB. Pour programmer le MCU ATTiny, il faudra venir se brancher directement sur les broches du boitier à l’aide d’une pince spéciale IC Test Clip pour SOIC8 Pins et quelque fois disposer également d’un programmateur AVR. C’est par exemple le cas de la carte LilyTiny de Sparkfun qui ne mesure que 20mm de diamètre. ) 

Vous pouvez également le MCU ATTiny85 seul pour développer vos propres circuits.

Microchip Atmel SAMD21, nouveaux MCU pour Arduino (et clones)

Depuis 2015, un nouveau micro-contrôleur plus puissant construit sur la base d’un processeur ARM Cortex M0+ à 48 MHz est disponible chez Atmel / Microchip. La fondation Arduino utilise les MCU SAMD21 comme moteur pour plusieurs modèles de la nouvelle génération de cartes de développement Arduino MKR.

Il existe plusieurs versions du SAMD21, voici comment reconnaître le MCU embarqué sur la carte à partir de sa désignation

Il existe donc 3 variantes SAMD21E (26 E/S), SAMD21G (38 E/S) et SAMD21J (52 E/S) qui embarquent entre 32KB et 256KB de mémoire flash. Voici un tableau récapitulatif des spécifications techniques.

Les premières cartes ont été commercialisées courant 2018. On trouve de plus en plus ce cartes low cost chez les fabricants chinois depuis 2019 au format Arduino Uno R3

Et au format compact (successeur de l’Arduino Micro)

Toutes les données techniques sont tirées de la documentation technique disponible ici.

STMicroelectronic STM32

STMicroelectronic (ancien Thomson SGS) est un fabricant Franco-Italien de circuit intégré. Vous connaissez forcément STMicroelectronics car c’est à cette société qui développe et fabrique le capteur de reconnaissance faciale FaceID qui équipe les derniers générations d’iPhone.

Le MCU STM32 est le plus connu de STMicroelectronics. On le retrouve par exemple dans les produits Sonoff (4CH Pro, RFBridge 433…). Le STM32 est très économique et très puissant. Il existe de très nombreuses variantes. C’est le STM32F103C8T6 qui est le plus utilisé dans les cartes de développement low cost.

Le STM32F103C8T6 est construit sur la base d’un ARM Cortex-M3 32-bit cadencé à 72 MHz.

D’autres cartes de développement STM32.

En fonction du modèle, il peut embarquer jusqu’à de 128 Kbytes de mémoire flash et 20 Kbytes de mémoire SRAM. Voici quelques caractéristiques communes :

  • E/S : jusqu’à 80 E/S (26/37/51/80). Tolère jusqu’à 5V
  • Interfaces de communication
    • Jusqu’à 2 interfaces I2C (SMBus/PMBus)
    • Jusqu’à 3 ports série USART compatible ISO 7816 interface, LIN, IrDA, modem
    • Jusqu’à 2 bus SPI (18 Mbit/s)
    • Une interface CAN (2.0B Active)
    • Une interface USB 2.0 full-speed
  • 2 convertisseurs Analogique / Numérique (ADC) 12-bits
  • 7 canaux DMA
  • 3 timers

Toutes les spécifications techniques sont ici.

Contrairement à l’Arduino, ESP32 ou ESP8266, le port USB ne peut pas être utilisé pour téléverser ou mettre au point le programme. Un programmeur (ST-Link) est nécessaire.

Pour des projets nécessitant plus de puissance ou d’E/S, vous pouvez optez par un STM32F407VET6 (le plus utilisé dans les cartes de développement low cost). Le MCU est équipée d’un Core M4 à 168MHz. Les spécifications techniques sont ici.

Espressif ESP8266 avec connectivité WiFi

Pour des projets d’objets connectés en WiFi, c’est Espressif qui s’est imposé sur ce marché. Né en 2014, les μC ESP8266 sont rapidement devenus incontournables dès que l’on souhaite réaliser un objet connecté en WiFi. Initialement, les modules ESP-01 étaient conçus pour ajouter une connectivité WiFi low cost aux projets Arduino. L’ESP-01 dispose de 2 broches. Elle permettent de communiquer avec le programme Arduino via une liaison série (RX/TX). L’Arduino Killer était né ! Le module ESP-01 a rapidement rencontré un très fort succès dans la communauté des Makers. Très économique (moins de 2€), il était polyvalent et aussi puissant qu’un μC Atmel, le WiFi en plus ! On trouve encore ce module sur les boutiques asiatiques mais il est appelé à disparaitre dans un avenir très proche.

Fort de ce succès, Espressif a ensuite conçu le module ESP8266. Basé sur un Cortex M0 à 160MHz, l’ESP8266 embarque 4Mo de mémoire flash. Il dispose de 11 E/S, toutes PWM. Il dispose également d’une entrée analogique dans la tension admissible maxi est de 3,2V.

Malgré ses nombreuses qualités, l’ESP8266 était (est) encore en dessous des MCU Atmel sur plusieurs points :

  • Seulement 11 broches d’E/S
  • Une seule entrée analogique (limitée à une tension de 3.2V)
  • Impossible de sécuriser (crypter) la connexion WiFi

Depuis 2018, Espressif commercialise 4 nouveaux modules ESP8266EX. Le EX à la fin de la désignation permet d’identifier les nouveaux SoC mais ne permet pas d’identifier les spécifications techniques pour chaque modèle. Les 4 modèles disposent de 2MB de mémoire flash au lieu de 4MB pour la génération précédente. C’est largement suffisant pour faire fonctionner les programmes et faire stocker les fichiers d’une interface HTML si vous voulez ajouter une interface WEB à votre projet (vous pouvez réaliser ce projet de station météo pour apprendre comment faire).

Pour différencier chaque modèle, vous devez utiliser la référence du Core.

Image Core Pins Mémoire flash (MB) Antenne
ESP-WROOM-02

Module de base. L’antenne WiFi est gravée sur le PCB

18 2 PCB
ESP-WROOM-02D

Antenne RF améliorée gravée sur le PCB

18 2 PCB
ESP-WROOM-02U

Connecteur U.FL pour antenne externe

18 2 IPEX
ESP-WROOM-S2

Modèle spécifique qui peut travailler comme un esclave SDIO/SPI. Le bus SPI a été optimisé pour atteindre une vitesse de 8 Mbps

18 2 PCB

Voici les autres caractéristiques des modules ESP8266EX

  • Processeur mono-cœur cadencé à 160 MHz
  • Courant de veille inférieur à 20 μA
  • WiFi 802.11 b/g/n à 2.4 GHz
  • L’ESP8266EX supporte les entrées/sorties UART, GPIO, I2C, I2S, SDIO, PWM, ADC et SPI
  • Certifié CE et FCC

Vous pouvez lire ce guide pour en savoir plus et bien débuter avec les modules ESP8266. Si la sécurité des données de vos projets d’objets connectés est un point primordial, optez directement pour un module RSP32.

Quelques modèles de cartes de développement ESP8266

L’ESP8266EX tarde à être utilisé par les fabricants de carte de développement. L’IDE Arduino supporte la majorité des cartes de développement génériques.

Si vous débutez, je vous conseille les cartes de développement du fabricant chinois Wemos. La LoLin d1 mini est une carte de développement ESP8266 parfaitement prise en charge par l’IDE Arduino. Elle utilise un convertisseur Série/USB CH340 pris en charge nativement sous Windows ou macOS. Si toutefois vous rencontrez des difficultés (sur Windows, macOS ou Linux), vous trouverez certainement la solution en lisant ce tutoriel.

En plus d’être très accessibles (environ 2,5€), Wemos a développé de nombreux shields (cartes d’extensions) qui viennent s’empiler ou s’assembler sur une base double ou triple. La liste de tous les shields disponibles est actualisée ici.

Voir plus de shields

Pour débuter avec les modules ESP8266, voici une série de tutoriels et projets DIY développés à l’aide de la LoLin WeMos d1 mini

Voir plus de tutoriels

Espressif ESP32 : WiFi sécurisé, bluetooth, support pour écran tactile, bus CAN

L’ESP32 est un micro-contrôleur beaucoup plus musclé que l’ESP8266EX. Cette fois, Espressif a mis toutes les chances de son coté :

  • SoC : dual-core Xtensa 32-bit LX6 @ 240MHz
  • Mémoire : 520 kB de mémoire interne SRAM, 4MB de mémoire flash externe
  • Connectivité
    • WiFi 802.11 b/g/n/e/i conforme à la norme IEEE 802.11 compatible avec les sécurités WFA, WPA/WPA2 et WAPI
    • Bluetooth 4.2 BLE et BR/EDR
    • Connecteur IPEX pour antenne externe sur certains modèles (la liste complète ici)
    • USB pour la mise au point des programmes via le port micro USB
  • Entrées/Sorties
    • 26x E/S digitales (fonctionnement à 3.3V)
    • 18x entrées analogiques et 2x sorties analogiques
      • 18x ADC (pour Analog to Digital Converter, convertisseur analogique numérique). Broches 0, 2, 4, 12, 13, 14, 15, 25, 26, 27, 32, 33,  34, 35, 36, 37, 38, 39 
      • 2x DAC (pour Digital to Analog Converter en anglais, convertisseur numérique vers analogique) sur les broches 25 et 26
    • 3xSPI, 2x I²S, 2x I²C, 3xUART, CAN 2.0, IR, Touch Sensor (écran tactile)
    • Capteur de température
  • Protection cryptographique : AES, SHA-2, RSA, ECC, random number generator (RNG)

En 2019, on dénombre 9 modules (liste officielle) classés en 2 familles

  • Dual Core avec connectivité WiFi et Bluetooth
  • Single Core avec connectivité WiFi et Bluetooth

La liste peut sembler longue mais en fait il existe 4 Cores qui sont ensuite assemblés dans différentes configurations

  • 8MB de mémoire PSRAM accessible via le bus SPI qui permet de stocker plus de données
  • Antenne gravée sur le PCB ou avec un connecteur IPEX

Les modules ESP32-WROOM-32D et ESP32-WROOM-32U sont préconisés par Espressif. Voici un tableau de synthèse permettant de comparer tous les modèles.

Image Désignation / Chipset Dual Core Single Core WiFi Bluetooth Pins Mémoire flash (MB) Mémoire PSRAM Antenne
ESP32-WROOM-32

ESP32-D0WDQ6

X X X 38 4 PCB
ESP32-WROOM-32D

ESP32-D0WD

X X X 38 4 PCB
ESP32-WROOM-32U

ESP32-D0WD

X X X 38 4 8 IPEX
ESP32-WROVER

ESP32-D0WDQ6

X X X 38 4 8 PCB
ESP32-WROVER-I

ESP32-D0WDQ6

X X X 38 4 8 IPEX
ESP32-WROVER-B

ESP32-D0WD

X X X 38 4 8 PCB
ESP32-WROVER-IB

ESP32-D0WD

X X X 38 4 8 IPEX
ESP32-PICO-D4

ESP32. Boitier seul

X X X 38 4
ESP32-SOLO-1

ESP32-S0WD

X X X 38 4 PCB

PCB : l’antenne est gravée sous la forme d’une piste sur le circuit

IPEX : connecteur au standard IPEX permettant la connexion d’une antenne extérieure pour un portée supérieure.

Vous pouvez opter pour une carte LoLin D32 ou LoLin D32 Pro (ancien Wemos). Ces deux cartes sont aussi compactes que la Wemos d1 mini et disposent d’un connecteur pour batterie LiPo 3.7V. Elle est également parfaitement supportée par l’IDE Arduino.

Voici un tableau récapitulatif des principales caractéristiques* des MCU ESP8266EX, ESP32, SAMD21 et STM32.

Spécification ATMega328P ESP8266EX ESP32 (2019) SAMD21 STM32F103C8T6 STM32F407VET6
Core Tensilica L106 32-bit RISC Xtensa 32-bit LX6 (1 ou 2 Cores) ARM M0 ARM M3 ARM M4
Puissance DMIPS 20 ? 600 ? 90 225
Fréquence 20 MHz 160 MHz 80 ou 240 MHz 48 MHz 72 MHz 180 MHz
Mémoire Flash 4/8/16/32 KB 2 MB 4 MB 32/64/128/256 KB 64 ou 128 Kbytes 1 Mbytes
SRAM 512/1K/1K/2KB Partagée < 36KB 520 KB 4/8/16/32 KB 20 KB 192+4 Kbytes
Timers x2 (8 bits)

x1 (16 bits)

x5 (16-bits)

x3 (24-bits)

x3 (16-bits)

x2 watchdog

x1 SysTick

x12 (16-bits)

x2 (32-bits)

Cryptage (accélération matériel) AES (FIPS PUB 197), SHA (FIPS PUB 180-4), RSA, et ECC AES 128, 192, 256, DES, MD5, SHA-1
Debug

USB (série)

USB (série)

USB (série) + JTAG

USB (série)

Série (SWD) + JTAG Série (SWD) + JTAG
Economie énergie Idle, ADC Noise Reduction, Power-save, Power-down, Standby, Extended Standby Active, modem-sleep, light-sleep, deep-sleep Active, modem-sleep, light-sleep, deep-sleep Idle, Standly Sleep, Stop, Standby Sleep, Stop, Standby
Interface et connectivité        
UART x1 x2 x3 x6** x3 x6 (11.25 Mbit/s max.)
SPI x1 x2 x3 x6** x2 (18 Mbit/s) x3 (45 Mbit/s max.)
I2C x2 x1 x2 x1 x2 x3
I2S x1 x2 x6** x2
PWM x6 x4 x16 x1 (16-bits)
ADC x8 (10-bits) x1 (10-bits) x2 (12-bits) x1 (12-bits) x2 (12-bits) x3 (12-bits)
DAC x8  (8-bits) x1 (10-bits) x2 (12-bits)
CAN 2.0 x1 x1 x2
E/S (GPIO) x23 x17 x34 x52 26/37/51/80 x140 (dont 138 tolérantes 5V)
SDIO x2 (slave) x1 x1
Interface tactile x10 (capacitif) x256 (capacitif, proximité)
Infrarouge x1 x8
Caméra x1
Ethernet x1 x1 IEEE 1588v2
USB 2.0 micro-OTG x1 x1 x1 x2
WiFi 802.11 b/g/n 802.11 b/g/n
Bluetooth LE 4.x Oui
Documentation technique Lire Lire Lire Lire Lire Lire

(*) Attention, le nombre d’E/S peut varier en fonction de la référence. Les valeurs indiquées sont les valeurs maximales pour le modèle le plus puissant.

(**) Maximum. Partagées UART/SPI/I2C

Ordinateur carte à processeur ARM : Raspberry Pi, Orange Pi, Friendly ARM, Asus Tinkerboard…

Lorsqu’on parle d’objets connectés, on pense (presque) automatiquement micro-contrôleur (MCU), mais dans certains cas le Raspberry Pi (ou d’autres ordinateurs cartes à base de processeur ARM) sera beaucoup mieux adapté. C’est le cas par exemple de tous les projets qui utilisent de la vision à l’aide de caméra ou qui nécessitent une puissance de calcul supérieure (traitement du signal).

Pour les projets intégrant de la vision, Même si on trouve des démonstrations d’analyse d’image sur ESP32, la puissance est assez limitée mais ce qui manque cruellement, ce sont les librairies logicielles.

Trois cartes sortent du lot et totalisent le plus de téléchargement d’Armbian. L’Orange Pi Zero, l’Asus Tinkerboard / S et le Nanopc T4 de Friendly ARM. Pour en savoir plus sur Armbian, vous pouvez poursuivre en lisant cet article.

Désignation Orange Pi Zero Asus Tinkerboard / S Nanopc T4 de Friendly ARM Raspberry Pi 3 modèle B+
Budget < 15€ ~120€ ~120€ < 40€
SoC Allwinner H2+

Rockchip Quad-Core RK3288

Rockchip RK3399 BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz
GPU Mali400MP2 GPU @600MHz

Quad-Core Mali GPU 4K@30hz H.264/H.265

Mali-T864
Sortie audio via carte d’extension

RTL ALC4040 CODEC

Jack 3,5mm

Jack 3,5mm Jack 3,5mm
Microphone via carte d’extension

via prise jack

x1
mémoire flash eMMC 16 GB 16 GB
RAM 256/512MB

2GB DDR3

4GB LPDDR3-1866 1GB LPDDR2 SDRAM
GPIO 1 x 23-pin 1 x 40-pin 1 x 40-pin 1 x 40-pin
Debug UART Oui Oui Oui Oui
CSI (connecteur caméra) x1 x1 13MPix/s max. x1
DSI (connecteur écran tactile) x1 x1
HDMI x1 x1 x1
USB 2.0 x1 x4 x2 x4
USB 3.0 x1
PCIe x1
SATA x1
Slot microSD x1 x1 x1 x1
WiFi 802.11 b/g/n 802.11 b/g/n 802.11a/b/g/n/ac 802.11 b/g/n
Connecteur IPEX Oui Oui
Bluetooth 4.0 4.1 4.2
Ethernet 10/100 10/100/1000 10/100/1000 10/100/1000
POE x1 Via carte d’extension
Dimensions 93 x 64 x 20 mm 100 mm x 64 mm
Alimentation micro USB 5V ou POE micro USB OTG 5V – 2.5A DC 12V/2A micro USB OTG 5V – 2.5A
Page produit Lire Lire Lire Lire

POUR:

  • Faible encombrement (dépend de la carte)
  • Faible consommation
  • Fonctionnement sur batterie possible)
  • Connecteurs (GPIO, caméra, batterie, SATA…)

CONTRE:

  • Prix de certains modèles
  • Puissance limitée
  • Librairies pas toujours disponibles ou au niveau de Raspbian

Le prix des ordinateurs carte à processeur ARM peut vite grimper au dessus de 100€… un prix comparable à un Mini-PC à base de processeur Intel. Si projet n’utilise pas le connecteur d’E/S (GPIO) ou que vous pouvez utiliser des caméras industrielles via le port USB (à la place des caméras CSI), c’est une solution à envisager également.

Gros avantage, on reste sur un PC Intel 64-bits parfaitement standard sur lequel il sera très facile d’installer une distribution Linux. Windows 10 pourra également convenir…mais c’est plus un problème idéologique que technique !

Comptez environ

Voir plus d’offres

POUR:

  • Prix
  • Puissance
  • Environnement standard (Windows 10 ou Linux)
  • Stockage

CONTRE:

  • Pas adapté aux applications mobiles (consommation, pas de connecteur pour batterie)
  • Avant tout conçu pour un usage bureautique
  • Limité à l’USB

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

Last update was on: 29 octobre 2020 23 h 03 min

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 :

  • 8 bits : 256 niveaux (non recommandé)
  • 10 bits : 1024 niveaux (classique)
  • 12 bits : 4096 niveaux (parfait)
  • 14 bits : 16384 niveaux (devient difficile à traiter)
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 :

  • SDA (Serial Data Line) : ligne de données bidirectionnelle,
  • SCL (Serial Clock Line) : ligne d’horloge de synchronisation bidirectionnelle.

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 SoundIntegrated 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 :

  • SCLK – Serial Clock, Horloge (généré par le maître)
  • MOSI – Master Output, Slave Input (généré par le maître)
  • MISO – Master Input, Slave Output (généré par l’esclave)
  • SS – Slave Select, (généré par le maître)

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

  • Dallas DS18B20 : existe en version étanche de -55°C à +125°C
  • MLX90614 : mesure de température par infrarouge sans contact de -40 à +125°C
   

Baromètre numérique

  • BMP085/BMP180  : pression atmosphérique de 300 à 1100hPa
  • BMP280 : température de -40 à + 85°C, pression atmosphérique de 300 à 1100 hPa
  • BME280 : température de -40 à + 85°C, humidité de 0 à 100%, pression atmosphérique de 300 à 1100 hPa
 

Intensité lumineuse

  • BH1750 : de 0-65535 lux, convertisseur 16 bits.
  • TSL2561 : de 188 μLux jusqu’à 88000 lux
 

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

  • INA219 : 0 à 26V, 3.2A max.
  • INA3221: permet de mesurer jusqu’à 3 courants de 0 à 26V
 

  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.

Voir plus de shields

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.

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

Voir tous les autres articles

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 ?

[Total: 2 Moyenne: 5]