Ce guide complet et détaillé, pas à pas, est conçu pour vous accompagner dans la mise en place de votre projet entre Windows, VS Code et votre Raspberry Pi 3 (sous la dernière version de Raspberry Pi OS, Bookworm, sans interface graphique).
Vue d’ensemble du projet
- Connexion distante : Utiliser VS Code sur Windows pour coder directement sur le Raspberry Pi via le protocole SSH.
- Le Matériel : Une LED externe branchée sur une broche GPIO (par exemple la broche GPIO 17) et une résistance.
- Le Logiciel : Un serveur web léger en Python (avec Flask) écoutant sur le port 8888 pour proposer une page web avec des boutons de vitesse.
- L’Automatisation : Un service système (
systemd) pour que l’application démarre toute seule dès l’allumage du Raspberry Pi.

Étape 1 : Configuration initiale du Raspberry Pi (avec écran/clavier)
Puisque votre Raspberry Pi n’a pas d’interface graphique (OS « Lite »), branchez un écran et un clavier pour la toute première configuration :
- Au premier démarrage, connectez-vous avec votre nom d’utilisateur et votre mot de passe.
- Lancez l’outil de configuration :
Bashsudo raspi-config - Activez le SSH : Allez dans
Interface Options->SSH-> Activez-le (Yes). - Configurez le Wi-Fi (si nécessaire) : Allez dans
System Options->Wireless LANpour connecter votre Pi à votre réseau local. - Récupérez l’adresse IP locale du Pi :
Bashhostname -INotez cette adresse IP (par exemple192.168.1.50). Vous pouvez aussi utiliser son nom d’hôte par défaut (raspberrypi.local). - Vous pouvez maintenant débrancher l’écran et le clavier, la suite se fera entièrement depuis votre PC Windows !
Étape 2 : Connecter VS Code sous Windows au Raspberry Pi (Remote-SSH)
Pour coder sur le Pi comme s’il était dans votre PC :
- Sur votre PC Windows, ouvrez VS Code.
- Allez dans l’onglet des extensions (icône de carrés sur le côté ou
Ctrl + Shift + X), cherchez et installez Remote – SSH (de Microsoft). - Ouvrez le terminal de VS Code (ou l’invite de commande Windows) et générez une clé SSH (si ce n’est pas déjà fait) :
Bashssh-keygen(Appuyez sur Entrée à chaque étape pour valider les choix par défaut). - Copiez cette clé sur votre Raspberry Pi (remplacez
pipar votre nom d’utilisateur et l’IP par celle de votre Pi) :
Bashssh-copy-id pi@192.168.1.50Entrez votre mot de passe une dernière fois. Désormais, la connexion se fera sans mot de passe. - Dans VS Code, appuyez sur
F1(ouCtrl + Shift + P), tapez et sélectionnez :Remote-SSH: Connect to Host.... - Entrez :
pi@192.168.1.50(oupi@raspberrypi.local). - Une nouvelle fenêtre VS Code s’ouvre, connectée au Raspberry Pi. Ouvrez un dossier (ex:
/home/pi/projet_led) pour commencer à travailler.
Étape 3 : Installer les bibliothèques nécessaires sur le Pi
Sur le dernier Raspberry Pi OS (Bookworm), Python protège son système de paquets globaux. Le moyen le plus propre et recommandé pour installer Flask et la gestion des GPIO est d’utiliser les paquets officiels du système (apt).
Ouvrez le terminal intégré dans VS Code (qui est connecté au Pi) et tapez :
Bash
sudo apt update
sudo apt install -y python3-flask python3-gpiozero
python3-flask: Le mini-framework pour créer le serveur web.python3-gpiozero: La bibliothèque moderne et ultra-simple pour piloter les GPIO en Python.
Étape 4 : Créer le code du projet (Serveur Web + GPIO)
Créez l’arborescence de fichiers suivante dans votre espace de travail VS Code :
Plaintext
projet_led/
├── app.py
└── templates/
└── index.html
1. Le code HTML de la page web (templates/index.html)
Ce fichier contiendra les boutons permettant à l’utilisateur de choisir la vitesse de clignotement ou d’éteindre la LED.
HTML
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Contrôle LED Raspberry Pi</title>
<style>
body { font-family: Arial, sans-serif; text-align: center; margin-top: 50px; background-color: #f4f4f9; }
h1 { color: #333; }
.btn { padding: 15px 30px; font-size: 18px; margin: 10px; cursor: pointer; border: none; border-radius: 5px; color: white; }
.btn-slow { background-color: #3498db; }
.btn-med { background-color: #f1c40f; color: black; }
.btn-fast { background-color: #e74c3c; }
.btn-off { background-color: #2c3e50; }
</style>
</head>
<body>
<h1>Contrôle de la LED (Port 8888)</h1>
<p>Choisissez la vitesse de clignotement de la LED :</p>
<br>
<a href="/set/slow"><button class="btn btn-slow">Lent (1 sec)</button></a>
<a href="/set/medium"><button class="btn btn-med">Moyen (0.5 sec)</button></a>
<a href="/set/fast"><button class="btn btn-fast">Rapide (0.1 sec)</button></a>
<a href="/set/off"><button class="btn btn-off">Éteindre</button></a>
</body>
</html>
2. Le code Python du serveur (app.py)
Ce script gère les requêtes web et fait clignoter la LED en arrière-plan à l’aide de threads pour ne pas bloquer le serveur web.
Python
import threading
import time
from flask import Flask, render_template
from gpiozero import LED
app = Flask(__name__)
# Initialisation de la LED sur la broche GPIO 17 (BCM)
# Adaptez le numéro selon votre câblage physique
led = LED(17)
# Variable globale pour stocker la vitesse (intervalle de clignotement)
# None = éteint/statique
blink_speed = None
running = True
def blink_worker():
"""Fonction qui fait clignoter la LED en arrière-plan"""
global blink_speed
while running:
if blink_speed is not None:
led.on()
time.sleep(blink_speed)
led.off()
time.sleep(blink_speed)
else:
led.off()
time.sleep(0.1)
# Lancement du thread de clignotement
t = threading.Thread(target=blink_worker, daemon=True)
t.start()
@app.route('/')
def index():
return render_template('index.html')
@app.route('/set/<speed>')
def set_speed(speed):
global blink_speed
if speed == 'slow':
blink_speed = 1.0
elif speed == 'medium':
blink_speed = 0.5
elif speed == 'fast':
blink_speed = 0.1
elif speed == 'off':
blink_speed = None
led.off()
return render_template('index.html')
if __name__ == '__main__':
# Lancement du serveur sur le port 8888, accessible depuis n'importe quelle IP du réseau
app.run(host='0.0.0.0', port=8888)
3. Testez votre application manuellement
Dans le terminal de VS Code, lancez votre script :
Bash
python3 app.py
Ouvrez un navigateur web sur votre PC Windows et rendez-vous à l’adresse :
[http://192.168.1.50:8888](http://192.168.1.50:8888) (remplacez par l’IP de votre Pi). Vous devriez voir la page web et pouvoir contrôler votre LED externe en direct !
Étape 5 : Automatiser le démarrage au boot (Service Systemd)
Pour que votre script se lance tout seul dès que le Raspberry Pi s’allume, nous allons créer un service système.
- Créez un fichier de service systemd avec les privilèges administrateur :
Bashsudo nano /etc/systemd/system/webled.service - Collez la configuration suivante (adaptez le chemin
/home/pi/projet_led/app.pysi votre dossier a un autre nom) :
Ini, TOML[Unit] Description=Serveur Web Flask Controle LED GPIO After=network.target [Service] User=pi WorkingDirectory=/home/pi/projet_led ExecStart=/usr/bin/python3 /home/pi/projet_led/app.py Restart=always [Install] WantedBy=multi-user.target - Sauvegardez et quittez (
Ctrl + O, puisEntrée, puisCtrl + Xsous Nano). - Informez le système de l’existence de ce nouveau service, activez-le et démarrez-le :
Bashsudo systemctl daemon-reload sudo systemctl enable webled.service sudo systemctl start webled.service - Vérifiez que tout fonctionne bien :
Bashsudo systemctl status webled.serviceSi le statut indiqueactive (running), félicitations ! Votre application tourne en arrière-plan et redémarrera automatiquement même après une coupure de courant.