56 lines
1.2 KiB
Bash
56 lines
1.2 KiB
Bash
#!/bin/bash
|
|
|
|
# Utility to control the GPIO pins of the Raspberry Pi
|
|
# Can be called as a script or sourced so that the gpio
|
|
# function can be called directly
|
|
|
|
function gpio()
|
|
{
|
|
local verb=$1
|
|
local pin=$2
|
|
local value=$3
|
|
|
|
local pins=($GPIO_PINS)
|
|
if [[ "$pin" -lt ${#pins[@]} ]]; then
|
|
local pin=${pins[$pin]}
|
|
fi
|
|
|
|
local gpio_path=/sys/class/gpio
|
|
local pin_path=$gpio_path/gpio$pin
|
|
|
|
case $verb in
|
|
read)
|
|
cat $pin_path/value
|
|
;;
|
|
|
|
write)
|
|
sudo sh -c "echo $value > $pin_path/value"
|
|
;;
|
|
|
|
mode)
|
|
if [ ! -e $pin_path ]; then
|
|
sudo sh -c "echo $pin > $gpio_path/export"
|
|
fi
|
|
sudo sh -c "echo $value > $pin_path/direction"
|
|
;;
|
|
|
|
state)
|
|
if [ -e $pin_path ]; then
|
|
local dir=$(cat $pin_path/direction)
|
|
local val=$(cat $pin_path/value)
|
|
echo "$dir $val"
|
|
fi
|
|
;;
|
|
clean)
|
|
sudo sh -c "echo 0 > $pin_path/value"
|
|
sudo sh -c "echo $pin > $gpio_path/unexport"
|
|
;;
|
|
|
|
esac
|
|
}
|
|
|
|
# Just invoke our function if the script is called directly
|
|
if [ "$BASH_SOURCE" == "$0" ]; then
|
|
gpio $@
|
|
fi
|