硬件控制入門之樹莓派GPIO操作----樹莓派硬件控制學習筆記(一)

樹莓派硬件控制學習筆記(一)

第一章 樹莓派硬件控制入門之GPIO口的操作


前言

樹莓派是最近越來越熱門的一塊開發板,不僅僅是入門級的開發,在越來越多的專業領域也可以見到它的身影,且它價格低廉,操作便捷,十分適合我們學生黨,所以我打算使用樹莓派開發一款機器人,以下是我的學習筆記。

要想控制一款開發板,首先就要做到控制其IO口的高低電平轉換,而關於樹莓派目前我所知的方法有如下三種,這三種庫都不需要安裝,在官方鏡像中自帶。

在這裏順便提供2020-5-27的樹莓派官方鏡像百度雲下載,也是筆者正在使用的,親測三種方法都可成功。

鏈接:https://pan.baidu.com/s/1zghbDwhnnfVyVY8yMhsJXQ
提取碼:ggs1


一、背景知識:樹莓派引腳編號系統

  1. BOARD編號系統。如下圖中灰色部分,和樹莓派物理引腳對應(USB接口面向自己,引腳絲印圈削角對應左上位置)

  2. BCM編號系統。pigpio庫默認使用,如下圖中黃色部分,不同版本的樹莓派不一樣可能要重新修改代碼。

  3. 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波形的產生。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章