樹莓派硬件控制學習筆記(一)
第一章 樹莓派硬件控制入門之GPIO口的操作文章目錄
前言
樹莓派是最近越來越熱門的一塊開發板,不僅僅是入門級的開發,在越來越多的專業領域也可以見到它的身影,且它價格低廉,操作便捷,十分適合我們學生黨,所以我打算使用樹莓派開發一款機器人,以下是我的學習筆記。
要想控制一款開發板,首先就要做到控制其IO口的高低電平轉換,而關於樹莓派目前我所知的方法有如下三種,這三種庫都不需要安裝,在官方鏡像中自帶。
在這裏順便提供2020-5-27的樹莓派官方鏡像百度雲下載,也是筆者正在使用的,親測三種方法都可成功。
鏈接:https://pan.baidu.com/s/1zghbDwhnnfVyVY8yMhsJXQ
提取碼:ggs1
一、背景知識:樹莓派引腳編號系統
-
BOARD編號系統。如下圖中灰色部分,和樹莓派物理引腳對應(USB接口面向自己,引腳絲印圈削角對應左上位置)
-
BCM編號系統。pigpio庫默認使用,如下圖中黃色部分,不同版本的樹莓派不一樣可能要重新修改代碼。
-
wiringPi編號系統,此編號系統是wiringP庫專用的編號,如下圖中黃色部分。
這三種編號系統都可以通過下圖一一對應。
二、使用樹莓派官方自帶的RPi.GPIO 庫(Python)操縱GPIO口
1.引入庫並命名要修改的GPIO口
在樹莓派上運行python和c程序的方法很多文章都介紹過,這裏不再贅述,直接上代碼。
import RPi.GPIO as GPIO #注意這裏的i是小寫=.=
GPIO.setmode(GPIO.BOARD) #指定爲BOARD編號
#or
#GPIO.setmode(GPIO.BCM)#指定爲BCM編號
pins_1=12
將要修改的GPIO.1,也就是BOARD編碼下的12號針腳命名爲pins_1,其位置具體見第一節的引腳圖,注意這是在BOARD編碼模式下,看灰色的部分。
2.配置IO口爲輸入模式
GPIO.setup(pins_1,GPIO.OUT)
#還可以設置上拉電阻(具體用處後面會介紹)
#GPIO.setup(pins_1,GPIO.IN,pull_up_down=GPIO.PUD_UP)
#下拉電阻
#GPIO.setup(pins_1,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
輸入模式相比於輸出模式較難,後面的筆記將會介紹
3.配置IO口爲輸出模式
GPIO.setup(pins_1,GPIO.OUT)
#還可以設置爲輸出並初始爲爲HIGH或LOW
#GPIO.setup(pins_1, GPIO.OUT, initial=GPIO.HIGH)
#可以同時設置多個引腳
#chan_list = [ 11 ,12 ]
#你可以用元組代替,即:
#chan_list =(11,12)
#GPIO.setup(chan_list, GPIO.OUT)
4.輸出模式下的引腳高低電平操縱
GPIO.output(pins_1, state)
#state可以是0 / GPIO.LOW / False --- 低電平
#或者 1 / GPIO.HIGH / True --- 高電平
5.釋放引腳
在程序執行完畢後一定要加入這一步,否則高電平引腳一旦不小心碰到GND將會燒燬樹莓派。
GPIO.cleanup()
三、使用Pigpio庫(Python)操縱GPIO口
pigpio是一個由C語言編寫的庫函數,並提供Python接口這個庫的優點是軟PWM頻率上限比RPi庫穩定,經過筆者用示波器實測,RPi庫輸出的PWM波佔空比會出現0.5%左右的波動,而pigpio庫的波動在0.1%左右,注意pigpio庫使用的是BCM編碼,所以無需再設置編碼模式
1.啓動守護進程
啓動Linux終端,輸入這條命令
sudo pigpiod
2.引入庫
import pigpio
pi = pigpio.pi()
2.設置輸出模式下電平
pi.write(4, 0) # 將4號引腳設置爲低電平(GPIO.7)注意這是BCM編碼
pi.write(4, 1) # 將4號引腳設置爲高電平(GPIO.7)
pi.read(4) # 獲取目前4號引腳的電平(GPIO.7)
3.釋放引腳
pi.write(4, 0)
四、使用WiringPi庫(C語言)操縱GPIO口
wiringPi是一個很棒的樹莓派IO控制庫,使用C語言開發,提供了豐富的接口:GPIO控制,中斷,多線程,等等。java 的pi4j項目也是基於wiringPi的。
wiring庫使用的編碼模式是wiringPi編碼。
1.gcc編譯器生成命令
編譯:
g++ -Wall -o LEDtest LEDtest.cpp -lwiringPi //使用C++編程 , -Wall 是爲了使能所有警告,以便發現程序中的問題
gcc -Wall -o LEDtest LEDtest.c -lwiringPi //使用C語言編程
運行:
sudo ./LEDtest
2.引入庫及自檢
#include<wiringPi.h>//引入庫
if(wiringPiSetup() == -1)//利用庫自帶初始化函數自檢
{
printf("setup wiringPi failed !");
return 1;
}
3.設置IO口模式
pinMode(7, OUTPUT);//將wiring庫的7號引腳也就是GPIO.7設置爲輸出模式
//pinMode(7, INPUT);//設置爲輸入模式
輸入模式相比於輸出模式較難,後面的筆記將會介紹
4.設置輸出模式下IO口高低電平
digitalWrite(7, HIGH);//設置爲高電平
//digitalWrite(7, LOW);//設置爲低電平
5.釋放引腳
digitalWrite(7, LOW);//設置爲低電平
總結
以上就是今天要講的內容,本文僅僅簡單介紹了樹莓派GPIO口的操縱,後面的筆記還會詳細講解輸入模式及PWM波形的產生。