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