Comment utiliser le panneau matriciel LED couleur Waveshare RGB pour Raspberry Pi Pico – Partie 2

Comment Utiliser Le Panneau Matriciel Led Couleur Waveshare Rgb Pour

Il s’agit de la deuxième partie de notre didacticiel en deux parties sur l’utilisation du panneau matriciel LED couleur Waveshare RGB pour le Raspberry Pi Pico.

Dans la première partie, nous vous avons montré comment afficher les couleurs de base, afficher les valeurs et afficher l’heure. Dans cette partie, nous allons vous montrer comment :

  • Faites défiler du texte coloré et des valeurs numériques sur l’écran à l’aide d’un jeu de caractères étendu
  • Afficher les lectures de capteur d’un capteur de température BME680

Ce dont vous aurez besoin

Pour la partie 2, vous aurez besoin de tout de la partie 1 plus :

Il existe également d’autres parties facultatives mentionnées dans cet article au cas où vous voudriez essayer certains des projets suggérés.

Faire défiler une chaîne de caractères sur l’écran

Exemple de matrice de LED RGB Waveshare

Cela s’est avéré beaucoup plus facile que nous ne le pensions, et une seule procédure était nécessaire. Nous téléchargé une police ASCII 5×8 standard depuis GitHub qui fonctionnait parfaitement. Malheureusement, les 255 caractères qu’il contient prennent pas mal de place donc le programme fait plus de 450 lignes.

Voir https://www.ascitable.com/ pour plus d’informations. ASCII signifie American Standard Code for Information Interchange.

Tu peux télécharger le programme de démonstration ici.

Chaque caractère de la police est composé de 5 octets qui sont affichés verticalement, de gauche à droite, avec le bit le moins significatif en haut, ce qui simplifie le défilement. La police est conservée sous la forme d’une longue liste d’octets appelée FONT.

La procédure se décompose en deux parties :

  1. Prenez la chaîne de caractères et transformez-la en une liste d’octets. Ajoutez des espaces au début et à la fin pour que le message arrive de la droite et défile complètement hors de l’écran à gauche. Insérez un seul pixel vide entre chaque caractère.
  2. Parcourez la liste en affichant les octets verticalement sur l’écran, en les déplaçant lentement de droite à gauche. Cela nécessite des boucles imbriquées.
def scroll(msg,r,g,b): # Scroll a string across the screen
    # Convert message to list of bytes to be displayed vertically
    lines = []
    msg1 = " " + msg + "      " # Add spaces at front and back
    cc=(r,g,b)              # Neopixel colour
    for ch in(msg1):        # Get a character
        asc = ord(ch)       # Get its ACSII value
        code =asc * 5       # Calculate start position in font list
        for ii in range(5): # Get the 5 vertical lines for each character
            line = FONT[code + ii]
            lines.append(line)  # Add line to the list
        lines.append(0x00)  # Insert 1 pixel space between characters

    # Scroll from the list of lines
    pos = 0  # List pointer to start
    line_length = len(lines)           # Length of the bytes list
    while pos < (line_length-16):      # Loop until last character shifted off the left side
        for i in range(16):            # Loop across the screen
            line = lines[i+pos]        # Get current vertical byte column
            for yy in range(8):        # Pixels in the column in turn
                if (line >> yy) & 0x1: # Is it a 1 ?
                    xy_set(i,yy+1,cc)  # Coloured pixel if 1
                else:
                    xy_set(i,yy+1,(0,0,0)) # Black pixel if 0
        pixels_show()                      # Update display
        time.sleep(0.1)                # Delay to slow things down
        pos = pos + 1                  # Increment list pointer

La dernière nouvelle fonction écrit un seul caractère fixe à l’écran.

def character(asc,xx,r,g,b):
    # Display single ascii character at position xx, coloured (r,b,g)
    cc = (r,g,b)
    code = asc *5
    for ii in range(5):
        line = FONT[code + ii]
        for yy in range(8):
            if (line >> yy) & 0x1:
                xy_set(ii+xx,yy+1,cc)
            else:
                xy_set(ii+xx,yy+1,(0,0,0))
    pixels_show()

Le programme principal montre une chaîne de texte défilant avec plusieurs messages montrant différentes sections du jeu de caractères étendu. Les lettres grecques et les symboles mathématiques sont inclus.

Ceci est suivi d’une section où l’utilisateur est invité à entrer des valeurs ASCII, via le clavier, dans la plage de 0 à 255 pour visualiser le caractère. Entrer -999 arrêtera cette section. Cliquez sur le curseur dans la fenêtre Shell de Thonny à la fin de la demande d’entrée pour commencer à saisir les valeurs. La valeur d’entrée est interceptée pour exclure les valeurs hors plage et non entières. Les valeurs ACSII valides affichent le symbole de caractère et la valeur ASCII en hexadécimal, car il n’y a pas assez de place pour la valeur en Denary.

Enfin, s’ensuit un affichage assez lent de tous les personnages disponibles – certains plus utiles que d’autres !

Choses à essayer

  • Ajoutez un potentiomètre 10K ohm et un interrupteur à bouton comme périphériques d’entrée (voir pages 53 et 96 dans le livre Get Started with MicroPython on Raspberry Pi Pico). Vous aurez besoin d’utiliser une planche à pain et les connexions inférieures de l’écran pour connecter les choses (le livre couvre également cela – page 96 pour le potentiomètre et page 53 pour le bouton)
  • Ajustez la plage d’entrée du potentiomètre pour qu’elle soit de zéro à 255
  • Affichez le numéro sur l’écran et faites-le changer lorsque vous tournez le bouton du potentiomètre
  • Pendant que le bouton est enfoncé, affichez le caractère de texte avec la valeur ASCII du potentiomètre sur l’écran dans une couleur différente au lieu du nombre. Retour au numéro lorsque le bouton est relâché
  • Arrêtez la boucle et arrêtez le programme si le bouton est appuyé sur 255 (un troisième caractère – d’autres à 0 et 32.)

Afficher les lectures de capteur d’un capteur BME680

Matrice LED couleur RVB Waveshare pour Pico exemple 2 avec BME680

Connexions

Ceci est facilement réalisé à l’aide d’un Pico Decker et de fils de liaison :

  • Broche SDI/SDA vers GP0
  • Broche SCL vers GP1
  • Broche 2-6V à 3.3V
  • GND à GND

Téléchargez la bibliothèque BME680 à partir d’ici. Enregistrez-le dans le dossier lib sur le Pico (dans Thonny, cliquez sur Affichage -> Fichiers, si cette fenêtre n’est pas visible) :

Le programme de démonstration peut être téléchargé ici.

Le programme

La section suivante est incluse avec le reste des importations au début du script, avant les définitions de procédure :

from bme680 import *
i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=400000)    #initializing the I2C method 
bme = BME680_I2C(i2c=i2c)

La partie principale du programme est assez simple car tout le gros du travail est fait par la bibliothèque, les polices et les procédures définies précédemment :

# =========== Main ==========
while True:
    clear()
    t = str(round(bme.temperature, 2)) + ' '+chr(248)+'C'
    h = str(round(bme.humidity, 2)) + ' %'
    p = str(round(bme.pressure, 2)) + ' hPa'
    g = str(round(bme.gas/1000, 2)) + ' K' + chr(234)

    scroll("Temperature:"+t,100,0,0)
    scroll("Humidity: "+h,0,0,100)
    scroll("Pressure: "+p,0,100,0)
    scroll("GAS: "+g,140,0,145)

Voici une vidéo de celui-ci en action:

YouTube video

Les valeurs ‘chr()’ sont pour le symbole de degré et le caractère Omega pour les ohms.

Choses à essayer

Échangez le capteur BME680 contre le module de capteur d’environnement Waveshare pour Pico et faites défiler les différentes données de capteur des capteurs intégrés :

  • Capteur BME280 avec température, humidité et pression
  • Capteur de lumière ambiante numérique TSL25911FN, pour mesurer la lumière infrarouge et visible
  • Capteur LTR390-UV-1 pour mesurer les rayons UV
  • Essayez un capteur SGP40 (pour détecter la qualité de l’air ambiant/COV)

Tous les pilotes de périphériques nécessaires sont inclus dans le wiki de l’appareil trouvé ici.

A propos de l’auteur

Cet article a été écrit par Thomas. Thomas est un professeur d’informatique à la retraite qui a commencé à écrire du code en 1968 alors que cela s’appelait programmation – il a commencé avec FORTRAN IV sur un IBM 1130 ! Membre actif de la communauté Raspberry Pi, ses principaux centres d’intérêt sont désormais le codage en MicroPython, les voyages et la photographie.

  • Waveshare RGB Full-Color LED Matrix Panel 2mm Pitch 64x64 Pixels Adjustable Brightness Compatible with Raspberry Pi/Raspberry Pi Pico / ESP32 / Arduino
    Compatible with Raspberry Pi / Raspberry Pi Pico / ESP32 / Arduino. Chainable design,multi LED matrix panel can be chained together to build a larger panel via HUB75 input/output header. Usage scenarios,DIY maker desktop or wall mount display, signboard, environment monitor.
  • Waveshare RGB Full-Color LED Matrix Panel for Raspberry Pi Pico 16×10 RGB LEDs
    Standard Raspberry Pi Pico header, supports Raspberry Pi Pico series. 160 RGB LEDs arranged in 16×10 grid, multiple IO selection Right-angled 2.54mm pitch male pinheader on the bottom, for easy extension 0807 colorful LEDs, integrating quality single wire cascading constant current driver IC and quality RGB LED chip, aka external-controlled constant current integrated LEDs Embedded controller IC, with features like high reliability, high anti-interference performance, high constant current accuracy, and low power consumption Integrated quality LED chip, with high consistent brightness and pure white light effect, lower light degradation. Comes with development resources and manual (Raspberry Pi Pico C/C++ and MicroPython examples)
  • Panneau matriciel LED RVB en couleur compatible avec Raspberry Pi / Raspberry Pi Pico / ESP32 / Arduino Pas de 2,5 mm 64 x 32 pixels Luminosité réglable
    ✨ Ce produit est un écran matriciel LED couleur 64 × 32, avec 2048 LED RVB à bord, pas de 2,5 mm, compatible avec Raspberry Pi, Arduino, ESP32, etc. ✨ Il fournit des démonstrations et des tutoriels open source, adapté pour les fabricants ou les amateurs d'électronique qui commencent à apprendre, ou le bricolage secondaire ✨ Dimensions de 160 x 80 mm, taille moyenne, adaptée pour un affichage de bureau ou un support mural. ✨Deux en-têtes HUB75 intégrés, un pour l'entrée de données du contrôleur, un pour la sortie et le support de chaîne. ✨Fournit des ressources de développement open source (exemples pour RPi / RPi Pico / ESP32).