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

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

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.

dqh6vjv55bzkrlmnxjdh-4275680

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

3vkhbrdug5pjxzl0nm0w-3576616

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

ved86jpl0tedh1mhbfzw-9000933

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
hloxq98deog2bsgzyfin-5151804 Compteur de pulsation  
98sy5tupa01yfy9cqhxh-8296103 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
   

ze3nn6owvkxzsqyifabs-9192491 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
 

y8nkkrfmfo1zmljbo5vx-7482759 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
 

 nthyprluzhkgr1ta1ekg-2381710 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)

 

v2yikewv7v9j2rvpier1-5854629 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.

pf5zntvf8pvpegsz0jfu-6362849

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.

dh8wtvuociekfga081k8-3067782

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 ?