Blog der Heimetli Software AG

Sound mit GPIOs abspielen

Ich hatte ein Script für einen Eingang gepostet, aber immer wieder wurden mehrere Eingaenge verlangt.

Dieses Script überwacht 5 GPIOs. Es ist aber nicht auf diese fünf limitiert, sondern kann fast beliebig erweitert werden.

Die GPIOs sind in einem Array abgelegt, so dass sie nach Lust und Laune ausgetauscht werden können. Das Script übernimmt die Anzahl der Eingänge vom Array.

Die Namen der Files sind ebenfalls in einem Array zu finden. Für jeden Eingang sollte es auch einen Eintrag in diesem Array geben.

Fix eincodiert sind der Player, in diesem Fall der omxplayer, und der Pfad zu den Files. Zumindest diesen Pfad müssen Sie vermutlich anpassen.

Das Script geht davon aus, dass sich am Eingang ein Pullup-Widerstand gegen 3.3V, und ein Taster oder Schalter gegen Masse befindet. Falls Sie eine Schaltung mit Pulldown haben, können Sie den Pegel in der if-Bedingung ändern.

Das Script detektiert Wechsel der GPIOs vom inaktiven in den aktiven Zustand. Nur bei diesem Uebergang wird das File abgespielt. Wenn Sie das File so lange spielen wollen wie der Eingang anliegt, dann löschen Sie das entsprechende if aus dem Programm.

Das Script

#!/bin/bash

# List of the GPIOs
pins=(17 18 22 23 24)

# List of the files to play
files=(Duck.wav Owl.wav Horse.wav Rooster.wav Crickets.wav)

# Initialize the GPIOs and read the initial state
for i in ${!pins[*]}
do
  if [ ! -e /sys/class/gpio/gpio${pins[$i]} ]
  then
    echo ${pins[$i]} > /sys/class/gpio/export
  fi

  echo in > /sys/class/gpio/gpio${pins[$i]}/direction
  states[$i]=$(cat /sys/class/gpio/gpio${pins[$i]}/value)
done

# Watch the GPIOs
while true
do
  for i in ${!pins[*]}
  do
    state=$(cat /sys/class/gpio/gpio${pins[$i]}/value)

    if [ "$state" -ne "${states[$i]}" ]
    then
      states[$i]=$state

      # An active switch will pull the input down
      if [ "$state" -eq "0" ]
      then
        # Feel free to use another player or to
        # change the path to your sound files
        omxplayer /usr/share/scratch/Media/Sounds/Animal/${files[$i]}
      fi
    fi
  done

  # Allow the CPU to cool down
  sleep 0.2
done

Download

Mit diesem Link Script für Sound per GPIO können Sie das File auf Ihre Maschine herunterladen.

Starten

Stellen Sie sicher, dass das File ausführbar ist:

chmod 755 play

Starten Sie es mit sudo, weil der Zugriff auf die GPIOs erhöhte Rechte braucht:

sudo ./play

Drücken Sie die Tasten und erfreuen Sie sich am Sound :-)