Fabriquer un objet connecté DIY. Partie 1, choix du micro-contrôleur, format, bus de données

Vous voulez vous lancer dans la fabrication de vos propres objets connectés à base d’Arduino, ESP8266, ESP32, Raspberry Pi. Dans cette nouvelle série d’articles, nous allons aborder tous les aspects techniques à connaître. Cela fait presque deux ans que je vous propose des tutoriels sur les différentes technologies disponibles pour développer des objets connectés. J’ai essayé de présenter les solutions les plus utilisées et les plus accessibles lorsqu’on débute en programmation. Il en existe encore bien d’autres destinées à l’industrie. Il manquait un article de synthèse pour faire le lien entre tous ces tutoriels et vous aider à bien débuter dans vos projets d’objets connectés DIY. Il y aurait de quoi en écrire un livre ! Je ne vais pas aller si loin. Je vous propose une nouvelle série d’article qui va aborder les points sur lesquels vous me posez très souvent des questions :

  1. Quel micro-contrôleur choisir ?
  2. Quel firmware installer, ou comment développer du code Arduino, Micro Python…
  3. Comment communiquer avec un objet connecté. Nous aborderont les protocoles de communication, les gateways (passerelle), les solutions de communication
  4. Comment exploiter ses objets connectés sur un serveur domotique et pourquoi pas comment développer sa propre application mobile
  5. Pour aller encore plus loin
    • Concevoir et fabriquer les circuits
    • Comment stocker les données, tracer des graphiques…

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

 

Dans ce premier article nous allons aborder les points suivants

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 MicroController 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).

MCU Carte de développement Broches Flash (KB) RAM (KB)
ATmega16U2 Arduino Uno Rev.3 ou Arduino Nano 32 16 512
ATmega168 Arduino micro 32 16 1024
ATmega32U4 Arduino micro 44 32 2560
ATmega328P Arduino Uno Rev.3 ou Arduino Nano 32 32 2048
ATmega2560 Arduino Mega 2560 100 256 8192

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

famille arduino

Le défaut majeur des solutions Atmel (qui a été acheté par Microchip en 2016), c’est l’absence de connectivité qui oblige à acquérir 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 un ESP8266.

Dernière mise à jour des prix le 20 octobre 2018 23 h 57 min

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…)

cjmcu board wearable attiny85 arduino lilytiny lilypad_atmega32u4 lilypad_atmega328
CJMCU – ATTiny 85

Programmation via le port USB

LilyTiny – ATTiny85

Nécessite un programmateur AVR et une pince IC Test Clip for SOIC8 Pins

LilyPad – ATmega 32u4

Programmation via le port USB

Documentation technique

LilyPad – ATmega 328

Programmation par liaison Série (FTDI)

Documentation technique

Programmation de l'ATtiny85 d'un carte LilyTiny de Sparkfun (source : Sparkfun)

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.

ESP-01 ou 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 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 tous 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, utilisez la seconde référence :

  • L’ESP-WROOM-02 est le module de base. L’antenne WiFi est gravée sur le PCB
  • L’ESP-WROOM-02D dispose d’une antenne gravée sur le PCB plus performante
  • L’ESP-WROOM-02U n’est pas équipé d’antenne WiFi. A la place est dispose d’un connecteur pour antenne externe au format IPEX
  • L’ESP-WROOM-S2 est un 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

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’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 Wemos 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 vienne s’empiler ou s’assembler sur une base double ou triple. Tous les shields disponibles sont actualisés ici.

1-Button Shield Module for WeMos D1 mini button
0,40
Voir l'offre
AliExpress
-3% ProtoBoard Shield For WeMos D1 Mini Double Sided Perf PCB Extension Board...
0,53 0,55
Voir l'offre
AliExpress
-5% ESP8266 Relay Shield V2 WeMos D1 Mini ESP8266 Development Board For WeMos...
0,71 0,75
Voir l'offre
AliExpress
-15% Double Socket Dual Base Shield for WeMos D1 Mini NodeMCU ESP8266 For...
0,71 0,84
Voir l'offre
AliExpress
-30% Micro SD Card Shield IoT Wireless Control for D1 Mini ESP8266 WiFi...
0,76 1,09
Voir l'offre
AliExpress
-4% DHT Shield for WeMos D1 mini DHT11 Single-bus digital temperature and humidity...
0,81 0,85
Voir l'offre
AliExpress
-29% For Wemos D1 Mini Buzzer Shield V1.0.0 Development Board For Wemos D1...
0,82 1,17
Voir l'offre
AliExpress
-10% Tripler Base V1.0.0 Module Board with Pins For WEMOS D1 Mini
0,84 0,94
Voir l'offre
AliExpress
WS2812B RGB SHIELD for WeMos D1 mini
0,95
Voir l'offre
AliExpress
-5% Double Socket Dual Base Shield for WeMos D1 Mini NodeMCU ESP8266
0,97 1,03
Voir l'offre
AliExpress
-5% Matrix LED Shield V1.0.0 8 Step Adjustable Intensity for WEMOS D1 mini...
1,10 1,16
Voir l'offre
AliExpress
-5% RTC DS1307 Real Time Clock DataLog Shield with Micro SD for WeMos...
1,45 1,54
Voir l'offre
AliExpress
SHT30 Shield for D1 Mini SHT30 I2C Digital Temperature and Humidity Sensor...
1,52
Voir l'offre
AliExpress
-29% For WEMOS D1 Mini DC Power Shield V1.1.0 Development Board For Wemos...
1,65 2,35
Voir l'offre
AliExpress
Wemos® Battery Shield V1.2.0 For Wemos D1 Mini Single Lithium Battery Charging...
2,02
-5% DHT Pro Shield for WeMos D1 mini DHT22 Single-bus digital temperature and...
2,15 2,27
Voir l'offre
AliExpress
Motor Shield For WeMos D1 mini I2C Dual Motor Driver TB6612FNG (1A)...
2,23
Voir l'offre
AliExpress
Wemos® DHT Shield V2.0.0 For WEMOS D1 Mini DHT12 I2C Digital Temperature...
2,29
-6% SSD1306 OLED Shield For WeMos D1 Mini IIC I2C IOT 0.66
3,06 3,26
Voir l'offre
AliExpress

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

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

Pour combler ces lacunes, l’ESP32 a été développé. C’est un micro-contrôleur beaucoup plus musclé (deux coeurs cadencés à 240MHz). Cette fois, Espressif a mis toutes ces 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)

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-

En 2018, Espressif a totalement revu sa gamme de produits en 2018. Pour un bon moment encore, les deux générations vont se côtoyer sur les cartes de développement, ce qui ne va pas simplifier le choix ! Espressif développe également des solutions pour l’industries qui peut avoir des besoins particuliers. Pour les cartes de développement grand public, c’est l’ESP-WROOM-32 qui est le plus utilisé.

Si vous êtes débutant, je vous conseille également de rester sur des cartes de développement Wemos ou compatible. Je vous déconseille l’achat des modèles avec écran OLED monochrome SSD1306. J’ai par exemple rencontré des problèmes avec le bus I2C sur cette carte rendant impossible l’utilisation simultanée de l’écran et d’un périphérique I2C. Je ne peux malheureusement pas acheter et tester toutes les cartes qui sortent. N’hésitez pas à partager vos retours d’expériences (bon ou mauvais) dans les commentaires. A part Wemos, le nouveau fabricant TTGO semble concevoir de bonnes cartes à base d’ESP32. Les cartes génériques sont souvent trop larges (surtout les premiers modèles lancés en 2017).

Vous pouvez opter pour une carte Wemos LoLin32 Lite (supportée par le firmware ESP Easy) ou la nouvelle LoLin D32. Aussi étroite que la Wemos d1 mini, elle dispose d’un connecteur pour batterie LiPo 3.7V. Elle est également parfaitement supportée par l’IDE Arduino.

Quelle plateforme de développement choisir 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
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 ***** * ** ****
Accessoires domotiques *** * ***** *****

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

Dernière mise à jour des prix le 20 octobre 2018 21 h 57 min

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

Pour fabriquer de petits objets connectés

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

comparaison arduino nano wemos d1 mini lolin32 esp32 esp8266_bb

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.

doit.am geekcreit 16 channel servo motor i2c pca9685pw esp8266 espduino

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.

esp32 thing sparkfun pinout

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 Width 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.

Remarque. Certains périphériques disposent d’une double interface I2C et SPI. Libre à vous de choisir l’interface la mieux adaptée à votre projet et à la librairie disponible 

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

PWM

I2C SPI UART
tcr5000 Compteur de pulsation

 
dallas-ds18b20 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
 

 

 

BMP180 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
 

bh1750 Intensité luminueuse

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

Broches DHT22 Température, humidité

 

 

 pn532 RFID

 

 

 

hc-sr04 Distance / proximité

bouton-poussoir Micro-interrupteurs (push button)  
ads1115 Carte analogique externe

mcp23017 Entrées digitales supplémentaires

 

ir keyes ky-022 Récepteur Infra rouge  
gp2y10 Poussières, particules

  • GP2Y10 : particules de taille supérieure à 0,8µm. 0.5V pour 0.1mg/m3
  • DMS501A, indice PM2.5. Tutoriel
 

 

 

Teneur en CO ou CO2

 

 

 

 

 

ina219 Tension et Intensité du courant

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

 MQ135 mq-135 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

PWM

I2C SPI UART
mcp23017 Sorties numériques supplémentaires

pca9685 Sorties PWM (LED essentiellement)

 

oled ssd1306 ecran i2c Ecrans

 

 

 

Le bus I2C, le bus à tout faire idéal pour vos 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

Fabriquer un objet connecté DIY, 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

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

 

Print Friendly, PDF & Email

Inscrivez-vous à la newsletter hebdomadaire

Aucun spam et aucun autre usage ne sera fait de votre email. Vous pouvez vous désinscrire à tout moment.

Comparateur de prix

Bons plans

Les offres suivantes se terminent bientôt. Utilisez le coupon indiqué pour profiter du prix promo

Domotique et objets connectés à faire soi-même