Joyeux Halloween avec un Raspberry Pi et Pi-Lite

Joyeux Halloween avec un Raspberry Pi et Pi-Lite

C’est cette période de l’année où les inventeurs fous commencent à créer des projets électroniques sur le thème d’Halloween. Je n’ai jamais réussi à m’organiser pour faire un projet saisonnier mais cette année j’ai décidé de me lancer.

Alors cette année, j’ai décidé de prendre ce que j’ai appris sur le Pi-Lite et de créer un projet d’Halloween simple que je peux coller dans la fenêtre à côté de nos citrouilles sculptées plus traditionnelles.

Cet article fait suite à mes précédents articles Pi-Lite :

TExemple Pi-Lite Happy HalloweenPour recréer ce projet, vous aurez besoin de :

  • Raspberry Pi
  • Pi-Lite
  • Carte SD (j’ai utilisé la dernière image Raspbian)
  • Source de courant
  • Mon script Python

Script Python

Le script suivant affichera un objet animé puis fera défiler « Happy Halloween ! à travers l’écran. Il se répète jusqu’à ce que CTRL-C soit enfoncé.

#!/usr/bin/env python

import sys
import serial
import time

# Define lists which contain frames of animations
face   = ['000000000000000000010011000011000100011000110000010110000110110000110110000010110011000110011000100010011000000000000000000000',
          '000000000000000000010000011011000110011000110000010110000110110000110110000010110011000110011000110010000011000000000000000000']
bat    = ['010000000011000000001100000000110000110110000011111011001111100001111100011111011110110000000110000001100000011000000010000000',
          '000000100000001100000011000000110000110110001011111010001111100001111100011111010110110001000110000000011000000001100000000100']
ghost  = ['000000000000000000000011111001100001010000010100100010100000001100100001100000010010000010001100001000011111000000000000000000',
          '000000000000000000000011111001100010010000010100000001100100001100000010100100010010000001001100001000011111000000000000000000']
spider = ['001001000010010010100100101010101000001011110000111001000111000000111000000111001001011110010101000100100101010010010001001000',
          '010010010100100101101001000100101010011011101000111000000111000000111000000111000011011101100101010101001000100100101010010010']

# Combine into dictionary object
objects = {'face':face,'bat':bat,'ghost':ghost,'spider':spider}

# Define text message to scroll
message = "Happy Halloween !r"

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

def showObject(name,count,delay):
  # Function to display frames from a specified object
  # name  - object to display
  # count - number of times to display object
  # delay - ms to wait between frames
  object = objects[name]for x in range(count):
    for frame in range(len(object)):
      command = "$$$F" + object[frame]+ "r"
      s.write(command)
      time.sleep(delay)
  # Clear display
  s.write("$$$ALL,OFFr")

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

# Turn off all LEDs
s.write("$$$ALL,OFFr")
time.sleep(0.5)

try:

  while True:
    # Get list of object names from dictionary
    mykeys = objects.keys()

    # Loop through each object
    for x in range(len(mykeys)):
      showObject(mykeys[x],5,0.5)
      time.sleep(1)
      s.write(message)
      # Wait for scrolling message
      time.sleep(8)

except KeyboardInterrupt:
  print("Quit")

Voici une vidéo du script en action :

YouTube video

Téléchargements de scripts

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

wget https://bitbucket.org/MattHawkinsUK/rpispy-pi-lite/raw/master/pi_lite_happy_halloween.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

Modifications

Il existe de nombreuses façons de modifier et d’améliorer ce script. Vous pouvez modifier le message de défilement, mais assurez-vous d’ajuster le délai « time.sleep » pour qu’il corresponde. Il y a plus de détails sur la façon dont j’estime ce temps dans mon message texte défilant hello world. À titre d’estimation approximative, il s’agit de 0,5 seconde par caractère dans votre message.

Vous pouvez également ajouter d’autres objets en définissant de nouvelles listes et en les ajoutant au dictionnaire. Pour générer la chaîne de 126 caractères pour chaque image, vous pouvez utiliser mon générateur de sprite matriciel à LED 14 × 9 (s’ouvre dans une nouvelle fenêtre/un nouvel onglet).

Joyeux Halloween!