iT邦幫忙

2021 iThome 鐵人賽

DAY 30
0

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
  • 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
    
  • 給予blink.sh執行功能
    chmod +x blink.sh
  • 執行測試
    sh blink.sh
  • 要跳出就按ctrl + c
    • 當然腳本還是盡量少用這種無窮迴圈,若要定期執行也可考慮crontab工作排程
  • 最後不用記得要釋放這支腳,避免下次無法控制
    echo 17 > /sys/class/gpio/unexport

Troubleshooting

RPi.GPIO 安裝失敗

  • 安裝python3與pip並且更新還是無法安裝控制樹梅派IP的套件,會報安裝異常尚未解
  • 另有找到可完成安裝gpio4套件,尚未測試

Ref.


上一篇
Day_29 Docker
系列文
OpenWRT開源路由兩三事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言