Comment contrôler ou éteindre l’éclairage d’un écran TFT (LCD) sous Raspberry Pi : Guide Technique Complet

Vous utilisez un écran TFT (LCD) connecté à votre Raspberry Pi et souhaitez le contrôler ou réduire sa luminosité pour économiser de l’énergie ou améliorer votre expérience utilisateur ? Voici une solution technique détaillée, adaptée aux débutants comme aux experts, pour gérer l’alimentation et la luminosité de votre écran via logiciel ou matériel.

Introduction

Les écrans TFT (comme ceux des kits Raspberry Pi ou des modules LCD 2.8″ à 7″) sont souvent alimentés en permanence, ce qui peut générer une consommation électrique inutile. Heureusement, plusieurs méthodes existent pour les éteindre partiellement ou totalement, ou pour ajuster leur luminosité. Nous allons explorer deux approches :

  1. La méthode logicielle via backlight (pour les écrans avec contrôle PWM intégré).
  2. La méthode matérielle avec un relais ou un transistor (pour les écrans sans contrôle logiciel).

Ces solutions sont compatibles avec les écrans basés sur des contrôleurs comme le ILI9341, SSD1289, ou T6963, couramment utilisés dans les kits Raspberry Pi.


🛠️ LE MATÉRIEL REQUIS

  • Un Raspberry Pi (toutes versions, mais testé principalement sur Pi 3/4/Zero 2 W).
  • Un écran TFT LCD connecté via GPIO (avec ou sans contrôleur dédié).
  • Pour la méthode logicielle : Aucune pièce supplémentaire (si l’écran supporte le backlight PWM).
  • Pour la méthode matérielle :
    • Un relais opto-isolé (ex: MOC3021 + BS170) ou un transistor NPN (ex: 2N2222).
    • Une résistance de 1kΩ (pour le transistor).
    • Un câble de connexion GPIO libre (ex: GPIO 17 ou 22).
  • Un adaptateur d’alimentation 5V/3A (si votre écran nécessite plus de courant).
  • Un multimètre (optionnel, pour vérifier les tensions).

MÉTHODE 1 : CONTRÔLE LOGICIEL DU BACKLIGHT (PWM)

Cette méthode fonctionne si votre écran TFT est alimenté via un backlight contrôlable en PWM (Modulation de Largeur d’Impulsion). La plupart des écrans Raspberry Pi officiels ou des modules comme le Waveshare ou Adafruit le supportent.

Étape 1 : Vérifier la compatibilité de votre écran

Connectez votre écran à un Raspberry Pi et exécutez la commande suivante pour lister les dispositifs backlight disponibles :

sudo cat /sys/class/backlight/

Si vous voyez un dossier comme backlight ou lcd-backlight, votre écran supporte le contrôle logiciel. Notez le nom du dossier (ex: lcd-backlight).

Étape 2 : Tester le contrôle de luminosité

Accédez au dossier du backlight et vérifiez les fichiers disponibles :

cd /sys/class/backlight/lcd-backlight/
ls

Vous devriez voir brightness et max_brightness. Pour éteindre l’écran, exécutez :

echo 0 | sudo tee brightness

Pour le rallumer à 50% de luminosité (si max_brightness est 255) :

echo 128 | sudo tee brightness

Étape 3 : Automatiser avec un script

Créez un script Bash pour contrôler l’écran depuis le terminal ou un raccourci. Exemple :

#!/bin/bash
BACKLIGHT_DIR="/sys/class/backlight/lcd-backlight"
MAX_BRIGHTNESS=$(cat $BACKLIGHT_DIR/max_brightness)
case "$1" in
    "off")
        echo 0 | sudo tee $BACKLIGHT_DIR/brightness
        ;;
    "on")
        echo $MAX_BRIGHTNESS | sudo tee $BACKLIGHT_DIR/brightness
        ;;
    "50%")
        echo $((MAX_BRIGHTNESS / 2)) | sudo tee $BACKLIGHT_DIR/brightness
        ;;
    *)
        echo "Usage: $0 {off|on|50%}"
        ;;
esac

Rendez-le exécutable :

chmod +x control_backlight.sh

Exécutez-le avec :

./control_backlight.sh off

Étape 4 : Intégrer à votre système (optionnel)

Pour éteindre l’écran à l’économie ou au réveil, modifiez le fichier de configuration de la lumière d’écran (si vous utilisez lightdm ou lxde) ou créez un service système. Exemple avec systemd :

sudo nano /etc/systemd/system/lcd-backlight.service

Collez ce contenu (à adapter) :

[Unit]
Description=LCD Backlight Control
[Service]
Type=oneshot
ExecStart=/usr/local/bin/control_backlight.sh off
ExecStop=/usr/local/bin/control_backlight.sh on
[Install]
WantedBy=multi-user.target

Activez le service :

sudo systemctl enable lcd-backlight.service

Pour éteindre l’écran au démarpage (ex: après 30 secondes d’inactivité) :

sudo systemctl start lcd-backlight

MÉTHODE 2 : CONTRÔLE MATÉRIEL AVEC RELAIS OU TRANSISTOR

Si votre écran ne supporte pas le contrôle logiciel (ex: écran personnalisé sans backlight PWM), vous pouvez couper l’alimentation du backlight via un relais ou un transistor. Cette méthode est plus invasive mais universelle.

Étape 1 : Identifier les fils du backlight

Désconnectez l’écran et repérez les fils du backlight (généralement un fil rouge pour +5V et un fil noir pour GND). Utilisez un multimètre en mode continuité pour confirmer.

Étape 2 : Schéma de connexion avec transistor

Voici un schéma simple pour couper l’alimentation du backlight avec un transistor NPN (2N2222) :

Schéma transistor backlight

Explications :

  • Le collecteur du transistor est connecté à +5V (alimentation de l’écran).
  • L’émetteur est connecté au fil rouge du backlight.
  • La base est connectée à un GPIO via une résistance de 1kΩ.
  • Le GND du transistor est relié à la masse du Raspberry Pi.

Quand vous envoyez HIGH sur le GPIO (ex: GPIO 17), le transistor s’allume et alimente le backlight. Pour l’éteindre, envoyez LOW.

Étape 3 : Code Python pour contrôler le transistor

Installez la bibliothèque RPi.GPIO si ce n’est pas déjà fait :

sudo apt update && sudo apt install python3-rpi.gpio

Créez un script Python :

#!/usr/bin/env python3
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)  # GPIO utilisé pour le transistor
def backlight_on():
    GPIO.output(17, GPIO.HIGH)
def backlight_off():
    GPIO.output(17, GPIO.LOW)
# Exemple d'utilisation
backlight_off()
print("Backlight éteint")
time.sleep(5)
backlight_on()
print("Backlight allumé")

Rendez-le exécutable et testez-le :

chmod +x control_backlight.py
sudo ./control_backlight.py

Étape 4 : Automatisation avancée

Pour une gestion plus intelligente (ex: éteindre après inactivité), utilisez la bibliothèque pyautogui pour détecter l’activité de la souris/claviers :

sudo apt install python3-pyautogui

Exemple de script avec détection d’inactivité :

#!/usr/bin/env python3
import RPi.GPIO as GPIO
import time
import pyautogui
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
last_activity = time.time()
inactivity_timeout = 30  # secondes
def check_activity():
    global last_activity
    try:
        pyautogui.position()
        last_activity = time.time()
    except:
        pass
def backlight_control():
    while True:
        check_activity()
        if time.time() - last_activity > inactivity_timeout:
            GPIO.output(17, GPIO.LOW)
            print("Backlight éteint (inactivité détectée)")
        else:
            GPIO.output(17, GPIO.HIGH)
        time.sleep(1)
if __name__ == "__main__":
    try:
        backlight_control()
    except KeyboardInterrupt:
        GPIO.output(17, GPIO.HIGH)
        GPIO.cleanup()

Exécutez-le en arrière-plan avec nohup :

sudo nohup python3 backlight_auto.py &

MÉTHODE 3 : SOLUTIONS LOGICIELLES AVANCÉES

Pour une intégration plus poussée, vous pouvez utiliser des outils comme lightdm (pour les environnements graphiques) ou des scripts système.

Éteindre l’écran à l’économie (lightdm)

Si vous utilisez LightDM (interface de connexion graphique), modifiez le fichier de configuration pour éteindre l’écran après un certain temps d’inactivité :

sudo nano /etc/lightdm/lightdm.conf

Ajoutez ou modifiez ces lignes :

[Seat:*]
xserver-command=X -s 0 -dpms

Redémarrez LightDM :

sudo systemctl restart lightdm

Utiliser xset pour gérer la luminosité (X11)

Si votre écran est géré par X11, vous pouvez utiliser xset pour réduire la luminosité (si le pilote le permet) :

xset dpms force off  # Éteint l’écran
xset dpms force on   # Relance l’écran

Pour une gestion plus fine, utilisez xrandr (si votre écran est reconnu) :

xrandr --output HDMI-1 --brightness 0.5  # Ajuste la luminosité à 50%

DÉPANNAGE

Problème : L’écran ne répond pas au contrôle logiciel

  • Vérifiez que votre écran est bien reconnu par le système (ex: ls /sys/class/backlight/).
  • Testez avec un autre écran TFT pour isoler le problème.
  • Mettez à jour votre noyau Raspberry Pi :
  •     sudo rpi-update
        sudo reboot
        

Problème : Le transistor ne coupe pas l’alimentation

  • Vérifiez les connexions (multimètre en mode continuité).
  • Assurez-vous que le GPIO envoie bien HIGH/LOW (testez avec un oscilloscope ou un autre script).
  • Si le courant est trop élevé, utilisez un relais opto-isolé (ex: MOC3021) pour isoler le Raspberry Pi.

Problème : L’écran clignote ou bugge

  • Désactivez le contrôle du backlight temporairement pour vérifier.
  • Vérifiez les câbles HDMI/GPIO pour un mauvais contact.
  • Réinitialisez les paramètres de l’écran avec sudo apt install raspberrypi-bootloader et sudo rpi-eeprom-update -a.

CONCLUSION

Vous avez maintenant trois méthodes pour contrôler ou éteindre votre écran TFT sous Raspberry Pi :

  1. Le contrôle logiciel via backlight (simple et efficace pour les écrans compatibles).
  2. Le contrôle matériel avec transistor/relais (universel mais plus technique).
  3. Les solutions logicielles avancées (pour une intégration système).

Choisissez la méthode qui correspond le mieux à votre écran et à vos compétences. Pour une solution clé en main, la méthode 1 est recommandée si votre écran le supporte. Sinon, la méthode 2 offre une flexibilité totale.

N’hésitez pas à partager vos retours ou adaptations sur les forums communautaires, et à consulter la documentation officielle de Raspberry Pi pour des détails supplémentaires.


Ce tutoriel a été rédigé en réponse à un besoin technique identifié sur les forums communautaires. La solution d’ingénierie a été développée par le Laboratoire SolarLogik.

« `

    <div style="background:#f0f8ff; border:2px solid #1e73be; border-radius:12px; padding:25px; margin-top:40px; text-align:center;">
        <h3 style="margin-top:0; color:#1e73be;">🛒 Le Coin du Maker</h3>
        <p style="margin-bottom:20px; font-size:14px;">Les indispensables pour ce projet :</p>
        <div style="display:flex; justify-content:center; gap:10px; flex-wrap:wrap;">
           <a href="https://www.amazon.fr/s?k=domotique+zigbee&tag=solarlogik-21" target="_blank" style="background:#2c3e50; color:white; padding:8px 12px; border-radius:5px; text-decoration:none; font-weight:bold;">Domotique</a>
           <a href="https://www.amazon.fr/s?k=raspberry+pi+5&tag=solarlogik-21" target="_blank" style="background:#1e73be; color:white; padding:8px 12px; border-radius:5px; text-decoration:none; font-weight:bold;">Raspberry Pi</a>
           <a href="https://www.amazon.fr/s?k=kit+solaire+plug+play&tag=solarlogik-21" target="_blank" style="background:#2c3e50; color:white; padding:8px 12px; border-radius:5px; text-decoration:none; font-weight:bold;">Solaire</a>
           <a href="https://www.amazon.fr/s?k=outillage+electricien&tag=solarlogik-21" target="_blank" style="background:#1e73be; color:white; padding:8px 12px; border-radius:5px; text-decoration:none; font-weight:bold;">Outillage</a>
        </div>
        <p style="font-size:10px; color:#999; margin-top:15px;">Liens affiliés Amazon (Soutien gratuit).</p>
    </div>

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *