實體測試裝置長這樣
--
使用 /sys/class/gpio - shell command
1 2 3 4 |
# echo 12 > /sys/class/gpio/export # cd /sys/class/gpio/gpio12 # echo out > direction # echo 1 > value |
--
使用 /sys/class/gpio - Python 3
1 2 3 4 5 6 7 8 9 |
import gpio import time ledPin = 12 gpio.setup(ledPin, 'out') gpio.set(ledPin, 1) time.sleep(1) gpio.set(ledPin, 0) |
--
效能實驗
使用以下的 python 的程式測試,迴圈跑 1000 次 led 開關
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import gpio import time ledPin = 12 gpio.setup(ledPin, 'out') i = 0 tStart = time.time() while 1: if i >= 1000 : tEnd = time.time() break gpio.set(ledPin, 1) # time.sleep(1) gpio.set(ledPin, 0) # time.sleep(1) i = i+1 print(i) print(tEnd - tStart) |
目前的程式需要 1.16 秒
1 2 3 4 5 6 |
DEBUG:gpio:Write 12: 1 DEBUG:gpio:writing: <_io.TextIOWrapper name='/sys/class/gpio/gpio12/value' mode='w+' encoding='UTF-8'>: 1 DEBUG:gpio:Write 12: 0 DEBUG:gpio:writing: <_io.TextIOWrapper name='/sys/class/gpio/gpio12/value' mode='w+' encoding='UTF-8'>: 0 1000 1.1629619598388672 |
因為覺得那個 DEBUG.gpio 的輸出很礙眼,所以複製了 gpio.py 然後將所有 logging 輸出刪除,可以得到 0.10 秒
1 2 3 4 |
998 999 1000 0.10581040382385254 |
... 所以已經知道訊息輸出會影響效能,那把 print(i) 也移除吧
1 |
0.07267355918884277 |
好吧,我知道 GPIO 原本效能不彰的原因了
--
速率 & 時間
- 2400 = 0.000417
- 9600 = 0.0001
- 115200 = 0.0000087
--
1,062 total views, 1 views today