- # direction attribute only exists if the kernel supports changing the
- # direction of a GPIO
- if [ -e "${gpio_path}/direction" ]; then
- # set the pin to output with high or low pin value
- { [ "$value" = "0" ] && echo "low" || echo "high"; } >"$gpio_path/direction"
+ local gpio_path
+ if [ -n "$(echo "$gpio_pin" | grep -E "^[0-9]+$")" ]; then
+ gpio_path="/sys/class/gpio/gpio${gpio_pin}"
+
+ # export GPIO pin for access
+ [ -d "$gpio_path" ] || {
+ echo "$gpio_pin" >/sys/class/gpio/export
+ # we need to wait a bit until the GPIO appears
+ [ -d "$gpio_path" ] || sleep 1
+ }
+
+ # direction attribute only exists if the kernel supports changing the
+ # direction of a GPIO
+ if [ -e "${gpio_path}/direction" ]; then
+ # set the pin to output with high or low pin value
+ { [ "$value" = "0" ] && echo "low" || echo "high"; } \
+ >"$gpio_path/direction"
+ else
+ { [ "$value" = "0" ] && echo "0" || echo "1"; } \
+ >"$gpio_path/value"
+ fi