樹莓派GPIO編號方式
- 功能物理引腳
從左到右,從上到下:左邊奇數,右邊偶數:1-40
通過打開終端窗口並運行命令,可以在Raspberry Pi上訪問方便的參考pinout
。該工具由GPIO零 Python庫提供,該庫默認情況下安裝在Raspbian桌面映像上,而不安裝在Raspbian Lite上。
1、用Python通過PRI.GPIO命令控制GPIO(略)
2、Python腳本控制GPIO
蜂鳴器鳴叫程序測試
- GPIO18
- GND
新建名爲buzzer.py的腳本:
pi@raspberrypi:~ $ sudo nano buzzer.py
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setmode(18,GPIO.OUT)
//BCM 編號GPIO18 ;wPI 編號 1;物理引腳 12
while True:
GPIO.output(18,GPIO.HIGH)
time.sleep(1)
GPIO.output(18,GPIO.LOW)
time.sleep(1)
GPIO.cleanup()
nano編輯器保存退出命令依次爲:
Ctrl+O
Ctrl+X
Y
說明:while True下面的循環體要縮進,用空格或Tab(但不能混用)鍵縮進就行。
爲buzzer.py添加可執行權限:
pi@raspberrypi:~ $ sudo chmod +x buzzer.py
運行Python腳本:
pi@raspberrypi:~ $ sudo python buzzer.py
注意:提示“語法錯誤:不正確的語法”
File “buzzer.py”, line 9
whlie True:
^
SyntaxError: invalid syntax
停止運行命令:
Ctrl+C
來中斷循環。
有興趣的話,可以試試用Python通過PRI.GPIO命令控制GPIO。
3、藉助第三方庫文件控制GPIO
樹莓派內核中已經編譯自帶了 GPIO 的驅動,我們常通過一些第三方寫好的庫函數來完成具體的操作,比較常見的操作庫函數有:
3.1 Python 庫:
- Python GPIO
Python GPIO已經集成到了樹莓派內核,爲樹莓派官方資料中推薦且容易上手。PythonGPIO是一個小型的Python庫,可以幫助用戶完成raspberry相關IO口操作,但是PythonGPIO庫還沒有支持SPI、I2C或者1-wire等總線接口。
3.2 C語言庫:
wiringPi適合那些具有C語言基礎,在接觸樹莓派之前已經接觸過單片機或者嵌入式開發的人羣。wiringPi的API函數和Arduino非常相似,這也使得它廣受歡迎。作者給出了大量的說明和示例代碼,這些示例代碼也包括UART設備,I2C設備和SPI設備等。
BCM2835 C Library可以理解爲使用C語言實現的相關底層驅動,BCM2835 C Library的驅動庫包括GPIO. SPI和UART等,可以通過學習BCM2835 C Library熟悉BCM2835相關的寄存器操作。如果有機會開發樹莓派上的linux驅動,或自主開發python或PHP擴展驅動,可以從BCM2835 C Library找到不少的“靈感”。
4、WiringPi GPIO安裝
WiringPi 是應用於樹莓派平臺的 GPIO 控制庫函數,WiringPi 遵守 GUN Lv3。wiringPi 使用 C 或者 C++開發並且可以被其他語言包轉,例如Python、ruby或者PHP等。
WiringPi 包括一套 GPIO 控制命令,使用 GPIO 命令可以控制樹莓派 GPIO 管腳。用戶可以利用gpio命令通過shell腳本控制或查詢GPIO管腳。
4.1 WiringPi 安裝
更新列表:
pi@raspberrypi:~ $ sudo apt-get update
更新軟件:
pi@raspberrypi:~ $ sudo apt-get upgrade
安裝 wiringpi 庫:
pi@raspberrypi:~ $ sudo apt-get install wiringpi
4.2 測試
WiringPi 包括一套 GPIO 命令,使用 GPIO 命令可以控制樹莓派上的各種接口,通過以下指令可以測試 WiringPi 是否安裝成功。
pi@raspberrypi:~ $ gpio -v
查看GPIO圖:(這一步報錯沒有gpio圖)
pi@raspberrypi:~ $ gpio readall
4.3 編寫代碼
新建一個名爲buzzer.c的源程序
pi@raspberrypi:~ $ sudo nano buzzer.c
代碼內容如下:
#include <wiringPi.h>//注意大小寫
int main(void) {
wiringPiSetup();//注意大小寫
pinMode (1, OUTPUT);
for(;;) {
digitalWrite(1, HIGH);
delay (500);
digitalWrite(1, LOW);
delay (500) ;
}
}
說明:看看上一小節的圖,BCM編號的GPIO18引腳在wiringPi編號中是1。
4.4 編譯運行
編譯:
第一種編譯:pi@raspberrypi:~ $ gcc buzzer.c -o buzzer -l wiringPi
第二種編譯:pi@raspberrypi:~ $ gcc buzzer -l wiringPi buzzer.c
注意:-l wiringPi
表示動態加載 wiringPi 共享庫。
編譯的時候這裏報錯 “ /usr/bin/ld: cannot find -lwiringpi
collect2: error: ld returned 1 exit status ”,原因是編譯的時候 wiringPi 沒有區分大小寫。
運行:
第一種:pi@raspberrypi:~ $ sudo ./buzzer
第二種:pi@raspberrypi:~ $ ./buzzer
停止運行:
用 Ctrl+C
來中斷循環。
參考資料