.. note:: Bonjour et bienvenue dans la Communauté Facebook des passionnés de Raspberry Pi, Arduino et ESP32 de SunFounder ! Plongez plus profondément dans l'univers des Raspberry Pi, Arduino et ESP32 avec d'autres passionnés. **Pourquoi rejoindre ?** - **Support d'experts** : Résolvez les problèmes après-vente et les défis techniques avec l'aide de notre communauté et de notre équipe. - **Apprendre et partager** : Échangez des astuces et des tutoriels pour améliorer vos compétences. - **Aperçus exclusifs** : Accédez en avant-première aux annonces de nouveaux produits et aux aperçus. - **Réductions spéciales** : Profitez de réductions exclusives sur nos produits les plus récents. - **Promotions festives et cadeaux** : Participez à des cadeaux et des promotions de vacances. 👉 Prêt à explorer et à créer avec nous ? Cliquez [|link_sf_facebook|] et rejoignez-nous aujourd'hui ! .. _1.1.4_py_pi5: 1.1.4 Afficheur 7 segments =============================== Introduction ------------------- Essayons de piloter un afficheur 7 segments pour afficher les chiffres de 0 à 9 et les lettres de A à F. Composants nécessaires -------------------------------- Dans ce projet, nous avons besoin des composants suivants. .. image:: ../python_pi5/img/1.1.4_7_segment_list.png Il est très pratique d'acheter un kit complet, voici le lien : .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nom - ARTICLES DANS CE KIT - LIEN * - Kit Raphael - 337 - |link_Raphael_kit| Vous pouvez également les acheter séparément via les liens ci-dessous. .. list-table:: :widths: 30 20 :header-rows: 1 * - INTRODUCTION AUX COMPOSANTS - LIEN D'ACHAT * - :ref:`cpn_gpio_extension_board` - |link_gpio_board_buy| * - :ref:`cpn_breadboard` - |link_breadboard_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_resistor` - |link_resistor_buy| * - :ref:`cpn_7_segment` - |link_7segment_buy| * - :ref:`cpn_74hc595` - |link_74hc595_buy| Schéma de montage ----------------------- Connectez la broche ST_CP du 74HC595 au GPIO18 du Raspberry Pi, SH_CP au GPIO27, DS au GPIO17, les ports de sortie parallèle aux 8 segments de l'afficheur LED. Entrez les données dans la broche DS vers le registre à décalage lorsque SH_CP (l'entrée d'horloge du registre à décalage) est à la montée, et vers le registre de mémoire lorsque ST_CP (l'entrée d'horloge de la mémoire) est à la montée. Vous pouvez alors contrôler les états de SH_CP et ST_CP via les GPIOs du Raspberry Pi pour transformer l'entrée de données série en sortie de données parallèle afin de sauvegarder les GPIOs du Raspberry Pi et piloter l'afficheur. ============ ======== === Nom T-Board Physique 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édures expérimentales ------------------------------ **Étape 1 :** Construire le circuit. .. image:: ../python_pi5/img/1.1.4_7-Segment_circuit.png **Étape 2 :** Accéder au dossier du code. .. raw:: html .. code-block:: cd ~/raphael-kit/python-pi5 **Étape 3 :** Exécuter. .. raw:: html .. code-block:: sudo python3 1.1.4_7-Segment_zero.py Après l'exécution du code, vous verrez l'afficheur 7 segments afficher 0-9, A-F. .. warning:: Si vous recevez le message d'erreur ``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 ``raphael-kit/python-pi5``. Après avoir modifié le code, vous pouvez l'exécuter directement pour voir l'effet. Après avoir confirmé qu'il n'y a pas de problèmes, vous pouvez utiliser le bouton Copier pour copier le code modifié, puis ouvrir le code source dans Terminal via la commande ``nano`` et le coller. .. raw:: html .. code-block:: python #!/usr/bin/env python3 from gpiozero import OutputDevice from time import sleep # GPIO pins connected to 74HC595 shift register SDI = OutputDevice(17) # Serial Data Input RCLK = OutputDevice(18) # Memory Clock Input (Register Clock) SRCLK = OutputDevice(27) # Shift Register Clock # Hexadecimal digit codes for a common cathode 7-segment display segCode = [ 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 ] def hc595_shift(data): # Shift 8 bits of data into the 74HC595 for bit in range(8): # Set SDI high or low based on data bit SDI.value = 0x80 & (data << bit) # Trigger shift register clock SRCLK.on() sleep(0.001) SRCLK.off() # Latch data to output by triggering memory clock RCLK.on() sleep(0.001) RCLK.off() def display_all_on(): # Function to turn all segments on (for common cathode 7-segment display) all_on_code = 0x3f hc595_shift(all_on_code) print("Displaying all segments on") try: while True: # Display each hexadecimal digit on 7-segment display for code in segCode: hc595_shift(code) # Shift the code into 74HC595 # Print the displayed segment code print(f"Displaying segCode[{segCode.index(code)}]: 0x{code:02X}") sleep(0.5) # Pause between displaying each digit except KeyboardInterrupt: # Gracefully handle script interruption (e.g., Ctrl+C) pass **Explication du Code** #. Ce snippet importe les classes nécessaires pour le 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 aux broches d'entrée de données série, d'entrée d'horloge de mémoire (horloge de registre) et d'horloge de registre à décalage du 74HC595. .. code-block:: python # GPIO pins connected to 74HC595 shift register SDI = OutputDevice(17) # Serial Data Input RCLK = OutputDevice(18) # Memory Clock Input (Register Clock) SRCLK = OutputDevice(27) # Shift Register Clock #. ``segCode`` est un tableau contenant les codes hexadécimaux pour chaque chiffre à afficher sur l'afficheur 7 segments. .. code-block:: python # Hexadecimal digit codes for a common cathode 7-segment display 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 saisit chaque bit en série dans ``SDI``, bascule ``SRCLK`` pour décaler le bit et utilise ``RCLK`` pour verrouiller les données à la sortie. .. code-block:: python def hc595_shift(data): # Shift 8 bits of data into the 74HC595 for bit in range(8): # Set SDI high or low based on data bit SDI.value = 0x80 & (data << bit) # Trigger shift register clock SRCLK.on() sleep(0.001) SRCLK.off() # Latch data to output by triggering memory clock 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(): # Function to turn all segments on (for common cathode 7-segment display) all_on_code = 0x3f hc595_shift(all_on_code) print("Displaying all segments on") #. Dans la boucle principale, chaque code dans ``segCode`` est envoyé à l'afficheur en séquence, avec un délai entre chaque affichage. .. code-block:: python try: while True: # Display each hexadecimal digit on 7-segment display for code in segCode: hc595_shift(code) # Shift the code into 74HC595 # Print the displayed segment code print(f"Displaying segCode[{segCode.index(code)}]: 0x{code:02X}") sleep(0.5) # Pause between displaying each digit #. Cette partie du code gère gracieusement l'interruption du script (comme Ctrl+C). .. code-block:: python except KeyboardInterrupt: # Gracefully handle script interruption (e.g., Ctrl+C) pass