Cours 4IT

Internet des Objets (IoT)

Capteurs, actionneurs, Arduino, Raspberry Pi et protocoles de communication IoT

Objectifs pédagogiques

  • Comprendre l'architecture d'un système IoT (capteurs, traitement, communication)
  • Identifier les principaux types de capteurs et actionneurs et leurs caractéristiques
  • Programmer un microcontrôleur Arduino pour interfacer capteurs et actionneurs
  • Connaître les protocoles de communication IoT (MQTT, LoRa, Zigbee)
  • Concevoir une application IoT simple (station météo, domotique)

1. Introduction à l'IoT

L'Internet des Objets (Internet of Things) désigne l'interconnexion d'objets physiques capables de collecter des données, de communiquer et parfois d'agir sur leur environnement. Ces objets vont du simple capteur de température au véhicule autonome, en passant par les montres connectées et les équipements industriels.

Architecture d'un système IoT

Perception
Capteurs, actionneurs
Traitement
Microcontrôleur, edge
Communication
WiFi, LoRa, MQTT
Application
Cloud, dashboard, IA

Domaines d'application

Maison connectée

Thermostat, éclairage, sécurité, électroménager

Santé (e-santé)

Montres fitness, capteurs médicaux, télémédecine

Industrie 4.0

Maintenance prédictive, suivi de production

Agriculture

Irrigation intelligente, surveillance des cultures

Ville intelligente

Parking, éclairage public, gestion des déchets

Transport

Véhicules connectés, logistique, flottes

Chiffre clé

On estime à plus de 15 milliards le nombre d'objets connectés dans le monde en 2024, et ce chiffre devrait doubler d'ici 2030. L'IoT génère des quantités massives de données qui alimentent l'intelligence artificielle et le Big Data.

2. Capteurs et actionneurs

Les capteurs convertissent une grandeur physique (température, lumière, pression...) en signal électrique mesurable. Les actionneurs font l'inverse : ils convertissent un signal électrique en action physique (mouvement, chaleur, lumière...).

Types de capteurs courants

CapteurGrandeur mesuréeSignalExemple
DHT22Température, humiditéNumériqueStation météo
LDRLuminositéAnalogiqueÉclairage automatique
HC-SR04Distance (ultrasons)Numérique (PWM)Détection d'obstacles
PIRMouvement (infrarouge)Numérique (0/1)Alarme, éclairage
MPU-6050Accélération, gyroscopeI2C (numérique)Stabilisation, fitness
MQ-135Qualité de l'airAnalogiqueDétection CO2, fumée

Actionneurs courants

LED et afficheurs

Indicateurs lumineux, écrans LCD/OLED, bandeaux LED RGB. Contrôle par GPIO numérique ou PWM pour la luminosité.

Moteurs

Moteurs DC, servomoteurs (angle précis), moteurs pas-à-pas. Nécessitent souvent un driver (L298N, TB6612).

Relais

Interrupteur commandé électriquement. Permet de contrôler des appareils 230V avec un signal 5V (isolation galvanique).

Buzzer et haut-parleurs

Signaux sonores, alarmes, notifications. Buzzer piézo ou électromagnétique.

3. Plateformes de développement

Pour prototyper des projets IoT, on utilise des cartes de développement qui intègrent un microcontrôleur, des entrées/sorties et parfois des capacités de communication. Les deux plateformes les plus populaires sont Arduino et Raspberry Pi.

Arduino

  • Type : Microcontrôleur (ATmega328P sur Uno)
  • Programmation : C/C++ (Arduino IDE)
  • Exécution : Temps réel, un seul programme
  • GPIO : 14 numériques, 6 analogiques
  • Consommation : Très faible (~50 mA)
  • Prix : ~25 EUR (Uno officiel)
  • Usage : Capteurs, automatismes simples, prototypage rapide

Raspberry Pi

  • Type : Ordinateur monocarte (ARM Cortex)
  • Programmation : Python, C, tout langage
  • OS : Linux (Raspberry Pi OS)
  • GPIO : 40 broches, I2C, SPI, UART
  • Connectivité : WiFi, Bluetooth, Ethernet
  • Prix : ~45-80 EUR selon modèle
  • Usage : Serveur local, traitement d'images, gateway IoT

Exemple Arduino : Lecture d'un capteur de température

// Lecture DHT22 avec Arduino
#include <DHT.h>

#define DHTPIN 2 // Broche data du capteur
#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  dht.begin();
  Serial.println("Station météo IoT");
}

void loop() {
  float temp = dht.readTemperature();
  float hum = dht.readHumidity();

  if (isnan(temp) || isnan(hum)) {
    Serial.println("Erreur de lecture !");
  } else {
    Serial.print("Temp: ");
    Serial.print(temp);
    Serial.print("°C | Hum: ");
    Serial.print(hum);
    Serial.println("%");
  }
  delay(2000); // Mesure toutes les 2 secondes
}

ESP32 : Le champion de l'IoT

L'ESP32 est un microcontrôleur très populaire qui combine la simplicité d'Arduino avec des capacités WiFi et Bluetooth intégrées. Il est idéal pour les projets IoT connectés.

Caractéristiques ESP32 :
• Dual-core 240 MHz (Xtensa LX6)
• WiFi 802.11 b/g/n + Bluetooth 4.2/BLE
• 34 GPIO, 18 ADC, 2 DAC
• Programmable avec Arduino IDE ou MicroPython
• Prix : ~5-10 EUR

4. Protocoles de communication IoT

Les objets connectés utilisent différents protocoles selon leurs besoins en portée, débit, consommation et fiabilité. On distingue les protocoles courte portée (WiFi, Bluetooth, Zigbee) des protocoles longue portée (LoRa, Sigfox, NB-IoT).

MQTT : Le standard IoT

MQTT (Message Queuing Telemetry Transport) est un protocole de messagerie léger basé sur le modèle publish/subscribe. Un broker central reçoit les messages des publishers et les distribue aux subscribers selon les topics.

Architecture MQTT

Capteur
Publisher
maison/salon/temp
→ publish →
Broker MQTT
Mosquitto, HiveMQ
→ subscribe →
Dashboard
Subscriber
maison/#
# Python : Publication MQTT avec paho-mqtt
import paho.mqtt.client as mqtt

client = mqtt.Client()
client.connect("broker.hivemq.com", 1883)

# Publier une température
client.publish("maison/salon/temperature", "23.5")

# S'abonner à tous les capteurs de la maison
client.subscribe("maison/#")

Comparaison des protocoles

ProtocolePortéeDébitConsoUsage
WiFi50-100 mÉlevéHauteDomotique, caméras
Bluetooth LE10-50 mMoyenTrès faibleWearables, beacons
Zigbee10-100 mFaibleTrès faibleDomotique (mesh)
LoRa2-15 kmTrès faibleTrès faibleAgriculture, ville
NB-IoT10+ kmFaibleFaibleCompteurs, tracking

5. Projet : Station météo connectée

Mettons en pratique ces concepts en concevant une station météo IoTqui mesure température et humidité, et envoie les données vers un serveur MQTT pour les visualiser sur un dashboard.

Matériel nécessaire

  • ESP32 DevKit (avec WiFi intégré)
  • Capteur DHT22 (température + humidité)
  • Breadboard et fils de connexion
  • Câble USB pour programmation

Code complet (ESP32 + MQTT)

#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>

// Configuration WiFi et MQTT
const char* ssid = "MonWiFi";
const char* password = "MotDePasse";
const char* mqtt_server = "broker.hivemq.com";

// Capteur DHT22 sur GPIO 4
#define DHTPIN 4
DHT dht(DHTPIN, DHT22);

WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
  Serial.begin(115200);
  dht.begin();

  // Connexion WiFi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("WiFi connecté !");

  // Connexion MQTT
  client.setServer(mqtt_server, 1883);
}

void loop() {
  if (!client.connected()) {
    client.connect("ESP32_Meteo");
  }

  float temp = dht.readTemperature();
  float hum = dht.readHumidity();

  // Publication sur MQTT
  client.publish("meteo/temperature", String(temp).c_str());
  client.publish("meteo/humidite", String(hum).c_str());

  delay(10000); // Envoi toutes les 10 secondes
}
Pour aller plus loin
  • • Ajouter un écran OLED pour afficher les données localement
  • • Créer un dashboard avec Node-RED ou Grafana
  • • Stocker les données dans une base InfluxDB
  • • Ajouter des alertes par email si température critique

À retenir

IoT = Perception + Traitement + Communication + Application

Capteurs : DHT22 (temp), PIR (mouvement), HC-SR04 (distance)

Arduino : microcontrôleur simple, temps réel

ESP32 : Arduino + WiFi/Bluetooth intégré

MQTT : protocole publish/subscribe via broker

LoRa : longue portée (km), faible conso, faible débit

Scientia