.. 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.2_py: 1.1.2 LED RVB ==================== Introduction -------------- Dans ce projet, nous allons contrôler une LED RVB pour qu'elle clignote en différentes couleurs. Composants nécessaires ------------------------------ Dans ce projet, nous avons besoin des composants suivants. .. image:: ../img/list_rgb_led.png :align: center Il est certainement 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 DES 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_rgb_led` - |link_rgb_led_buy| Schéma de câblage ----------------------- Après avoir connecté les broches de R, G et B à une résistance de limitation de courant, connectez-les respectivement aux GPIO17, GPIO18 et GPIO27. La broche la plus longue (GND) de la LED se connecte à la masse (GND) du Raspberry Pi. Lorsque les trois broches reçoivent différentes valeurs PWM, la LED RVB affichera différentes couleurs. ============== ======== ======== === Nom du T-Board physique wiringPi BCM GPIO17 Pin 11 0 17 GPIO18 Pin 12 1 18 GPIO27 Pin 13 2 27 ============== ======== ======== === .. image:: ../img/rgb_led_schematic.png Procédures expérimentales ---------------------------- **Étape 1 :** Montez le circuit. .. image:: ../img/image61.png **Étape 2 :** Ouvrez le fichier de code. .. raw:: html .. code-block:: cd ~/raphael-kit/python **Étape 3 :** Exécutez. .. raw:: html .. code-block:: sudo python3 1.1.2_rgbLed.py Après l'exécution du code, vous verrez que la LED RVB affiche du rouge, vert, bleu, jaune, rose et cyan. **Code** .. note:: Vous pouvez **Modifier/Réinitialiser/Copier/Exécuter/Arrêter** le code ci-dessous. Mais avant cela, vous devez vous rendre dans le chemin source du code comme ``raphael-kit/python``. Après avoir modifié le code, vous pouvez l'exécuter directement pour voir l'effet. .. raw:: html .. code-block:: python import RPi.GPIO as GPIO import time # Set up a color table in Hexadecimal COLOR = [0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF] # Set pins' channels with dictionary pins = {'Red':17, 'Green':18, 'Blue':27} def setup(): global p_R, p_G, p_B GPIO.setmode(GPIO.BCM) # Set all LedPin's mode to output and initial level to High(3.3v) for i in pins: GPIO.setup(pins[i], GPIO.OUT, initial=GPIO.HIGH) p_R = GPIO.PWM(pins['Red'], 2000) p_G = GPIO.PWM(pins['Green'], 2000) p_B = GPIO.PWM(pins['Blue'], 2000) p_R.start(0) p_G.start(0) p_B.start(0) # Define a MAP function for mapping values. Like from 0~255 to 0~100 def MAP(x, in_min, in_max, out_min, out_max): return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min # Define a function to set up colors def setColor(color): # configures the three LEDs' luminance with the inputted color value. R_val = (color & 0xFF0000) >> 16 G_val = (color & 0x00FF00) >> 8 B_val = (color & 0x0000FF) >> 0 # Map color value from 0~255 to 0~100 R_val = MAP(R_val, 0, 255, 0, 100) G_val = MAP(G_val, 0, 255, 0, 100) B_val = MAP(B_val, 0, 255, 0, 100) # Change the colors p_R.ChangeDutyCycle(R_val) p_G.ChangeDutyCycle(G_val) p_B.ChangeDutyCycle(B_val) print ("color_msg: R_val = %s, G_val = %s, B_val = %s"%(R_val, G_val, B_val)) def main(): while True: for color in COLOR: setColor(color)# change the color of the RGB LED time.sleep(0.5) def destroy(): # Stop all pwm channel p_R.stop() p_G.stop() p_B.stop() # Release resource GPIO.cleanup() if __name__ == '__main__': setup() try: main() except KeyboardInterrupt: destroy() **Explication du code** .. code-block:: python p_R = GPIO.PWM(pins['Red'], 2000) p_G = GPIO.PWM(pins['Green'], 2000) p_B = GPIO.PWM(pins['Blue'], 2000) p_R.start(0) p_G.start(0) p_B.start(0) Appelez la fonction ``GPIO.PWM()`` pour définir les broches PWM pour le rouge, le vert et le bleu et régler la fréquence des broches PWM à 2000Hz, puis utilisez la fonction ``Start()`` pour régler le cycle de service initial à zéro. .. code-block:: python def MAP(x, in_min, in_max, out_min, out_max): return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min Définissez une fonction MAP pour mapper les valeurs. Par exemple, x=50, in_min=0, in_max=255, out_min=0, out_max=100. Après le mappage de la fonction map, elle renvoie ``(50-0) * (100-0)/(255-0) +0=19.6``, ce qui signifie que 50 dans 0-255 équivaut à 19,6 dans 0-100. .. code-block:: python def setColor(color): R_val = (color & 0xFF0000) >> 16 G_val = (color & 0x00FF00) >> 8 B_val = (color & 0x0000FF) >> 0 Configurez la luminance des trois LEDs avec la valeur de couleur entrée, attribuez les deux premières valeurs de l'hexadécimal à R_val, les deux valeurs du milieu à G_val, les deux dernières valeurs à B_val. Par exemple, si color=0xFF00FF, R_val=(0xFF00FF & 0xFF0000)>> 16 = 0xFF, G_val = 0x00, B_val=0xFF. .. code-block:: python R_val = MAP(R_val, 0, 255, 0, 100) G_val = MAP(G_val, 0, 255, 0, 100) B_val = MAP(B_val, 0, 255, 0, 100) Utilisez la fonction map pour mapper les valeurs R,G,B entre 0 et 255 dans la plage de cycle de service PWM de 0 à 100. .. code-block:: python p_R.ChangeDutyCycle(R_val) p_G.ChangeDutyCycle(G_val) p_B.ChangeDutyCycle(B_val) Attribuez la valeur du cycle de service mappée au canal PWM correspondant pour modifier la luminance. .. code-block:: python for color in COLOR: setColor(color) time.sleep(0.5) Attribuez chaque élément de la liste COLOR à la couleur respectivement et changez la couleur de la LED RVB via la fonction ``setColor()``. Photo du phénomène ------------------------ .. image:: ../img/image62.jpeg