樹莓派硬體控制學習筆記(一)
第一章 樹莓派硬體控制入門之GPIO口的操作文章目錄
- 樹莓派硬體控制學習筆記(一)
- 前言
- 一、背景知識:樹莓派引腳編號系統
- 二、使用樹莓派官方自帶的RPi.GPIO 庫(Python)操縱GPIO口
- 1.引入庫并命名要修改的GPIO口
- 2.配置IO口為輸入模式
- 3.配置IO口為輸出模式
- 4.輸出模式下的引腳高低電平操縱
- 5.釋放引腳
- 三、使用Pigpio庫(Python)操縱GPIO口
- 1.啟動守護行程
- 2.引入庫
- 2.設定輸出模式下電平
- 3.釋放引腳
- 四、使用WiringPi庫(C語言)操縱GPIO口
- 1.gcc編譯器生成命令
- 2.引入庫及自檢
- 3.設定IO口模式
- 4.設定輸出模式下IO口高低電平
- 5.釋放引腳
- 總結
前言
樹莓派是最近越來越熱門的一塊開發板,不僅僅是入門級的開發,在越來越多的專業領域也可以見到它的身影,且它價格低廉,操作便捷,十分適合我們學生黨,所以我打算使用樹莓派開發一款機器人,以下是我的學習筆記,
要想控制一款開發板,首先就要做到控制其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波形的產生,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/255605.html
標籤:其他
