一、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
三、常用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映射關係
命令行設置示例:
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的電平
七、常用函數
### 初始化函數
### 通用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之前會先清除相應的標誌位,這就使得隨後的中斷不會被影響。
閱讀更多 悠悠科教 的文章