openwrt雖然主力是在網路服務,但如果硬體與韌體的支援上有GPIO(通用型之輸入輸出的簡稱),也可以拿來做開發與使用,尤其樹莓派定位在開發板,GPIO可說是十分重要的功能。配合感測器可以蒐集外界的資訊、配合LED/馬達/繼電器等可以輸出控制、還有一堆可藉由I2C/SPI等通訊溝通控制的設備,花樣非常多,如果可以好好搭配這個開源路由,可玩性會更高。
在Raspberry pi OS中,可以用c、python或是node.js等語言進行開發與控制。上圖是曾在Day_15 Terminal & CLI出現過的腳位功能圖,現在我們要來試著讀取與輸出。在linux中即便沒有裝python也可以使用命令來驅動IO腳位。登入命令介面後使用指令cat /sys/kernel/debug/gpio
,可以得到相關GPIO資訊,會載明名稱與功能,若沒有出現可能不支援或是沒有安裝相關核心套件,可以查有無相關套件包或驅動。
以下是一些相關指令。
# 初始化 GPIO17
echo 17 > /sys/class/gpio/export
# 設定 GPIO17 為輸出腳
echo out > /sys/class/gpio/gpio17/direction
# 設定 GPIO17 為輸入腳
echo in > /sys/class/gpio/gpio17/direction
# 設定 GPIO17 為high(高電位)
echo 1 > /sys/class/gpio/gpio17/value
#設定 GPIO16 為low((低電位)
echo 0 > /sys/class/gpio/gpio17/value
# 讀取 GPIO17 數值
cat /sys/class/gpio/gpio177/value
試著做一個arduino的Hello_World:LED閃爍
mkdir app
cd app
vi blink.sh
#!/bin/bash
echo 17 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio17/direction
while [ 1 ]; do
echo 1 > /sys/class/gpio/gpio17/value
sleep 1
echo 0 > /sys/class/gpio/gpio17/value
sleep 1
done
chmod +x blink.sh
sh blink.sh
ctrl + c
crontab
工作排程echo 17 > /sys/class/gpio/unexport
gpio4
套件,尚未測試