.. note:: Bonjour, bienvenue dans la communauté SunFounder Raspberry Pi, Arduino et ESP32 sur Facebook ! Plongez plus profondément dans le monde du Raspberry Pi, Arduino et ESP32 avec d'autres passionnés. **Pourquoi nous rejoindre ?** - **Support d'experts** : Résolvez les problèmes après-vente et relevez les défis techniques grâce à notre communauté et notre équipe. - **Apprendre & Partager** : Échangez des astuces et des tutoriels pour développer vos compétences. - **Aperçus exclusifs** : Accédez en avant-première aux nouvelles annonces de produits. - **Réductions spéciales** : Bénéficiez de réductions exclusives sur nos produits les plus récents. - **Promotions festives et cadeaux** : Participez à des promotions spéciales et à des tirages au sort. 👉 Prêt à explorer et créer avec nous ? Cliquez sur [|link_sf_facebook|] et rejoignez-nous dès aujourd'hui ! .. _1.1.4_py_pi5: 1.1.4 Affichage 7 segments ============================= Introduction ------------- Nous allons essayer de contrôler un afficheur 7 segments pour afficher des chiffres de 0 à 9 et des lettres de A à F. Composants nécessaires -------------------------- Pour ce projet, nous aurons besoin des composants suivants. .. image:: ../python_pi5/img/1.1.4_7_segment_list.png .. raw:: html
Schéma de câblage -------------------- Connectez la broche ST_CP du 74HC595 au GPIO18 du Raspberry Pi, SH_CP au GPIO27, DS au GPIO17, et les sorties parallèles aux 8 segments de l'afficheur 7 segments. Les données sont entrées sur la broche DS du registre à décalage lorsque SH_CP (l'entrée d'horloge du registre) est en montée, et sont envoyées au registre de mémoire lorsque ST_CP (l'entrée d'horloge de la mémoire) est en montée. Vous pouvez ensuite contrôler les états de SH_CP et ST_CP via les GPIO du Raspberry Pi pour transformer l'entrée de données série en sortie de données parallèles, afin d'économiser les GPIO du Raspberry Pi et piloter l'afficheur. ============ ======== === T-Board Name physical BCM GPIO17 Pin 11 17 GPIO18 Pin 12 18 GPIO27 Pin 13 27 ============ ======== === .. image:: ../python_pi5/img/1.1.4_7_segment_schematic.png Procédure expérimentale ---------------------------- **Étape 1 :** Construisez le circuit. .. image:: ../python_pi5/img/1.1.4_7-Segment_circuit.png **Étape 2 :** Accédez au dossier contenant le code. .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/python-pi5 **Étape 3 :** Exécutez le programme. .. raw:: html .. code-block:: sudo python3 1.1.4_7-Segment.py Après l'exécution du code, vous verrez l'afficheur 7 segments afficher les chiffres de 0 à 9, puis les lettres de A à F. .. warning:: Si un message d'erreur apparaît tel que ``RuntimeError: Cannot determine SOC peripheral base address``, veuillez consulter :ref:`faq_soc`. **Code** .. note:: Vous pouvez **Modifier/Réinitialiser/Copier/Exécuter/Arrêter** le code ci-dessous. Mais avant cela, vous devez accéder au chemin source du code comme ``davinci-kit-for-raspberry-pi/python-pi5``. Après modification, vous pouvez l'exécuter directement pour observer le résultat. Une fois vérifié qu'il n'y a pas de problème, utilisez le bouton Copier pour copier le code modifié, puis ouvrez le code source dans le Terminal via la commande ``nano`` et collez-le. .. raw:: html .. code-block:: python #!/usr/bin/env python3 from gpiozero import OutputDevice from time import sleep # Broches GPIO connectées au registre à décalage 74HC595 SDI = OutputDevice(17) # Entrée de données série RCLK = OutputDevice(18) # Entrée d'horloge de la mémoire (registre) SRCLK = OutputDevice(27) # Horloge de décalage du registre # Codes hexadécimaux pour un afficheur 7 segments à cathode commune segCode = [ 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 ] def hc595_shift(data): # Décale 8 bits de données dans le 74HC595 for bit in range(8): # Définit SDI à haut ou bas selon le bit de donnée SDI.value = 0x80 & (data << bit) # Déclenche l'horloge du registre de décalage SRCLK.on() sleep(0.001) SRCLK.off() # Verrouille les données en déclenchant l'horloge de mémoire RCLK.on() sleep(0.001) RCLK.off() def display_all_on(): # Fonction pour allumer tous les segments (afficheur 7 segments à cathode commune) all_on_code = 0x3f hc595_shift(all_on_code) print("Displaying all segments on") try: while True: # Affiche chaque chiffre hexadécimal sur l'afficheur 7 segments for code in segCode: hc595_shift(code) # Transfère le code dans le 74HC595 # Affiche le code segmenté print(f"Displaying segCode[{segCode.index(code)}]: 0x{code:02X}") sleep(0.5) # Pause entre chaque affichage except KeyboardInterrupt: # Gère proprement l'interruption du script (ex. Ctrl+C) pass **Explication du code** #. Ce snippet importe les classes nécessaires au projet. ``OutputDevice`` de ``gpiozero`` est utilisé pour contrôler les composants matériels connectés aux broches GPIO, et ``sleep`` de ``time`` est utilisé pour ajouter des délais. .. code-block:: python #!/usr/bin/env python3 from gpiozero import OutputDevice from time import sleep #. SDI, RCLK et SRCLK correspondent respectivement aux broches d'entrée de données série, d'horloge mémoire et d'horloge de décalage du 74HC595. .. code-block:: python # Broches GPIO connectées au registre à décalage 74HC595 SDI = OutputDevice(17) # Entrée de données série RCLK = OutputDevice(18) # Entrée d'horloge de la mémoire (registre) SRCLK = OutputDevice(27) # Horloge de décalage du registre #. ``segCode`` est un tableau contenant les codes hexadécimaux pour chaque chiffre à afficher sur l'afficheur 7 segments. .. code-block:: python # Codes hexadécimaux pour un afficheur 7 segments à cathode commune segCode = [ 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 ] #. Cette fonction décale 8 bits de données dans le 74HC595. Elle entre chaque bit dans ``SDI``, déclenche ``SRCLK`` pour décaler le bit, puis utilise ``RCLK`` pour verrouiller les données. .. code-block:: python def hc595_shift(data): # Décale 8 bits de données dans le 74HC595 for bit in range(8): # Définit SDI à haut ou bas selon le bit de donnée SDI.value = 0x80 & (data << bit) # Déclenche l'horloge du registre de décalage SRCLK.on() sleep(0.001) SRCLK.off() # Verrouille les données en déclenchant l'horloge de mémoire RCLK.on() sleep(0.001) RCLK.off() #. Cette fonction allume tous les segments de l'afficheur en envoyant un code spécifique à ``hc595_shift``. .. code-block:: python def display_all_on(): # Fonction pour allumer tous les segments (afficheur 7 segments à cathode commune) all_on_code = 0x3f hc595_shift(all_on_code) print("Displaying all segments on") #. La boucle principale envoie chaque code de ``segCode`` à l'afficheur, avec un délai entre chaque affichage. .. code-block:: python try: while True: # Affiche chaque chiffre hexadécimal sur l'afficheur 7 segments for code in segCode: hc595_shift(code) # Transfère le code dans le 74HC595 # Affiche le code segmenté print(f"Displaying segCode[{segCode.index(code)}]: 0x{code:02X}") sleep(0.5) # Pause entre chaque affichage #. Cette partie du code gère proprement l'interruption du script (ex. Ctrl+C). .. code-block:: python except KeyboardInterrupt: # Gère proprement l'interruption du script (ex. Ctrl+C) pass