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 [Ici] et rejoignez-nous aujourd’hui !

4.1.13 Générateur de code Morse

Introduction

Dans ce projet, nous allons créer un générateur de code Morse, où vous saisirez une série de lettres anglaises dans le Raspberry Pi pour qu’elles soient converties en code Morse.

Composants nécessaires

Pour ce projet, nous avons besoin des composants suivants.

../_images/4.1.16_morse_code_generator_list.png

Il est certainement pratique d’acheter un kit complet, voici le lien :

Nom

ARTICLES DANS CE KIT

LIEN

Kit Raphael

337

Raphael Kit

Vous pouvez également les acheter séparément via les liens ci-dessous.

INTRODUCTION DU COMPOSANT

LIEN D’ACHAT

Carte d’extension GPIO

ACHETER

Plaque d’expérimentation (Breadboard)

ACHETER

Fils de Liaison

ACHETER

Résistance

ACHETER

LED

ACHETER

Buzzer

-

Transistor

ACHETER

Schéma

Nom T-Board

physique

wiringPi

BCM

GPIO17

Pin 11

0

17

GPIO22

Pin 15

3

22

../_images/4.1.16_morse_code_generator_schematic.png

Procédures expérimentales

Étape 1 : Construire le circuit. (Attention aux pôles du buzzer : celui avec l’étiquette + est le pôle positif et l’autre est le négatif.)

../_images/4.1.16_morse_code_generator_circuit.png

Étape 2 : Ouvrir le fichier de code.

cd ~/raphael-kit/python-pi5

Étape 3 : Exécuter.

sudo python3 4.1.16_MorseCodeGenerator_zero.py

Après le démarrage du programme, tapez une série de caractères, et le buzzer ainsi que la LED enverront les signaux correspondants en code Morse.

Avertissement

Si vous recevez le message d’erreur RuntimeError: Cannot determine SOC peripheral base address, veuillez consulter Si « gpiozero » ne fonctionne pas.

Code

#!/usr/bin/env python3
from gpiozero import Buzzer, LED
import time

# Initialize Buzzer and LED to GPIO pins
BeepPin = Buzzer(22)
ALedPin = LED(17)

# Morse code representation for characters
MORSECODE = {
    'A': '01', 'B': '1000', 'C': '1010', 'D': '100', 'E': '0', 'F': '0010', 'G': '110',
    'H': '0000', 'I': '00', 'J': '0111', 'K': '101', 'L': '0100', 'M': '11', 'N': '10',
    'O': '111', 'P': '0110', 'Q': '1101', 'R': '010', 'S': '000', 'T': '1',
    'U': '001', 'V': '0001', 'W': '011', 'X': '1001', 'Y': '1011', 'Z': '1100',
    '1': '01111', '2': '00111', '3': '00011', '4': '00001', '5': '00000',
    '6': '10000', '7': '11000', '8': '11100', '9': '11110', '0': '11111',
    '?': '001100', '/': '10010', ',': '110011', '.': '010101', ';': '101010',
    '!': '101011', '@': '011010', ':': '111000',
}

def on():
    """ Turn on the buzzer and LED. """
    BeepPin.on()
    ALedPin.on()

def off():
    """ Turn off the buzzer and LED. """
    BeepPin.off()
    ALedPin.off()

def beep(dt):  # dt for delay time.
    """
    Produce a beep sound and LED flash for the specified duration.
    :param dt: Duration for the beep and flash.
    """
    on()
    time.sleep(dt)
    off()
    time.sleep(dt)

def morsecode(code):
    """
    Convert the input code into Morse code and signal it using the buzzer and LED.
    :param code: The text to be converted to Morse code.
    """
    pause = 0.25
    for letter in code:
        for tap in MORSECODE[letter]:
            if tap == '0':
                beep(pause / 2)  # Short beep for dot
            if tap == '1':
                beep(pause)      # Long beep for dash
        time.sleep(pause)  # Pause between letters

def destroy():
    """ Clean up resources on script termination. """
    print("")
    BeepPin.off()
    ALedPin.off()

try:
    while True:
        code = input("Please input the messenger:")
        code = code.upper()  # Convert to uppercase for Morse code lookup
        print(code)
        morsecode(code)
except KeyboardInterrupt:
    destroy()

Explication du code

  1. Ce code importe les classes Buzzer et LED de la bibliothèque gpiozero. Ces classes sont essentielles pour contrôler les dispositifs GPIO correspondants sur le Raspberry Pi.

    #!/usr/bin/env python3
    from gpiozero import Buzzer, LED
    import time
    
  2. Initialise le buzzer sur la broche GPIO 22 et la LED sur la broche GPIO 17, facilitant le contrôle de ces composants.

    # Initialize Buzzer and LED to GPIO pins
    BeepPin = Buzzer(22)
    ALedPin = LED(17)
    
  3. Définit la structure MORSE, un dictionnaire contenant les représentations en code Morse pour les caractères de A à Z, les nombres de 0 à 9, et des symboles comme “?”, “/”, “:”, “,”, “.”, “;”, “!”, “@”, avec 0 signifiant un point et 1 indiquant un tiret.

    # Morse code representation for characters
    MORSECODE = {
        'A': '01', 'B': '1000', 'C': '1010', 'D': '100', 'E': '0', 'F': '0010', 'G': '110',
        'H': '0000', 'I': '00', 'J': '0111', 'K': '101', 'L': '0100', 'M': '11', 'N': '10',
        'O': '111', 'P': '0110', 'Q': '1101', 'R': '010', 'S': '000', 'T': '1',
        'U': '001', 'V': '0001', 'W': '011', 'X': '1001', 'Y': '1011', 'Z': '1100',
        '1': '01111', '2': '00111', '3': '00011', '4': '00001', '5': '00000',
        '6': '10000', '7': '11000', '8': '11100', '9': '11110', '0': '11111',
        '?': '001100', '/': '10010', ',': '110011', '.': '010101', ';': '101010',
        '!': '101011', '@': '011010', ':': '111000',
    }
    
  4. La fonction on() démarre le buzzer et la LED. La fonction off() est utilisée pour éteindre le buzzer et la LED.

    def on():
        """ Turn on the buzzer and LED. """
        BeepPin.on()
        ALedPin.on()
    
    def off():
        """ Turn off the buzzer and LED. """
        BeepPin.off()
        ALedPin.off()
    
  5. Définit une fonction beep() pour faire émettre au buzzer et à la LED des sons et des clignotements à un certain intervalle de dt.

    def beep(dt):  # dt for delay time.
        """
        Produce a beep sound and LED flash for the specified duration.
        :param dt: Duration for the beep and flash.
        """
        on()
        time.sleep(dt)
        off()
        time.sleep(dt)
    
  6. La fonction morsecode() est utilisée pour traiter le code Morse des caractères entrés en faisant émettre des sons ou des lumières pour les “1” du code et brièvement pour les “0”, par exemple, en entrant “SOS”, il y aura un signal contenant trois courts, trois longs puis trois courts segments “ · · · - - - · · · ”.

    def morsecode(code):
        """
        Convert the input code into Morse code and signal it using the buzzer and LED.
        :param code: The text to be converted to Morse code.
        """
        pause = 0.25
        for letter in code:
            for tap in MORSECODE[letter]:
                if tap == '0':
                    beep(pause / 2)  # Short beep for dot
                if tap == '1':
                    beep(pause)      # Long beep for dash
            time.sleep(pause)  # Pause between letters
    
  7. Defines a function named destroy that turns off both the buzzer and the LED. This function is intended to be called when the script is terminated to ensure that the GPIO pins are not left in an active state.

    def destroy():
        """ Clean up resources on script termination. """
        print("")
        BeepPin.off()
        ALedPin.off()
    
  8. When you type the relevant characters with the keyboard, upper() will convert the input letters to their capital form. printf() then prints the clear text on the computer screen, and the morsecod() function causes the buzzer and the LED to emit Morse code.

    try:
        while True:
            code = input("Please input the messenger:")
            code = code.upper()  # Convert to uppercase for Morse code lookup
            print(code)
            morsecode(code)
    except KeyboardInterrupt:
        destroy()