樹莓派手冊介紹
1 樹莓派使用教程
1.1 新手入門--樹莓派
1.1.1 樹莓派介紹-哪傢是真正的樹莓派
1.1.2 懶人教程-新手玩樹莓派
1.1.3 初次嚐試-樹莓派
1.1.3.1 繫統安裝-樹莓派
1.1.3.2 連接開機-樹莓派
1.1.3.3 進入圖形界麵-樹莓派
1.1.3.4 SSH連接-樹莓派
1.1.3.5 網絡設置-靜態IP-樹莓派
1.1.3.6 VNC安裝-樹莓派
1.1.3.7 VNC自動啟動-樹莓派
1.1.4 新手入門教程-樹莓派新手入門指南必看
1.1.5 新手入門教程-樹莓派快速入門指南
1.1.6 顯示器 修改config.txt--HDMI接口/VGA接口
1.1.7 樹莓派config.txt文件存放在哪裡
1.1.8 樹莓派config配置文件蔘數具體説明
1.1.9 樹莓派外殼安裝的教程
1.1.10 Config文件詳細説明
1.1.11 樹莓派完美運行最新 Android 7.0牛軋醣
1.2 網絡相關--樹莓派
1.2.1 樹莓派手動指定靜態IP和DNS 終極解決大法
1.2.2 命令行配置wifi無線連接
1.2.3 命令行配置藍牙連接-BlueTooth
1.2.4 如何打開藍牙-樹莓派
1.2.5 隨時隨地遠程登録-樹莓派
1.2.6 通過花生殼穿透內網-樹莓派
1.2.7 花生殼穿透內網改進版-樹莓派
1.2.8 windows遠程樹莓派
1.2.9 設置靜態IP方法
1.2.10 配置多箇WIFI
1.2.11 連接Wifi最穩定的辦法
1.2.12 安裝VNC Server併設置爲自動啟動
1.2.13 Linux繫統安裝XRDP+VNC實現遠程桌麵訪問
1.2.14 繫統內置VNC Server
1.3 外設相關-樹莓派
1.3.1 GPIO功能學習
1.4 顯示相關-樹莓派
1.4.1 脫離顯示器使用樹莓派

GPIO功能學習

2017-02-17 10:23:17
啊超
7274
最後編輯:achao 於 2017-02-17 10:33:01
簡介: 樹莓派學習筆記——GPIO功能學習

 

樹莓派學習筆記——GPIO功能學習

摘自:xukai871105博客

0.前言

    樹莓派現在越來越火,網上樹莓派的資料也越來越多。樹莓派源自英國,國外嵌入式開源領域具有良好的分享精神,樹莓派各種集成庫也層齣不窮,下麵推薦幾箇。

    【python GPIO
    【開髮語言】——python
    【簡單介紹】——該庫更確切的名稱爲raspberry-gpio-python,樹莓派官方資料中推薦且容易上手。python GPIO是一箇小型的python庫,可以幫助用戶完成raspberry相關IO口操作。但是python GPIO庫還沒有支持SPI、I2C或者1-wire等總線接口。除瞭python GPIO之外,還有衆多的python擴展庫(例如webiopi),毫無疑問的説python非常適閤樹莓派,樹莓派也非常適閤python。

    【wiringPi
    【開髮語言】——C語言
    【簡單介紹】——wiringPi適閤那些具有C語言基礎,在接觸樹莓派之前已經接觸過單片機或者嵌入式開髮的人群。wiringPi的API函數和arduino非常相似,這也使得牠廣受歡迎。作者給齣瞭大量的説明和示例代碼,這些示例代碼也包括UART設備,I2C設備和SPI設備等,毫無疑問地説wiringPi功能非常強大。

    【BCM2835 C Library
    【開髮語言】——C語言
    【簡單介紹】BCM2835 C Library可以理解爲使用C語言實現的相關底層驅動,牠給我的感覺更像STM32的庫函數,BCM2835 C Library的驅動庫包括GPIO、SPI和UART等,可以通過學習BCM2835 C Library熟悉BCM2835相關的寄存器操作。如果有機會開髮樹莓派上的linux驅動,或自主開髮python或PHP擴展驅動,可以從BCM2835 C Library找到不少的“靈感”。
    
    【相關博文】
    更多樹莓派學習筆記請蔘考——【樹莓派學習筆記——索引博文

1.硬件準備

    【樹莓派】——在開始所有的實驗之前,你需要一塊完整的樹莓派。
    【IO擴展闆】——可以通過淘寶購買IO擴展闆,或者購買萬用闆和杜邦線自行製作IO擴展闆。

圖1 樹莓派擴展闆——圖片來自 天貓 大菠蘿數碼專營店


圖2 運行效果圖

2.註意事項

    【編號方式】

圖3 GPIO編號方式——該圖片來自wiringPi説明文檔

    樹莓派的軟件擴展庫雖然很多,但也導緻瞭擴展庫“碎片化”的問題,例如操作樹莓派的GPIO端口,GPIO的編號便存在三種不衕的方式
    【1】插座編號方式
   編號側重P1插座側,從上到下,從左到右。正如圖3的Header一欄。
    【2】BCM2835編號方式
    編號側重CPU寄存器,根據BCM2835的GPIO寄存器編號。正如圖3 BCM GPIO一欄。
    【3】wiringPi編號方式
    編號側重實現邏輯,把擴展GPIO端口從0開始編號,這種編號方便編程。正如圖3 WiringPi一欄。
    【舉例説明】
    插座編號方式 11 -> BCM2835編號方式 17 -> wiringPi編號方式 GPIO0。無論如何牠都是衕一箇IO管腳。
    
    【代碼寫在哪裡】
    【1】直接在樹莓派中編寫
    樹莓派中有幾款代碼(文本)編輯軟件,可以在樹莓派中編寫代碼。
    【2】在windows中編寫
    可以在windows中編寫代碼,如果是Python腳本可通過FTP軟件傳輸到樹莓派中,然後使用SSH客戶端登録到樹莓派中執行Python腳本。如果是C語言文件,除瞭使用FTP傳輸之外還需要在樹莓派上編譯纔可以生成可執行文件(相當於windows上的exe文件)。相關軟件操作請蔘考【樹莓派學習筆記——常用軟件滙總
    【3】在其他linux中編寫
    與windows中編寫代碼不衕,在其他linux髮行版(例如ubuntu)中可安裝交叉工具鏈,交叉編譯C文件生成在樹莓派的可執行文件,那麽使用FTP傳輸可執行文件至樹莓派卽可。其實方式【1】和方式【3】是幾乎相衕的。

    【本例原理圖】
    爲瞭説明問題本例隻有一箇LED,接在瞭樹莓派IO擴展插座的11腳。

圖4 原理圖
    

2 Python GPIO實現

    【安裝過程】
        【1】先安裝python-dev,輸入以下指令。
sudo apt-get install python-dev
        【2】安裝RPi.GPIO,依次輸入以下指令。特彆説明,由於RPi.GPIO仍處於不斷完善的過程中,請蔘考前言中的鏈接下載最新的安裝代碼。
# 下載 
$ wget http://raspberry-gpio-python.googlecode.com/files/RPi.GPIO-0.5.3a.tar.gz
# 解壓縮 
$ tar xvzf RPi.GPIO-0.5.3a.tar.gz 
# 進入解壓之後的目録 
$ cd RPi.GPIO-0.5.3a 
# 啟動安裝 
$ sudo python setup.py install

    【示例代碼】
    新建一箇名爲led.py的文件,該文件具體內容如下:
[python] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. # -*- coding: utf-8 -*-  
  2. import RPi.GPIO as GPIO  
  3. import time  
  4. # BOARD編號方式,基於插座引腳編號  
  5. GPIO.setmode(GPIO.BOARD)  
  6. # 輸齣模式  
  7. GPIO.setup(11, GPIO.OUT)  
  8.   
  9. while True:  
  10.     GPIO.output(11, GPIO.HIGH)  
  11.     time.sleep(1)  
  12.     GPIO.output(11, GPIO.LOW)  
  13.     time.sleep(1)  
    【運行】
    如果在windows上編寫代碼,請使用FTP軟件下載到樹莓派中,使用SSH客戶端登陸樹莓派,cd命令進入文件所在目録,然後輸入指令
    sudo python led.py
    好吧,擴展闆上的LED等開始閃爍瞭。最後使用Ctrl+C結束Python程序。
    【簡單説明】
    【1】GPIO.setmode(GPIO.BOARD),採用插座引腳編號方式。
    【2】由於採用插座引腳編號方式,此處的11腳相當於BCM2835寄存器編號方式的引腳11。

4 WiringPi實現

    【安裝過程】
    【示例代碼】
    新建一箇名爲blink.c文件,該文件具體內容如下:
[cpp] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. #include <wiringPi.h>  
  2. int main(void)  
  3. {  
  4.   wiringPiSetup() ;  
  5.   pinMode (0, OUTPUT) ;  
  6.   for(;;)   
  7.   {  
  8.     digitalWrite(0, HIGH) ; delay (500) ;  
  9.     digitalWrite(0,  LOW) ; delay (500) ;  
  10.   }  
  11. }  
    【運行】    
    如果在windows上編寫代碼,請使用FTP軟件下載到樹莓派中,使用SSH客戶端登陸樹莓派,cd命令進入文件所在目録,然後輸入gcc指令
    gcc -Wall -o blink blink.c -lwiringPi
    接著輸入以下命令執行程序
    sudo ./blink
    程序順利運行,最後使用ctrl+c可以結束程序。

    【簡單説明】
    【1】不確定的最後狀態,由於程序停止的時間未知,所有LED可能爲點亮狀態也可能會熄滅狀態。
    【2】和python的程序相比,GPIO的端口號似乎髮生瞭變化,但是實際上爲衕一箇IO,隻是IO的編號方式略有不衕。
    【3】-lwiringPi錶示動態加載wiringPi共享庫,如果不熟悉gcc指令和makefile,請蔘考繫列博文——【Linux學習筆記——例説makefile 索引博文

5 BCM2835 C Library

    【安裝過程】
    特彆説明,由於BCM2835 C Library仍處於不斷完善的過程中,請蔘考前言中的鏈接下載最新的安裝代碼。
# 下載
$ wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.35.tar.gz 
# 解壓縮
$ tar xvzf bcm2835-1.35.tar.gz 
# 進入壓縮之後的目録
$ cd bcm2835-1.35
# 配置
./configure
# 從源代碼生成安裝包
make
# 執行檢查
sudo make check
# 安裝 bcm2835庫
sudo make install

    【示例代碼】
    新建一箇名爲blink.c的程序,程序的具體內容如下:
[cpp] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. #include <bcm2835.h>  
  2.   
  3. // P1插座第11腳  
  4. #define PIN RPI_GPIO_P1_11  
  5.   
  6. int main(int argc, char **argv)  
  7. {  
  8.   if (!bcm2835_init())  
  9.   return 1;  
  10.   
  11.   // 輸齣方式  
  12.   bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP);  
  13.   
  14.   while (1)  
  15.   {  
  16.     bcm2835_gpio_write(PIN, HIGH);  
  17.     bcm2835_delay(100);  
  18.       
  19.     bcm2835_gpio_write(PIN, LOW);  
  20.     bcm2835_delay(100);  
  21.   }  
  22.   bcm2835_close();  
  23.   return 0;  
  24. }  
    【運行】       
    如果在windows上編寫代碼,請使用FTP軟件下載到樹莓派中,使用SSH客戶端登陸樹莓派,cd命令進入文件所在目録,然後輸入gcc指令
    gcc -o blink blink.c -lbcm2835
    接著執行該程序,輸入以下指令
    sudo ./blink
    程序順利運行,最後使用ctrl+c可以結束程序。
    【1】和wiringPi的情況相似,若關閉程序LED燈可能點亮也可能熄滅。
    【2】雖然GPIO端口再次髮生瞭變化,但還是指曏那箇LED燈。
    【3】-lbcm2835錶示動態加載bcm2835共享庫,如果不熟悉gcc指令和makefile,請看看我的其他博文吧。

6 未來做些什麽

    實踐GPIO輸入功能,實踐SPI功能,實踐I2C功能等。最後綜閤以上若榦內容結閤web做