基于樹莓派的python GPIO編程-常用函數(shù)綜合整理

Hello,朋友們大家好紊浩,歡迎大家來到LIUSE網(wǎng)絡(luò)。

隨著Mini型PC越來越多疗锐,與之而來的創(chuàng)客也豐富起來坊谁,比如說Arduino就是一個非常好里例子。

不過滑臊,Arduino畢竟是一塊適合入門型的基礎(chǔ)開發(fā)板口芍,無論是從性能上,還是處理復(fù)雜問題的實現(xiàn)上雇卷,其本身都是有限的鬓椭。所以有些時候我們會考慮成本更高的卡片式PC颠猴,類似于樹莓派、香蕉派小染、橙子派等等翘瓮。

話雖然可以這么說,但作為PC跟GPIO一體的板卡氧映,有些朋友剛拿到手確實是不知道何從下手,更不知道如何去控制各個GPIO引腳脱货,那今天的文章岛都,鄙人就綜合的說一下常用的函數(shù)等等,其實好多地方跟Arduino的代碼是很相似的振峻。

在這里還是要推薦下我自己建的Python開發(fā)學(xué)習(xí)群:483546416臼疫,群里都是學(xué)Python開發(fā)的,如果你正在學(xué)習(xí)Python 扣孟,小編歡迎你加入烫堤,大家都是軟件開發(fā)黨,不定期分享干貨(只有Python軟件開發(fā)相關(guān)的)凤价,包括我自己整理的一份2018最新的Python進階資料和高級開發(fā)教程鸽斟,歡迎進階中和進想深入Python的小伙伴

先說庫文件:

樹莓派我們編程一般都直接用高效的python,針對于GPIO編程利诺,python也是有這一方面的庫的富蓄,這里最有名也是最常用的就是RPI.GPIO了。這個庫是專門為樹莓派GPIO編程所設(shè)計的慢逾,利用它你可以愉快的像Arduino那樣輕松控制GPIO管腳立倍。

安裝:

sudo apt-get -y python-pip #安裝pip

sudo pip install rpi.gpio #安裝RPI.GPIO

安裝完成后在實際運用的時候,我們也會像arduino那樣去設(shè)置輸入輸出侣滩,設(shè)置高低電平口注,獲取針腳值等等,那下面我就把整理的內(nèi)容函數(shù)都貼出來君珠。

在這說一下管腳寝志,拿到樹莓派之后你會發(fā)現(xiàn)板子上有兩排管腳,這對應(yīng)這什么呢策添?請看下圖:

(管腳對應(yīng))

當(dāng)然如果說你的版本不同可能會略有差別澈段,你同樣可以使用gpio?readall命令來打印出所有管腳:

(打印管腳)

好,做完上面的拓?fù)浣⒃埽覀儊碇v一下關(guān)于GPIO編程的一些常用函數(shù)败富。

1.導(dǎo)入庫:

import RPi.GPIO as GPIO

2.設(shè)置引腳模式:

GPIO.setmode(GPIO.BMC/BOARD) #BMC或者BOARD模式

3.設(shè)置引腳為輸入:

GPIO.setup(pin,GPIO.IN)

4.設(shè)置引腳為輸出:

GPIO.setup(pin,GPIO.OUT)

5.設(shè)置初始化高電平:

GPIO.setup(pin,GPIO.OUT,initial=GPIO.HIGH)

6.設(shè)置初始化為低電平:

GPIO.setup(pin,GPIO.OUT,initial=GPIO.LOW)

當(dāng)然python的好處是可以創(chuàng)建一個列表,然后將列表帶入函數(shù)中摩窃,使其一次性執(zhí)行多個針腳的輸入輸出兽叮,如:

PinList=[pin1,pin2,pin3]

GPIO.setup(PinList,GPIO.IN)

通過創(chuàng)建一個列表將列表中加入引腳的定義芬骄,實現(xiàn)多引腳同時設(shè)定為輸入。

讀取輸入值:

GPIO.input(pinx) #input()方法可以讀取pinx引腳的值

當(dāng)然前提是你的引腳接了一些傳感器鹦聪,比如溫度傳感器账阻,光線傳感器等等。

上下拉:

先說什么是上下拉

上拉和下拉是指GPIO輸出高電位(上拉)還是低電位(下拉)泽本。上拉就是輸入高電平淘太,然后接一個上拉電阻(起保護作用),知道上拉就表示該端口在默認(rèn)情況下輸入為高電平规丽。下拉就是輸入低電平蒲牧,然后接一個下拉電阻。

我們在做管腳的上下拉時赌莺,在電路設(shè)計上一般都是加上下拉電阻冰抢,但在樹莓派身上如何不改變電路通過python去控制呢?

在python的GPIO初始化上可以用GPIO.setup(pinx,GPIO.IN,pull_up_down=GPIO.PUD_UP/GPIO.DOWN)來控制上下拉艘狭。

設(shè)置中斷:

設(shè)置終端通常有兩種方法挎扰,一種是wait_for_edge(),另一種為add_event_detect()巢音,我們下面來介紹一下這兩個中斷遵倦。

1.wait_for_edge():用于檢測到邊沿之前阻止程序運行

舉個例子:

channel = GPIO.wait_for_edge(channel, GPIO_RISING, timeout=5000)

if channel is None:

print('Timeout occurred')

else:

print('Edge detected on channel', channel)

延時5秒,如果超時官撼,程序繼續(xù)執(zhí)行骇吭,如果沒有超時將繼續(xù)等待。

2.add_event_detect():對一個引腳進行監(jiān)聽歧寺,一旦引腳輸入發(fā)生了改變燥狰,調(diào)用event_detected()函數(shù)會返回True

舉個例子:

GPIO.add_event_detect(channel, GPIO.RISING)

do_something()

if GPIO.event_detected(channel):

print('Button pressed')

add_event_detect()多用于循環(huán)狀態(tài),并且它不會錯過循環(huán)中輸入狀態(tài)的改變斜筐,多用在PyQt上龙致。

PWM脈沖調(diào)節(jié):

PWM這個多用在控制電機上,特別是對我們做樹莓派小車對小車的控制上有很大的幫助顷链。

我們用一個實例去說明:

Pwm=GPIO.PWM(pin,frequence) #創(chuàng)建PWM實例

Pwm.start(dc) #啟動PWM dc值(0.0

Pwm.ChangeFrequency(freq) #改變PWM頻率

Pwm.ChangeDutyCycle(dc) # 改變PWM的占空比0.0<=dc <=100.

Pwm.stop() #停止PWM

后面我們在說幾個常用的函數(shù)目代,比如輸出、等待嗤练,并寫一個控制小燈閃爍的Demo

GPIO口輸出值:

GPIO.output(pinx,1/0)

1對應(yīng)GPIO.HIGH(高電平)0對應(yīng)GPIO.LOW(低電平)

延時函數(shù):

time.sleep(秒數(shù))

此函數(shù)為time庫里面的榛了,你要想使用必須在之前import time

今天暫且介紹這么多,我們下面寫一個控制LED小燈閃爍的實例:

import RPi.GPIO as GPIO //引入函數(shù)庫

import time

RPi.GPIO.setmode(GPIO.BOARD) //設(shè)置引腳編號規(guī)則

RPi.GPIO.setup(11, RPi.GPIO.OUT) //將11號引腳設(shè)置成輸出模式

while True

GPIO.output(channel, 1) //將引腳的狀態(tài)設(shè)置為高電平煞抬,此時LED亮了

time.sleep(1) //程序休眠1秒鐘霜大,讓LED亮1秒

GPIO.output(channel, 0) //將引腳狀態(tài)設(shè)置為低電平,此時LED滅了

time.sleep(1) //程序休眠1秒鐘革答,讓LED滅1秒

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末战坤,一起剝皮案震驚了整個濱河市曙强,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌途茫,老刑警劉巖碟嘴,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異囊卜,居然都是意外死亡娜扇,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門栅组,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雀瓢,“玉大人,你說我怎么就攤上這事笑窜≈略铮” “怎么了登疗?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵排截,是天一觀的道長。 經(jīng)常有香客問我辐益,道長断傲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任智政,我火速辦了婚禮认罩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘续捂。我一直安慰自己垦垂,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布牙瓢。 她就那樣靜靜地躺著劫拗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪矾克。 梳的紋絲不亂的頭發(fā)上页慷,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機與錄音胁附,去河邊找鬼酒繁。 笑死,一個胖子當(dāng)著我的面吹牛控妻,可吹牛的內(nèi)容都是我干的州袒。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼弓候,長吁一口氣:“原來是場噩夢啊……” “哼稳析!你這毒婦竟也來了洗做?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤彰居,失蹤者是張志新(化名)和其女友劉穎诚纸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體陈惰,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡畦徘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了抬闯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片井辆。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖溶握,靈堂內(nèi)的尸體忽然破棺而出杯缺,到底是詐尸還是另有隱情,我是刑警寧澤睡榆,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布萍肆,位于F島的核電站,受9級特大地震影響胀屿,放射性物質(zhì)發(fā)生泄漏塘揣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一宿崭、第九天 我趴在偏房一處隱蔽的房頂上張望亲铡。 院中可真熱鬧,春花似錦葡兑、人聲如沸奖蔓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吆鹤。三九已至,卻和暖如春蜕劝,著一層夾襖步出監(jiān)牢的瞬間檀头,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工岖沛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留暑始,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓婴削,卻偏偏與公主長得像廊镜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子唉俗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容