重點(diǎn)來(lái)講解一下什么是類庫(kù),如何使用,以及不同的GPIO類庫(kù)的區(qū)別。
什么是類庫(kù)
類庫(kù)是別人寫好的解決某類或某個(gè)問(wèn)題的可以重復(fù)使用的代碼集合。在面向?qū)ο?a href="http://m.xsypw.cn/v/tag/1315/" target="_blank">編程(我們今后會(huì)講到,可以簡(jiǎn)單理解為把程序設(shè)計(jì)為類似現(xiàn)實(shí)世界中各種對(duì)象的方式來(lái)解決問(wèn)題)的編程語(yǔ)言里,類庫(kù)里面包括了很多別人設(shè)計(jì)好的類對(duì)象,可以直接拿來(lái)使用,比如我們代碼里面的sleep方法就來(lái)自于time庫(kù),可以讓程序暫停(睡覺(jué))指定的時(shí)間。有了類庫(kù),我們就不需要所有的事情都自己解決,對(duì)于別人已經(jīng)解決的問(wèn)題,可以直接使用他寫好的類庫(kù),就像我們做機(jī)器人,輪子可以用現(xiàn)成的,不需要我們從原料開(kāi)始做,選擇合適尺寸,材料的輪子就行了,所以編程時(shí)要善于利用類庫(kù),不要做“重復(fù)發(fā)明輪子”的事情。類庫(kù)也像我們搭積木是使用的不同形狀和大小的積木塊,拿來(lái)用就可以做出自己需要的東西。
類庫(kù)可以分為兩大類:
- 編程語(yǔ)言自帶的類庫(kù),比如Python編程語(yǔ)言自帶的OS,sys,logging庫(kù),RPi.GPIO和time也是自帶類庫(kù)。
- 第三方類庫(kù):除上面自帶類庫(kù)外的其他非官方類庫(kù)都是。比如現(xiàn)在機(jī)器學(xué)習(xí),數(shù)據(jù)分析常見(jiàn)的numpy,matplotlib 等。
from與import
Python有2種方式來(lái)使用類庫(kù),分別是import 和from。我們先看看import:
import 類庫(kù)名1 [as 別名1], 類庫(kù)名2 [as 別名2],...
使用這種語(yǔ)法格式的 import 語(yǔ)句,會(huì)導(dǎo)入指定類庫(kù)中的所有成員(包括變量、函數(shù)、類等)。當(dāng)需要使用類庫(kù)中的成員時(shí),需用該類庫(kù)名(或別名)作為前綴,否則 Python 解釋器會(huì)報(bào)錯(cuò)。
from的語(yǔ)法如下:
from 類庫(kù)名 import 成員名1 [as 別名1],成員名2 [as 別名2],...
from只會(huì)導(dǎo)入模塊中指定的成員,而不是全部成員。當(dāng)程序中使用該成員時(shí),無(wú)需附加任何前綴,直接使用成員名(或別名)就可以了。
我們的控制發(fā)光二極管的程序中,可以看到這2種使用類庫(kù)的方式:
import RPi.GPIO as GPIO #需要使用別人寫好的類庫(kù)
from time import sleep #需要使用別人寫好的類庫(kù)
GPIO.setmode(GPIO.BCM)
GPIO.setup(27,GPIO.OUT) #這2句把GPIO27設(shè)置為輸出模式
while True:
GPIO.output(27,True) #在GPIO輸出高電位1,此時(shí)LED亮
sleep(1) #等1秒
GPIO.output(27,False) #在GPIO輸出低電位0,此時(shí)LED滅
sleep(1) #等待1秒
import引入了RPi.GPIO類庫(kù),并命名為別名GPIO,在程序中使用時(shí),都需要加上GPIO這個(gè)別名,如GPIO.setmode(GPIO.BCM).
用from time import sleep引入了sleep,在代碼中使用時(shí),就不需要加上time這里類庫(kù)名,而是直接使用sleep了。
GPIO的類庫(kù)比較
上面講了怎么把類庫(kù)引入程序中,要想用好類庫(kù),還需要學(xué)習(xí)類庫(kù)中各種類,函數(shù)等如何使用,此時(shí)就需要看類庫(kù)對(duì)應(yīng)的官方文檔或者參考相關(guān)的文檔了。
比如RPi.GPIO類庫(kù)的官方文檔網(wǎng)站是:
https://sourceforge.net/p/raspberry-gpio-python/wiki/BasicUsage/
一般這種網(wǎng)站都是英文的,比較考驗(yàn)大家英文水平,此時(shí)可以搜索國(guó)內(nèi)的相應(yīng)中文文檔。
RPi.GPIO庫(kù)
RPi.GPIO是比較老的GPIO庫(kù),使用時(shí)需要注意它有2種GPIO的引腳規(guī)則,分別為BOARD和BCM,使用時(shí)需要先指定用哪種規(guī)則,對(duì)應(yīng)的代碼為:
GPIO.setmode(GPIO.BOARD) #設(shè)置為BOARD模式
# or
GPIO.setmode(GPIO.BCM) #設(shè)置為BCM模式
我們先看看下面的圖片以便理解接下來(lái)的討論。
BOARD模式是在程序中使用的是引腳的物理數(shù)字,也就是第幾個(gè)引腳。BCM模式使用的是引腳的功能定義,比如GPIO27它的物理引腳數(shù)字是13,那么設(shè)置為BOARD模式時(shí),我們?cè)诔绦蛑休斎氲囊_數(shù)字應(yīng)該是13
GPIO.setmode(GPIO.BOARD)
GPIO.setup(13,GPIO.OUT) #把第13引腳(GPIO27)設(shè)置為輸出模式
設(shè)置為BCM模式時(shí),同樣的引腳設(shè)置為輸出模式代碼為:
GPIO.setmode(GPIO.BCM)
GPIO.setup(27,GPIO.OUT) #把GPIO27(第13引腳)設(shè)置為輸出模式
大家使用時(shí)一定要注意區(qū)別。
使用RPi.GPIO庫(kù)時(shí),基本的使用方法是:
- 先設(shè)置引腳模式為BOARD還是BCM
- 設(shè)置引腳為OUTPUT(輸出)還是INPUT(輸入)
- 控制或讀取引腳的數(shù)據(jù)。
(想一想:如果電路連接不變,改用BOARD模式,我們的控制二極管程序應(yīng)該如何修改呢?)
gpiozero庫(kù)
大家可以看到使用RPi.GPIO庫(kù)還是有點(diǎn)麻煩,于是有人在它的基礎(chǔ)上開(kāi)發(fā)了一個(gè)新的類庫(kù),讓大家更方面的來(lái)控制GPIO,這個(gè)類庫(kù)的名字叫做gpiozero,它的使用文檔在這里:
https://gpiozero.readthedocs.io/en/stable/index.html
gpiozero是樹(shù)莓派官方推薦的學(xué)習(xí)GPIO編程的類庫(kù),它創(chuàng)建了LED類用來(lái)控制發(fā)光二極管,Button類用來(lái)讀取按鈕狀態(tài),MotionSensor用于動(dòng)作傳感器等非常多的對(duì)象,我們可以直接使用。
使用它控制發(fā)光二極管的代碼特別簡(jiǎn)單,還是以控制連接到GPIO27引腳的LED為例,代碼如下:
from gpiozero import LED
from time import sleep
red = LED(27) #創(chuàng)建一個(gè)led對(duì)象,命名為red,你可以可以用其他名字
while True:
red.on()
sleep(1)
red.off()
sleep(1)
可以看到gpiozero其實(shí)默認(rèn)使用了BCM模式,只是我們不需要寫在代碼里了。
用gpiozero庫(kù),我們只需要定義一個(gè)led對(duì)象,然后調(diào)用對(duì)象的on, off方法就可以控制發(fā)光二級(jí)管了,對(duì)比RPi.GPIO,簡(jiǎn)單多了。
除了剛才介紹的這2個(gè)類庫(kù),還有其他的GPIO類庫(kù),比如pigpio,這里就不介紹了。
下一講我們來(lái)聊聊如何通過(guò)這2個(gè)類庫(kù)讀取按鈕的狀態(tài)。
-
編程語(yǔ)言
+關(guān)注
關(guān)注
10文章
1952瀏覽量
35785 -
GPIO
+關(guān)注
關(guān)注
16文章
1238瀏覽量
53335 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8481瀏覽量
133872 -
python
+關(guān)注
關(guān)注
56文章
4822瀏覽量
85888
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
使用STM32 HAL庫(kù)進(jìn)行GPIO控制的實(shí)例
不可錯(cuò)過(guò)的三類GPIO硬件設(shè)計(jì)指南!

請(qǐng)問(wèn)GPIO_MODE中的GPIO_MODE_IT_RISING和GPIO_MODE_EVT_RISING的區(qū)別是什么
請(qǐng)問(wèn)這兩類訪問(wèn)有什么區(qū)別?
標(biāo)準(zhǔn)庫(kù)和HAL庫(kù)有啥區(qū)別
GPIO輸出--蜂鳴器
STM32F407標(biāo)準(zhǔn)庫(kù)學(xué)習(xí)筆記-GPIO

STM32G031K LL庫(kù)使用 - GPIO

HAL庫(kù)的GPIO八種工作模式

00_STM32F4學(xué)習(xí)_HAL庫(kù)_GPIO函數(shù)

HAL庫(kù)-GPIO介紹

【STM32】標(biāo)準(zhǔn)庫(kù)與HAL庫(kù)對(duì)照學(xué)習(xí)教程特別篇--GPIO詳講

單片機(jī)GPIO配置不同輸出速度有何區(qū)別?

使用GPIO Zero讓GPIO變得更容易

評(píng)論