1. 程式人生 > >幾種操作樹莓派2B GPIO的方法附參考程式碼

幾種操作樹莓派2B GPIO的方法附參考程式碼

硬體:樹莓派2B
系統:Raspbian Debian Wheezy 2014-02-16
環境:wiringPi、BCM2835 C Library、Python2.7、C
注意:以下操作均在root許可權下操作

這裡總結下操作GPIO的幾種方法,希望給新手做個參考,首先準備系統環境,安裝系統什麼的這裡就略過了,Python,C系統自帶,wiringPi、BCM2835 C Library安裝這裡不在贅述,我之前帖子也提到過:http://www.shumeipai.net/thread-22413-1-1.html,大家自己去檢視,這裡列下安裝程式碼,省得你懶得看之前的帖子:
1.安裝wiringPi:
  1. git clone git://git.drogon.net/wiringPi
  2. cd wiringPi
  3. ./build
複製程式碼 2.安裝BCM2835 C Library:
  1.     wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.42.tar.gz
  2.     tar xvzf bcm2835-1.42.tar.gz
  3.     cd bcm2835-1.42
  4.     ./configure
  5.     make
  6.     make check
  7.     make install
複製程式碼 安裝完成後可以看下GPIO的引腳定義:
  1. gpio readall
複製程式碼 執行結果如圖:
 
Physical那一列對應的就是樹莓派物理引腳的編號,BCM就是BCM2835的定義,wPi那列就是wiringPi的定義,所以用那個程式去讀取要注意他們對引腳的定義,否則會造成錯誤。新手可能要問你,那麼樹莓派上那個是1哪個是2啊,
給大家一張圖,紅色方框標註的就是1,和上圖方向是對應的,其它的自己對應 Physical列來看:
 
3.一下以物理引腳11為例子,來演示下幾種不同的操作方法,簡單設定引腳的IN或者OUT
3.1.使用Python來操作:
  1. import RPi.GPIO as GPIO
  2. GPIO.setmode(GPIO.BCM)
  3. GPIO.setup(17, GPIO.IN)
複製程式碼 注意GPIO.setmode,我用的是BCM,看上圖對應,11腳對應為17,如果GPIO.setmode(GPIO.BOARD),那麼這裡數字就應該寫11,即為物理引腳數字。下面是截圖,我們看到11腳從上圖OUT變為IN:

 
3.2.使用C來操作:
首先我們用wiringPi來控制把11腳變回OUT:
  1. #include <wiringPi.h>
  2. #include <stdio.h>
  3. int main(void){
  4.         wiringPiSetup();
  5.     pinMode(0,OUTPUT);
  6.         return 1;
  7. }
複製程式碼 編譯後執行,怎麼編譯,看下圖裡有,自己輸入,不能全程靠複製貼上,這裡wPi定義11腳為0:
 
我們再用BCM來控制把11腳變回IN:
  1. #include <bcm2835.h>
  2. #include <stdio.h>
  3. int main(void){
  4.         bcm2835_init();
  5.         uint8_t pin;
  6.         pin = 17;
  7.     bcm2835_gpio_fsel(pin, BCM2835_GPIO_FSEL_INPT);
  8.         bcm2835_close();
  9.     printf("... done!\n");
  10.         return 1;
  11. }
複製程式碼 注意,這裡bcm定義是17,編譯執行結果如下:
 

到這裡,幾種控制GPIO的方法就演示完畢,相信這時你再去弄什麼控制LED,感測器之類的不會再一頭霧水了,上述例子有不足錯誤之處,歡迎指點討論!