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
Domaines d'application
Thermostat, éclairage, sécurité, électroménager
Montres fitness, capteurs médicaux, télémédecine
Maintenance prédictive, suivi de production
Irrigation intelligente, surveillance des cultures
Parking, éclairage public, gestion des déchets
Véhicules connectés, logistique, flottes
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
| Capteur | Grandeur mesurée | Signal | Exemple |
|---|---|---|---|
| DHT22 | Température, humidité | Numérique | Station météo |
| LDR | Luminosité | Analogique | Éclairage automatique |
| HC-SR04 | Distance (ultrasons) | Numérique (PWM) | Détection d'obstacles |
| PIR | Mouvement (infrarouge) | Numérique (0/1) | Alarme, éclairage |
| MPU-6050 | Accélération, gyroscope | I2C (numérique) | Stabilisation, fitness |
| MQ-135 | Qualité de l'air | Analogique | Dé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
# 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
| Protocole | Portée | Débit | Conso | Usage |
|---|---|---|---|---|
| WiFi | 50-100 m | Élevé | Haute | Domotique, caméras |
| Bluetooth LE | 10-50 m | Moyen | Très faible | Wearables, beacons |
| Zigbee | 10-100 m | Faible | Très faible | Domotique (mesh) |
| LoRa | 2-15 km | Très faible | Très faible | Agriculture, ville |
| NB-IoT | 10+ km | Faible | Faible | Compteurs, 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
}- • 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
