Développement embarqué en C/C++ sur la carte Raspberry Pi
Objectifs pédagogiques
- Prendre en main le Raspberry Pi pour installer une distribution standard (Raspberry OS).
- Ajuster et configurer le système en fonction de ses besoins spécifiques.
- Développer des applications personnalisées et performantes pour Linux embarqué en C/C++ et en utilisant la bibliothèque pigpio.
- Maîtriser la communication avec les interfaces offertes par la Raspberry Pi
- Maîtriser la programmation parallèle pour le contexte des applications embarquées
- Développer et ajouter des drivers supplémentaires (modules noyau).
Travaux pratiques
Mise en pratique sur un kit Raspberry Pi 3
Prise en main du Raspberry Pi
- Introduction : présentation du Raspberry Pi, des systems-on-chip BCM2835/2836/2837 et du processeur Arm 1176.
- Distribution Linux pour Raspberry Pi : téléchargement, installation, test.
- Découverte de la distribution : paramètres essentiels, outils standard.
- Utilisation de base : configuration système, utilisateurs, interface graphique.
- Utilisation de Linux sur Raspberry Pi : avantages et inconvénient d’un système sur carte SD.
Travaux pratiques
Installation et test d’une distribution standard sur Raspberry Pi et configuration headless de la carte
Configuration et personnalisation
- Réseau : configuration du réseau (Ethernet+WiFi), Internet, connexion distante.
- Services réseau : démarrage des services, choix adapté à un système embarqué : configuration des services DHCP et de partage de fichiers avec SAMBA
- Mise à jour : installation de paquets, mise à jour.
- Serveurs : configuration d’un serveur Web sur le Raspberry Pi.
Travaux pratiques
Configuration optimale du système, du réseau et des services.
Programmation applicative en C/C++ sur Raspberry Pi
- Programmation en C/C++ : compilation native ou compilation croisée, débogage
- Installation et configuration d’une chaîne de compilation croisée
- Débogage distant avec GDB
- Configuration d’Eclipse IDE pour la compilation croisée, débogage et déploiement
- Principales bibliothèques pour le développement en C/C++
Travaux pratiques
Configuration d’Eclipse IDE
Entrées-sorties
- Utilisation depuis le Shell des Entrées-sorties GPIO
- Utilisation de la bibliothèque pigpio
- Interruptions et GPIO : détection des changements d’état d’une GPIO.
- Génération d’un signal PWM
Travaux pratiques
Manipulation des entrées sorties avec des programmes écrits en C/C++ : récupération de la température et l’humidité avec le capteur DHT11 (avec et sans interruptions), extension des GPIO en utilisant le registre série-parallèle 74HC595
Communication
- Communication série avec l’UART : connexion avec PC, traces de boot, communication
- SPI : dialogue en SPI
- Le bus I²C
- Bluetooth : identification, connexion, communication.
Travaux pratiques
Développement de plusieurs programmes utilisant les différentes interfaces de communication : lecteur de carte RFID, communication entre Raspberry Pi et Arduino Uno (UART et SPI), Capteur MCP9808 sur I2C, écran LCD 16×2 sur le bus I2C, etc.
Programmation concurrentielle
- Threads et Mutexes
- Utilisation de la bibliothèque pthread (POSIX threads)
- Les apports de C++17 pour la programmation multi-threadée
Travaux pratiques
Exploitation des threads pour réaliser des application gérant efficacement plusieurs tâches
Personnalisation avancée
- Recompilation du noyau : intérêts de la recompilation, configuration ajustée.
- Drivers supplémentaires : compilation et d’installation de drivers externes.
- Développement et installation d’un driver
Travaux pratiques
Ajout de drivers supplémentaires (extension des GPIO).