.. 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: 1.1.4 Affichage à 7 segments ================================== Introduction ------------------- Essayons de piloter un afficheur à 7 segments pour afficher un chiffre de 0 à 9 et de A à F. Composants nécessaires -------------------------------- Dans ce projet, nous avons besoin des composants suivants. .. image:: ../img/list_7_segment.png Il est certainement pratique d'acheter un kit complet, voici le lien : .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nom - ÉLÉMENTS 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 connexion ------------------------ Connectez la broche ST_CP du 74HC595 au GPIO18 du Raspberry Pi, SH_CP au GPIO27, DS au GPIO17, et les ports de sortie parallèles aux 8 segments de l'afficheur LED. Les données d'entrée dans la broche DS sont envoyées au registre de décalage lorsque SH_CP (l'entrée d'horloge du registre de décalage) est sur le front montant, et au registre de mémoire lorsque ST_CP (l'entrée d'horloge de la mémoire) est sur le front montant. Ensuite, vous pouvez contrôler les états de SH_CP et de ST_CP via les GPIOs du Raspberry Pi pour transformer l'entrée de données série en sortie de données parallèles afin d'économiser les GPIOs du Raspberry Pi et de piloter l'affichage. ============ ======== ======== === Nom T-Board Physique wiringPi BCM GPIO17 Pin 11 0 17 GPIO18 Pin 12 1 18 GPIO27 Pin 13 2 27 ============ ======== ======== === .. image:: ../img/schematic_7_segment.png Procédures expérimentales ------------------------------ **Étape 1 :** Construisez le circuit. .. image:: ../img/image73.png **Étape 2 :** Accédez au dossier du code. .. raw:: html .. code-block:: cd ~/raphael-kit/python/ **Étape 3 :** Exécutez. .. raw:: html .. code-block:: sudo python3 1.1.4_7-Segment.py Après l'exécution du code, vous verrez l'affichage à 7 segments afficher les chiffres de 0 à 9, puis de A à F. **Code** .. note:: Vous pouvez **Modifier/Réinitialiser/Copier/Exécuter/Arrêter** le code ci-dessous. Mais avant cela, vous devez aller dans le chemin du code source comme ``raphael-kit/python``. 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 import RPi.GPIO as GPIO import time # Configuration des broches SDI = 17 RCLK = 18 SRCLK = 27 # Define a segment code from 0 to F in Hexadecimal segCode = [0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71] def setup(): GPIO.setmode(GPIO.BCM) GPIO.setup(SDI, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(RCLK, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(SRCLK, GPIO.OUT, initial=GPIO.LOW) # Shift the data to 74HC595 def hc595_shift(dat): for bit in range(0, 8): GPIO.output(SDI, 0x80 & (dat << bit)) GPIO.output(SRCLK, GPIO.HIGH) time.sleep(0.001) GPIO.output(SRCLK, GPIO.LOW) GPIO.output(RCLK, GPIO.HIGH) time.sleep(0.001) GPIO.output(RCLK, GPIO.LOW) def main(): while True: # Shift the code one by one from segCode list for code in segCode: hc595_shift(code) print ("segCode[%s]: 0x%02X"%(segCode.index(code), code)) # %02X means double digit HEX to print time.sleep(0.5) def destroy(): GPIO.cleanup() if __name__ == '__main__': setup() try: main() except KeyboardInterrupt: destroy() **Explication du Code** .. code-block:: python segCode = [0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71] Un tableau de codes de segments de 0 à F en Hexadécimal (Cathode commune). .. code-block:: python def setup(): GPIO.setmode(GPIO.BCM) GPIO.setup(SDI, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(RCLK, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(SRCLK, GPIO.OUT, initial=GPIO.LOW) Définissez les trois broches ds, st_cp, sh_cp en sortie et l'état initial à un niveau bas. .. code-block:: python GPIO.output(SDI, 0x80 & (dat << bit)) Attribue les données dat à SDI(DS) par bits. Supposons ici que dat=0x3f(0011 1111), lorsque bit=2, 0x3f se décalera vers la droite (<<) de 2 bits. 1111 1100 (0x3f << 2) & 1000 0000 (0x80) = 1000 0000, est vrai. .. code-block:: python GPIO.output(SRCLK, GPIO.HIGH) La valeur initiale de SRCLK a été définie à LOW, et ici elle est définie à HIGH, ce qui permet de générer une impulsion de front montant, puis de décaler les données DS vers le registre de décalage. .. code-block:: python GPIO.output(RCLK, GPIO.HIGH) La valeur initiale de RCLK a été définie à LOW, et ici elle est définie à HIGH, ce qui permet de générer un front montant, puis de transférer les données du registre de décalage au registre de stockage. .. note:: Le format hexadécimal des chiffres 0~15 est (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F) **Image du Phénomène** .. image:: ../img/image74.jpeg