Exemple de sprites personnalisés de carte matricielle LED Pi-Lite

Exemple de sprites personnalisés de carte matricielle LED Pi-Lite

Carte matricielle LED Pi-LiteDans mon article précédent sur le Pi-Lite, j’ai expliqué comment le configurer et comment afficher du texte défilant en Python. Dans cet article, je vais vous expliquer comment créer des images 14×9 personnalisées, puis les envoyer au Pi-Lite. C’est la même technique que celle utilisée pour créer l’image Pac Man à droite.

Le Pi-Lite dispose d’une fonction de tampon de trame qui vous permet de lui envoyer des données qui déterminent l’état de chaque LED. Vous pouvez régler chaque LED pour qu’elle soit allumée ou éteinte et une fois toutes vos données reçues, le Pi-Lite règle les LED comme indiqué.

Cette commande est une chaîne de 126 uns et zéros. La chaîne définit la LED en haut à gauche, puis descend la première colonne. Il définit ensuite la seconde et ainsi de suite jusqu’à ce que les 126 LED aient été réglées sur 1 ou 0.

Exemple de script Python

Voici un exemple de script Python qui définit deux sprites, les affiche puis se ferme.

#!/usr/bin/env python

import sys
import serial
import time

# Define two sprites
sprite1 = '000000000000000000000011110000100010111001001100100101010010101010010101100100101111001001000100010000011110000000000000000000'
sprite2 = '000000000000000000000000000000011111011111111111111111110011111110011111111111111011111111000011111000000000000000000000000000'

# Configure Pi serial port
s = serial.Serial()
s.baudrate = 9600
s.timeout = 0
s.port = "/dev/ttyAMA0"

try:
    # Open serial port
    s.open()
except serial.SerialException, e:
    # There was an error
    sys.stderr.write("could not open port %r: %sn" % (port, e))
    sys.exit(1)

print "Serial port ready"

# Clear display
s.write("$$$ALL,OFFr")

# Send Sprite 1 to the Pi-Lite
print "Sprite 1"
s.write('$$$F' + sprite1 + 'r')

# Short delay
time.sleep(2)

# Send Sprite 2 to the Pi-Lite
print "Sprite 2"
s.write('$$$F' + sprite2 + 'r')

# Short delay
time.sleep(2)

# Quit
print "Good bye"

La chaîne de sprite de 126 caractères a « $$$F » ajouté au début et un retour chariot ajouté à la fin pour former une commande Pi-Lite complète. Cette commande est envoyée au Pi-Lite via le port série du Pi en utilisant la commande « s.write » comme nous l’avons fait pour l’exemple de texte défilant.

Exemple d’animation avec deux images

Dans l’exemple ci-dessous, deux cadres sont définis à l’aide d’une liste Python. Nous pouvons afficher un cadenas[0] et cadenas[1] en réponse à l’utilisateur appuyant sur Entrée. Il utilise la même technique que ci-dessus pour envoyer les images au Pi-Lite mais cette fois dans une boucle While.

La première image est une simple image de cadenas. Le deuxième cadre est un cadenas déverrouillé.

#!/usr/bin/env python
import sys
import serial
import time

# Define padlock list containing two sprites
padlock = ['000000000000000000000000000000011111011111111111111111110011111110011111111111111011111111000011111000000000000000000000000000',
            '011100000111100000110000000110011111111111111011111111000011111000011111000011111000011111000011111000000000000000000000000000']

# Define list to describe each sprite
description = ['Locked','Unlocked']

# Configure Pi serial port
s = serial.Serial()
s.baudrate = 9600
s.timeout = 0
s.port = "/dev/ttyAMA0"

try:
    # Open serial port
    s.open()
except serial.SerialException, e:
    # There was an error
    sys.stderr.write("could not open port %r: %sn" % (port, e))
    sys.exit(1)

print "Serial port ready"

# Clear display
s.write("$$$ALL,OFFr")

# Initialise some variables
loop  = True
frame = 0

while loop:

    s.write('$$$F' + padlock[frame]+ 'r')
    print description[frame]inp = raw_input("Press [Enter] to toggle padlock. [x-Enter] to quit.")

    if inp.lower()!="x":
      # Toggle frame to display
      frame = 1 - frame
    else:
      # Exit loop
      loop = False

# Quit
print "Good bye"

Vous pouvez envoyer des images au Pi-Lite sans aucune intervention de l’utilisateur ou combiner des sprites personnalisés avec du texte défilant. Les possibilités sont infinies.

Création de Sprite en toute simplicité

Penser aux sprites et taper 126 caractères n’est pas facile. Les dessiner sur du papier millimétré ne facilite pas beaucoup les choses. Donc, pour accélérer le processus, j’ai créé un outil en ligne qui vous permet de dessiner votre image à l’aide de la souris. La chaîne de 126 caractères est générée automatiquement et vous pouvez ensuite la coller dans votre script Python.

L’interface de l’outil ressemble à ceci :

Générateur de Sprite Pi-Lite

Cliquez sur l’image pour accéder à l’outil de sprite. Je l’ai utilisé pour créer les sprites utilisés dans les exemples Python ci-dessus. Avec un peu d’imagination et d’expérimentation, vous pouvez créer des dessins et des animations intéressants.

Créez vos propres images et coupez-collez le contenu de la zone de texte dans les exemples de scripts. Vous pouvez toujours créer des listes Python plus grandes pour stocker plus de cadres.

Bien que le Pi-Lite soit de taille limitée, c’est un excellent moyen de créer un système d’affichage à l’aide d’un Raspberry Pi. C’est génial d’avoir la possibilité de créer vos propres sprites et de les combiner avec du texte défilant avec un minimum de code ou de matériel.

Téléchargements de scripts

Plutôt que de copier-coller le code ci-dessus, vous pouvez également télécharger les deux scripts directement sur votre Pi en utilisant :

wget https://bitbucket.org/MattHawkinsUK/rpispy-pi-lite/raw/master/pi_lite_custom_1.py

et :

wget https://bitbucket.org/MattHawkinsUK/rpispy-pi-lite/raw/master/pi_lite_custom_2.py

Ou si vous utilisez Git sur votre Pi, récupérez tous mes exemples de scripts Pi-Lite en clonant mon référentiel Pi-Lite sur BitBucket :

git clone https://bitbucket.org/MattHawkinsUK/rpispy-pi-lite.git