樹莓派使用WiringPi

一、WiringPi

**簡介**

WiringPi是應用於樹莓派平臺的GPIO控制庫函數,WiringPi遵守GUN Lv3。wiringPi使用C或者C++開發並且可以被其他語言包轉,例如python、ruby或者PHP等。WiringPi中的函數類似於Arduino的wiring系統,這使得熟悉arduino的用戶使用wringPi更為方便。

樹莓派具有26個普通IO引腳,利用端口複用時支持I2C、SPI和UART通信協議。不使用複用時也可以作為普通端口使用。wiringPi包括一套gpio控制命令,使用gpio命令時可以控制樹莓派GPIO管腳。用戶可以利用gpio命令通過shell腳本控制或查詢GPIO管腳。wiringPi是可以擴展的,用戶可以利用wiringPi的內部模塊或把自定義的擴展模塊集成到wiringPi中以擴展更多的GPIO接口或支持更多的功能。

摘自:

https://blog.csdn.net/qintaiwu/article/details/73741722

二、安裝

sudo apt-get install git
git clone https://github.com/WiringPi/WiringPi
cd wiringPi
git pull
./build

測試:檢測GPIO口

gpio -v
樹莓派使用WiringPi

三、常用gpio命令

gpio readall
gpio -g mode 20 out
gpio -g mode 21 in
gpio -g write 20 1 && gpio -g write 21 1 && gpio -g write 16 1
gpio -g read 20

四、 python wiringpi 環境安裝

*如果python版本默認是2.0,可以先改一下版本:(現在新版本樹莓派一般帶python2.7和python3兩個版本,可以直接使用python3)*

sudo apt-get install python3 # 如果沒有安裝3,先安裝
sudo rm /usr/bin/python # 刪除舊連接
sudo ln -s /usr/bin/python3.5 /usr/bin/python

安裝wiringpi

sudo apt-get install python3-pip
pip install wiringpi
pip list | grep wiring \t\t# 檢查安裝

命令行設置引腳:

gpio -g mode 17 out
gpio -g write 17 0 //設置為低電平

五、WiringPi GPIO 和 BCM2835 GPIO映射關係

樹莓派使用WiringPi

命令行設置示例:

gpio readdall
gpio -g mode 17 out
gpio -g write 17 0 //設置為低電平

五、使用

一般分為4步驟:

上面的代碼非常簡單,可以分為四個部分——wiringPiSetupi初始化、pinMode設置IO為輸出方向、digitalWrite輸出高電平或低電平和delay系統延時函數。

六、C 部分示例

wiringPiSetup(); //初始化

int i = 0;
// 設置IO口全部為輸出狀態
for( i = 0 ; i < 8 ; i++ )
pinMode(i, OUTPUT);

for (;;)
{
for( i = 0 ; i < 8 ; i++ )
{
// 點亮500ms 熄滅500ms
// 輸出
digitalWrite(i, HIGH); delay(500);
digitalWrite(i, LOW); delay(500);
}
}
// 讀取引腳狀態
\tdigitalRead(BtnPin); //1 輸入高電平 0 輸入低電平

六、Python 部分示例

import wiringpi \t#老版本是導入wiringpi2,新版本改為wiringpi
wiringpi.wiringPiSetup() \t\t\t\t\t#設置GPIO編號為wPi方式
wiringpi.wiringPiSetupSys() \t\t\t#設置GPIO編號為BCM方式
wiringpi.wiringPiSetupGpio() \t\t\t#設置GPIO編號為BCM方式
wiringpi.pinMode(6,1) \t\t\t\t\t\t#設置pin6為輸出
wiringpi.digitalWrite(6,1) \t\t\t\t\t#pin6電平置為高
wiringpi.digitalRead(6) \t\t\t\t\t#讀取pin6的電平

七、常用函數

### 初始化函數

樹莓派使用WiringPi

### 通用GPIO工作模式

#### 1.void pinMode (int pin, int mode) ;

這個函數式設置pin腳的輸入和輸出模式以及PWM的輸入和輸出模式。在wiringPi中只有 pin 1 (BCM_GPIO 18)是支持PWM的輸出的。

#### 2.void digitalWrite (int pin, int value) ;

這個函數式用來設置pin腳的高低電平的,當我們寫HIGH or LOW (1 or 0)的時候pin腳的mode必須為輸出模式。

#### 3.void digitalWriteByte (int value) ;

這個函數可以將8位字節寫給8個GPIO pin腳,這是設置8個pin腳值的最快的方式。

#### 4.void pwmWrite (int pin, int value) ;

寫入的值必須是0-1024。輸出一個值到PWM寄存器,控制PWM輸出。pin只能是wiringPi 引腳編號下的1腳(BCM下的18腳)

#### 5.int digitalRead (int pin) ;

這個函數是讀取GPIO的pin腳的電平高低然後返回讀取的值。

#### 6.void pullUpDnControl (int pin, int pud) ;

這個函數是設置GPIO的pin腳是否接上拉電阻和下拉電阻的。函數的參數pud必須設置,當設置為PUD_OFF時表示沒有上拉電阻和下拉電阻,當設置為PUD_DOWN 時為下拉電阻,設置為PUD_UP是為上拉電阻。

#### 7. void analogWrite(int pin, int value)

pin:引腳

value:輸出的模擬量

模擬量輸出 樹莓派的引腳本身是不支持AD轉換的,也就是不能使用模擬量的API,

需要增加另外的模塊

#### 8. int analogRead (int pin)

pin:引腳

返回:引腳上讀取的模擬量

模擬量輸入 樹莓派的引腳本身是不支持AD轉換的,也就是不能使用模擬量的API,需要增加另外的模塊

### PWM的控制:

#### 1.pwmSetMode (int mode) ;

這個函數是設置PWM的佔空比模式一般為50%佔空比和佔空比可調模式。樹莓派默認是50%佔空比模式,我們可以通過PWM_MODE_BAL 和PWM_MODE_MS這兩個參數來設置。

#### 2.pwmSetRange (unsigned int range) ;

這個函數是設置PWM寄存器寫入的範圍,一般默認為1024.

#### 3.pwmSetClock (int divisor) ;

這個函數的設置PWM時鐘的分頻因子。

### 時間控制函數:

#### 1.void delay (unsigned int howLong)

這個是毫秒級的延時函數。

#### 2.void delayMicroseconds (unsigned int howLong)

微秒級的延時函數

#### 3. unsigned int millis (void)

這個函數返回 一個 從你的程序執行 wiringPiSetup 初始化函數(或者wiringPiSetupGpio ) 到 當前時間 經過的 毫秒數。

返回類型是unsigned int,最大可記錄 大約49天的毫秒時長。

#### 4. unsigned int micros (void)

這個函數返回 一個 從你的程序執行 wiringPiSetup 初始化函數(或者wiringPiSetupGpio ) 到 當前時間 經過的 微秒數。

返回類型是unsigned int,最大可記錄 大約71分鐘的時長。

### 關於中斷的函數:

#### 1.int waitForInterrupt (int pin, int timeOut) ;

這一個等待事件中斷函數,timeout參數是毫秒級別的參數,當為-1時代表永遠等待中斷狀態。如果發生錯誤返回值是-1,0表示超時,1表示成功中斷。調用這個函數之前我們需要對GPIO進行初始化。

例如我們要設置GPIO 0為等待下降沿中斷:

我們需要在運行程序之前先終端運行 gpio edge 0 falling

#### 2.int wiringPiISR (int pin, int edgeType, void (*function)(void)) ;

這個函數是利用一個函數作為參數來獲取在特定的GPIO pin腳的中斷。edge_Type參數可以設定為 INT_EDGE_FALLING, INT_EDGE_RISING, INT_EDGE_BOTH or INT_EDGE_SETUP.

當中斷髮生的時候function將被調用,調用function之前會先清除相應的標誌位,這就使得隨後的中斷不會被影響。


分享到:


相關文章: