Physical computing ︰《二》 GPIO 初探

250px-Littleprince

Chapter21

小王子‧第二十一章

就在這當兒,跑来了一隻狐狸。
“你好。”狐狸說。
“你好。”小王子很有禮貌地回答道。他轉過身来,但什麼也没有看到。
“我在這兒,在蘋果樹下。”那聲音說。
“你是誰?”小王子說,“你很漂亮。”
“我是一隻狐狸。”狐狸說。
“來和我一起玩吧,”小王子建議道,“我很苦惱……”
“我不能和你一起玩,”狐狸說,“我還没有被馴服呢。”
“啊!真對不起。”小王子說。
思索了一會兒,他又說道:
“什麼叫’馴服’呀?”
“你不是此地人。”狐狸說,“你來尋找什麼?”
“我來找人。”小王子說,“什麼叫‘馴服’呢?”
“人,”狐狸說,“他們有槍,他們還打獵,這真碍事!他們唯一的可取之處就是他們也養雞,你是来尋找雞的嗎?”
“不,”小王子說,“我是來找朋友的。什麼叫‘馴服’呢?”
“這是已經早就被人遺忘了的事情,”狐狸說,“它的意思就是‘建立聯繫’。”
“建立聯繫?”
“一 點不錯,”狐狸說。“對我來說,你還只是一個小男孩,就像其他千萬個小男孩一樣。我不需要你。你也同樣用不著我。對你來說,我也不過是一隻狐狸,和其他千 萬隻狐狸一樣。但是,如果你馴服了我,我們就互相不可缺少了。 對我來說,你就是世界上唯一的了;我對你來說,也是世界上唯一的了。”
“我有點明白了。”小王子說,“有一朵花……,我想,她把我馴服了……”
“這是可能的。”狐狸說,“世界上什麼樣的事都可能看到……”
“啊,這不是在地球上的事。”小王子說。
狐狸感到十分蹊蹺。
“在另一個星球上?”
“是的。”
“在那個星球上,有獵人嗎?”
“沒有。”
“這很有意思。那麼,有雞嗎?”
“没有。”
“没有十全十美的。”狐狸嘆息地說道。
……

在《 λ 運算︰概念導引《一》》 一文中,我們談到『名字』的重要性,認識不同的『命名系統』,就是玩轉『樹莓派』之『通用型輸出入GPIO General Purpose Input/Output 踏出的第一步。為什麼會有不同的『命名系統』呢?就左圖『 P1 接頭』header 來說,一個『接腳』 Pin 的『編號』 Number 與『功能名稱』 Function name 就是兩種『接腳』之『指定』辦法。於是乎 Pin 7 = GPIO4 = (GPCLK0) ,這還不困擾,當有人將『接腳』的『編號』講成『 GPIO □□』時,就成了『 GPIO 7 = GPIO4』,即使加上『 BCM 』 Broadcom GPIO numbers 修飾語,『 GPIO 7 = BCM GPIO4』,都令人煩惱,更不要說還曾有『硬體版本』改名的問題哩!由於大概少有人有『第一版』的硬體,在此我們主講『 Rev 2.0 』以後的『命名系統』。

去掉『 P1 接頭』上的『電源 5V/3V3,『接地GND,還有十七根『接腳』,分成了四大類︰

i2c interface︰Pin 3,Pin 5

UART ── serial port︰Pin 8,Pin 10

SPI ── Serial Peripheral Interface︰Pin 19,Pin 21,Pin 23,Pin 24,Pin 26

GPIO︰Pin 7,Pin 11,Pin 13,Pin 15,Pin 16,Pin 18,Pin 22

GPIO︰Pin 12,可作為 PWM

推薦讀者到『 Pinout 』網頁了解更多有關樹莓派『接腳』的事。

GPIOs

GPIO-pins-cropped-146x300

Rev2-GPIO-bold-173x300

之前《都是檔案惹的禍?》裡,我們提過︰

在 Raspbian 的世界裡,一切都是『檔案』。這是真的嗎?從古早的 Unix 系統開始,就用著一種『統一』unified 的觀點來看待檔案。假如說 『程式』是執行檔很好了解,可是講到『硬體裝置』不過是特殊檔呢?……

就讓我們透過『 Sysfs 』── 是 Linux 2.6 所提供的一種『虛擬檔案系統』 VFS virtual files system 。這個檔案系統不僅可以把『裝置』 devices 和『驅動程式』 device drivers 的資訊從『核心』 kernel 內部輸出到『使用者空間』 user space ,也可以用來對裝置和驅動程式做『設定』。── 來控制『系統 ACT LED』,與 GPIO建立聯繫』吧!

# 為什麼一定得是 root 呢?可以只用 sudo 嗎??
sudo -s

echo none > /sys/class/leds/led0/trigger
echo 1 >/sys/class/leds/led0/brightness
echo 0 >/sys/class/leds/led0/brightness
echo 1 >/sys/class/leds/led0/brightness
echo 0 >/sys/class/leds/led0/brightness
exit

 

Ah Ha!!這樣想要有顆『閃爍』的『小星星』,怕是不可得的了,何不閱讀《 Advanced Bash-Scripting Guide 》一下,寫個『 Shell 』程式呢??