Raspberry Pi 筆記(二):GPIO接腳與 I2C 及 SPI 安裝

[2014/01/25]
Raspberry Pi支援輸入和輸出的控制,想學Raspberry Pi控制LED、步進馬達及繼電器等元件,就跟Arduino一樣,做一些自動控制的東西,於是動手收集Raspberry Pi控制輸入和輸出有關的資訊以及如何在Raspberry Pi安裝工具程式。
Raspberry Pi提供GPIO (General Purpose Input/Output)通用介面,可以透過程式做輸入或輸出的行為控制。Raspberry Pi的版子有2.54 mm 26-pin 的擴充頭,共有2排13個存取點,除了5V、3.3V及接地等pin外,還有其他17個可作為控制的pin腳,包括:

• 8個 GPIO pin
• 2個 UART pin
• 2個 I2C pin
• 5個 SPI pin




[UART通用非同步收發傳輸器]

UART (Universal Asynchronous Receiver/Transmitter)是一種非同步收發傳輸器,是電腦硬體的一部分,將資料由串列通信與並行通信間作傳輸轉換,最常見的是 RS232。UART訊框包括起始位元、資料位元、同位檢查位元、停止位元。UART包括RS232、RS449、RS423、RS422和RS485等介面和匯流排標準規範。

[I2C] 

I2C (Inter-Integrated Circuit)是一種串列通訊匯流排,使用多主從架構,由飛利浦公司在1980年代為了讓主機板、嵌入式系統或手機用以連接低速週邊裝置而發展。I2C的正確讀法為"I-squared-C"。I2C被應用在簡單的週邊,一些常見的應用如下:

• 為了保存使用者的設定而存取NVRAM晶片。
• 存取低速的數字模擬轉換器(DAC)。
• 存取低速的模擬數字轉換器(ADC)。
• 改變監視器的對比度、色調及色彩平衡設定(視訊資料通道)。
• 改變音量大小。
• 取得硬體監視及診斷資料,例如中央處理器的溫度及風扇轉速。
• 讀取實時時鐘(Real-time clock)。
• 在系統設備中用來開啟或關閉電源供應。

I2C的另一個強大用途在於微控制器的應用,利用兩根通用的輸入輸出接腳及軟體的規劃,可以讓微控制器控制一個小型網路。

週邊可以在系統仍然在運作的同時加入或移出匯流排,這代表對於有熱插拔需求的裝置而言是個理想的匯流排。

像I2C這樣的匯流排之所以流行起來,是因為電腦工程師發現到對於整合電路設計而言,許多的製造成本源自於封裝尺寸及接腳數量。更小的包裝通常能夠減少重量及電源的消耗,這對於行動電話及手持式電腦而言格外重要。

常見使用I2C進行通訊的模組有:
• 1602- 6 x 2- LCD液晶模組
• DS1302 Real Time Clock Board
• 1.24吋 4位7段顯示器
• OLED顯示螢幕 128*64
• BME280 溫濕度及壓力感測器
• 三軸加速度計- ADXL345 (I2C/SPI)

[SPI序列周邊介面匯流排]

SPI (Serial Peripheral Interface Bus),類似I²C,是一種4線同步序列資料協定,適用於可攜式裝置平臺系統,但使用率較 I²C少。SPI匯流排定義四組 logic signals:
‧ SCLK—Serial Clock(自master輸出)
‧ MOSI/SIMO—Master Output, Slave Input(自master輸出)
‧ MISO/SOMI—Master Input, Slave Output(自slave輸出)
‧ SS—Slave Select(active low;自master輸出)


要讓Raspberry Pi執行這三種控制,必須分別安裝對應的函數庫:GPIO可安裝RPi.GPIO或WiringPi,I²C需安裝 i2c-tools。
RPi.GPIO套件用來提供Raspberry Pi的GPIO控制,這個套件模組不適用於Real-time或要求比較高的應用程式,因為無法預測Python何時要忙碌,也由於需要Linux核心才能運作,較不適合即時或要求較高的程式。假使要求這些,可以改用 Arduino 。RPi.GPIO目前不支援SPI、I²C、PWM及串列通訊。您可參考:https://pypi.python.org/pypi/RPi.GPIO
WiringPi是一個存取GPIO的函數庫,以C語言寫成,讓Raspberry Pi的BCM2835晶片使用。WiringPi的語法跟Arduino很類似,同時可使用命令列的gpio指令,用來控制GPIO Pin腳,可以將命令列指令寫成shell scripts來控制Pin腳。相關資料可參考:http://wiringpi.com


[安裝RPi.GPIO]

RPi.GPIO各版本程式放在Python Package網站,下載位置:https://pypi.python.org/pypi/RPi.GPIO ,安裝方法如下:
$sudo apt-get install python-dev
$wget https://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.5.4.tar.gz
$tar xvzf RPi.GPIO-0.5.4.tar.gz
$cd RPi.GPIO-0.5.4
$sudo python setup.py install

安裝完成的畫面如下:

或輸入以下指令自動安裝:
$sudo apt-get install python-rpi.gpio

[安裝 I2C]

• 編輯文字檔 /etc/modules
$ sudo nano /etc/modules
加入以下兩行:
 i2c-bcm2708
 i2c-dev

• 再執行以下安裝程式指令:
$sudo apt-get install python-smbus
$sudo apt-get install i2c-tools

• 修改 raspi-blacklist.conf 檔案:
$ sudo nano /etc/modprobe.d/raspi-blacklist.conf

• 將以下兩行加上註解符號:
# blacklist spi-bcm2708
# blacklist i2c-bcm2708

• 當連接上I2C設備後,新的 Pi B版本可用下列指令察看:
$sudo i2cdetect -y -a 1

• 舊的版本可用下列指令察看
$sudo i2cdetect -y -a 0

如果出現以下的畫面,表示已經安裝成功。

一般用在控制Raspberry Pi 上的GPIO語言,常見使用有 Python 、Java以及 C語言,也有人直接使用Shell script來寫GPIO控制程式。

[安裝 SPI]

$ sudo vi /etc/modules
在最後一行加入 spidev

$ sudo vi /etc/modprobe.d/raspi-blacklist.conf
在blacklist spi-bcm2708 前加上#,變成
#blacklist spi-bcm2708

安裝SPI程式
$ sudo apt-get install python-dev
$ git clone git://github.com/doceme/py-spidev
$ cd py-spidev/
$ sudo python setup.py install

重新開機即可啟用SPI。

[參考資料]

•  SK Pang electronics
• 智慧生活科技專業社群
    Raspberry Pi 硬體控制-- Python 語言篇
    Raspberry Pi 硬體控制-- C 語言篇
• Raspberry Pi Cookbook
• Wikipedia-UART
• Wikipedia-I2C
• Wikipedia -序列周邊介面
•  Openmicros.org: Getting Started with Raspberry Pi GPIO and Python
• WiringPi-GPIO Interface library for the Raspberry Pi
Share on Google Plus
    Blogger Comment
    Facebook Comment

0 意見 :

張貼留言