人工智能-樹(shù)莓派小車(chē)(2)——GPIO接口介紹

上次我們進(jìn)行了系統(tǒng)的安裝和環(huán)境的配置慕淡,實(shí)現(xiàn)了樹(shù)莓派的第一次喚醒忍疾,以及更改喚醒詞的演示,詳細(xì)見(jiàn)人工智能之我與樹(shù)莓派(1)

今天殿漠,我們進(jìn)行進(jìn)階操作赴精,研究如何通過(guò)語(yǔ)音,來(lái)控制GPIO端口绞幌,進(jìn)而控制LED燈和小車(chē)蕾哟。首先介紹GPIO接口和LED燈的使用。

GPIO接口介紹

樹(shù)莓派與其他的開(kāi)發(fā)板不同的是他有著40個(gè)GPIO口可以用來(lái)外部擴(kuò)展,GPIO指的是General Purpose Input Output (通用輸入/輸出)谭确,是樹(shù)莓派與其他硬件連接起來(lái)的橋梁帘营。

樹(shù)莓派GPIO接口實(shí)物圖

樹(shù)莓派 40PIN 引腳圖

那么如何使用這些接口?開(kāi)源領(lǐng)域具有良好的分享精神逐哈,樹(shù)莓派同樣也集成了各種庫(kù)仪吧,最常用的有三個(gè):

python GPIO

【開(kāi)發(fā)語(yǔ)言】——python
【簡(jiǎn)單介紹】——該庫(kù)更確切的名稱(chēng)為raspberry-gpio-python,樹(shù)莓派官方資料中推薦且容易上手鞠眉。python GPIO是一個(gè)小型的python庫(kù)薯鼠,可以幫助用戶(hù)完成raspberry相關(guān)IO口操作。但是python GPIO庫(kù)還沒(méi)有支持SPI械蹋、I2C或者1-wire等總線(xiàn)接口出皇。除了python GPIO之外,還有眾多的python擴(kuò)展庫(kù)(例如webiopi)哗戈,毫無(wú)疑問(wèn)的說(shuō)python非常適合樹(shù)莓派郊艘,樹(shù)莓派也非常適合python。

wiringPi

【開(kāi)發(fā)語(yǔ)言】——C語(yǔ)言
【簡(jiǎn)單介紹】——wiringPi適合那些具有C語(yǔ)言基礎(chǔ)唯咬,在接觸樹(shù)莓派之前已經(jīng)接觸過(guò)單片機(jī)或者嵌入式開(kāi)發(fā)的人群纱注。wiringPi的API函數(shù)和arduino非常相似,這也使得它廣受歡迎胆胰。作者給出了大量的說(shuō)明和示例代碼狞贱,這些示例代碼也包括UART設(shè)備,I2C設(shè)備和SPI設(shè)備等蜀涨,毫無(wú)疑問(wèn)地說(shuō)wiringPi功能非常強(qiáng)大瞎嬉。

BCM2835 C Library

【開(kāi)發(fā)語(yǔ)言】——C語(yǔ)言
【簡(jiǎn)單介紹】BCM2835 C Library可以理解為使用C語(yǔ)言實(shí)現(xiàn)的相關(guān)底層驅(qū)動(dòng),它給我的感覺(jué)更像STM32的庫(kù)函數(shù)厚柳,BCM2835 C Library的驅(qū)動(dòng)庫(kù)包括GPIO氧枣、SPI和UART等,可以通過(guò)學(xué)習(xí)BCM2835 C Library熟悉BCM2835相關(guān)的寄存器操作别垮。如果有機(jī)會(huì)開(kāi)發(fā)樹(shù)莓派上的linux驅(qū)動(dòng)便监,或自主開(kāi)發(fā)python或PHP擴(kuò)展驅(qū)動(dòng),可以從BCM2835 C Library找到不少的“靈感”碳想。

在這里烧董,基于Python是最簡(jiǎn)單易用的編程語(yǔ)言之一以及其 豐富的擴(kuò)展能力,我當(dāng)然選擇的是Python的RPI.GPIO庫(kù)移袍,下面簡(jiǎn)單介紹一下它的用法:

RPI.GPIO

引腳編號(hào)方式

目前有兩種方式可以通過(guò) RPi.GPIO 對(duì) Raspberry Pi 上的 IO 針腳進(jìn)行編號(hào)解藻。

  • 第一種方式是使用BOARD編號(hào)系統(tǒng)。該方式參考 Raspberry Pi 主板上 P1 接線(xiàn)柱的針腳編號(hào)葡盗。
  • 第二種方式是使用BCM編號(hào)螟左。這是一種較底層的工作方式 – 該方式參考 Broadcom SOC 的通道編號(hào)啡浊。

所有的這兩種編碼方式所對(duì)應(yīng)的位置,你都可以在上面的圖中找到對(duì)應(yīng)的位置胶背。

在使用之前必須指定所使用的方式:

GPIO.setmode(GPIO.BOARD)
GPIO.setmode(GPIO.BCM)

配置通道

在使用某個(gè)接口之前巷嚣,還需要為每個(gè)用于輸入或輸出的針腳配置通道。通道有兩種钳吟,一種是IN廷粒,一種是OUT。

GPIO.setup(channel, GPIO.IN)
GPIO.setup(channel, GPIO.OUT)

通道編號(hào)是基于您所使用的編號(hào)系統(tǒng)所指定的(BOARD 或 BCM)红且。

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

當(dāng)GPIO的狀態(tài)是OUT時(shí)坝茎,還可以指定端口的初始狀態(tài),同樣是兩種HIGH和LOW暇番,對(duì)應(yīng)著輸出高電平和低電平嗤放。

輸入

讀取 GPIO 針腳的值:

GPIO.input(channel)

狀態(tài)可以為 0 / GPIO.LOW / False 或者 1 / GPIO.HIGH / True

輸出

設(shè)置 GPIO 針腳的輸出狀態(tài):

GPIO.output(channel, state)

狀態(tài)可以為 0 / GPIO.LOW / False 或者 1 / GPIO.HIGH / True。

清理

在任何程序結(jié)束后壁酬,養(yǎng)成清理用過(guò)的資源的好習(xí)慣次酌。使用 RPi.GPIO 也同樣需要這樣∮咔牵恢復(fù)所有使用過(guò)的通道狀態(tài)為輸入岳服,可以避免由于短路意外損壞您的 Raspberry Pi 針腳。僅會(huì)清理使用過(guò)的 GPIO 通道希俩。

GPIO.cleanup()

警告

可能樹(shù)莓派的 GPIO 上同時(shí)有多個(gè)腳本/循環(huán)吊宋。因此,如果 RPi.GPIO 檢測(cè)到某個(gè)針腳被設(shè)置為其它用途而非默認(rèn)的狀態(tài)(默認(rèn)為輸入)斜纪,會(huì)在運(yùn)行某腳本時(shí)得到警告消息贫母。

禁用該警告消息(不會(huì)產(chǎn)生副作用文兑,僅會(huì)覆蓋原來(lái)的端口電平信息):

GPIO.setwarnings(False)

通過(guò)GPIO口控制LED燈

安裝RPI.GPIO庫(kù)

# 下載 
$ wget https://pypi.python.org/packages/e2/58/6e1b775606da6439fa3fd1550e7f714ac62aa75e162eed29dbec684ecb3e/RPi.GPIO-0.6.3.tar.gz
# 解壓縮 
$ tar xvzf RPi.GPIO-0.6.3a.tar.gz
# 進(jìn)入解壓之后的目錄 
$ cd RPi.GPIO-0.6.3a 
# 啟動(dòng)安裝 
$ sudo python setup.py install

主代碼

#!/usr/bin/env python
# encoding: utf-8

import RPi.GPIO
import time

# 指定GPIO口的選定模式為GPIO引腳編號(hào)模式
RPi.GPIO.setmode(RPi.GPIO.BCM)

# 指定GPIO14的模式為輸出模式,且初始狀態(tài)為低電平盒刚。
# 如果上面GPIO口的選定模式指定為主板模式的話(huà),這里就應(yīng)該指定8號(hào)而不是14號(hào)绿贞。
RPi.GPIO.setup(14, RPi.GPIO.OUT因块,initial = GPIO.LOW)

# 循環(huán)10次
for i in range(0, 10):
    # 讓GPIO14輸出高電平(LED燈亮)
    RPi.GPIO.output(14, True)
    # 持續(xù)一段時(shí)間
    time.sleep(0.5)
    # 讓GPIO14輸出低電平(LED燈滅)
    RPi.GPIO.output(14, False)
    # 持續(xù)一段時(shí)間
    time.sleep(0.5)

RPi.GPIO.cleanup()
# 清理GPIO口

系列教程

人工智能-樹(shù)莓派小車(chē)(1)——DuerOS語(yǔ)音喚醒
人工智能-樹(shù)莓派小車(chē)(2)——GPIO接口介紹
人工智能-樹(shù)莓派小車(chē)(3)——GPIO控制小車(chē)
人工智能-樹(shù)莓派小車(chē)(4)——通過(guò)語(yǔ)音玩轉(zhuǎn)智能小車(chē)
人工智能-樹(shù)莓派小車(chē)(5)——用微信控制智能小車(chē)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市籍铁,隨后出現(xiàn)的幾起案子涡上,更是在濱河造成了極大的恐慌,老刑警劉巖拒名,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吩愧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡增显,警方通過(guò)查閱死者的電腦和手機(jī)雁佳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人糖权,你說(shuō)我怎么就攤上這事堵腹。” “怎么了星澳?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵疚顷,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我禁偎,道長(zhǎng)腿堤,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任如暖,我火速辦了婚禮释液,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘装处。我一直安慰自己误债,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布妄迁。 她就那樣靜靜地躺著寝蹈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪登淘。 梳的紋絲不亂的頭發(fā)上箫老,一...
    開(kāi)封第一講書(shū)人閱讀 52,268評(píng)論 1 309
  • 那天,我揣著相機(jī)與錄音黔州,去河邊找鬼耍鬓。 笑死,一個(gè)胖子當(dāng)著我的面吹牛流妻,可吹牛的內(nèi)容都是我干的牲蜀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼绅这,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼涣达!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起证薇,我...
    開(kāi)封第一講書(shū)人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤度苔,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后浑度,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體寇窑,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年箩张,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了甩骏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片完残。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖横漏,靈堂內(nèi)的尸體忽然破棺而出谨设,到底是詐尸還是另有隱情,我是刑警寧澤缎浇,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布扎拣,位于F島的核電站,受9級(jí)特大地震影響素跺,放射性物質(zhì)發(fā)生泄漏二蓝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一指厌、第九天 我趴在偏房一處隱蔽的房頂上張望刊愚。 院中可真熱鬧,春花似錦踩验、人聲如沸鸥诽。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)牡借。三九已至,卻和暖如春袭异,著一層夾襖步出監(jiān)牢的瞬間钠龙,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工御铃, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碴里,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓上真,卻偏偏與公主長(zhǎng)得像咬腋,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谷羞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

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