牟曉東
同樣是利用PinPong庫(kù)進(jìn)行Python編程,在樹莓派中的開發(fā)板初始化語(yǔ)句則應(yīng)設(shè)置為“Board("rpi").begin()”,其余的代碼書寫規(guī)則與在Arduino和掌控板中幾乎完全一致。以實(shí)現(xiàn)“雙紅外雙向預(yù)警”功能為例,如何在樹莓派中進(jìn)行Python編程呢?
實(shí)驗(yàn)器材包括:樹莓派3B一塊,古德微擴(kuò)展板一塊,紅外線傳感器兩支,紅色、綠色和黃色LED燈各一支,低電平觸發(fā)蜂鳴器一個(gè),各種杜邦線若干。首先,將樹莓派與擴(kuò)展板正確連接(注意四周緊密接觸);接著,將一支紅外線傳感器直接插入擴(kuò)展板的24號(hào)組引腳,注意VCC、GND和OUT三個(gè)引腳要一一對(duì)應(yīng),另一支紅外線傳感器則通過(guò)杜邦線連接至擴(kuò)展板的23號(hào)組引腳,同樣要注意三個(gè)引腳的正確對(duì)應(yīng)關(guān)系;然后,通過(guò)杜邦線將低電平觸發(fā)蜂鳴器的I/O信號(hào)引腳連接至擴(kuò)展板的25號(hào)引腳組的D(數(shù)字信號(hào))引腳,電源正極VCC端接入擴(kuò)展板的3.3V引腳端,GND端接地;接下來(lái),按照“長(zhǎng)腿正、短腿負(fù)”的規(guī)則,將綠色、紅色和黃色LED燈分別插入擴(kuò)展板的5號(hào)、6號(hào)和12號(hào)引腳;最后,給樹莓派通電,啟動(dòng)操作系統(tǒng)(如圖1)。
在電腦端運(yùn)行Windows的“遠(yuǎn)程桌面連接”,輸入樹莓派的IP地址(192.168.1.120)后點(diǎn)擊“連接”按鈕,進(jìn)入樹莓派的操作系統(tǒng)。
如果是第一次在樹莓派中調(diào)用PinPong庫(kù)進(jìn)行Python編程,需要先進(jìn)行庫(kù)模塊的安裝,方法是點(diǎn)擊左上角的“LX終端”進(jìn)入命令行模式,輸入命令“pip3 install pinpong”后回車,直至最終出現(xiàn)“Successfully installed……”的安裝成功提示即可(如圖2)。
值得一提的是,命令行中的“pip3”表示將PinPong庫(kù)安裝于Python 3環(huán)境(PinPong庫(kù)無(wú)法運(yùn)行于Python 2等低版本環(huán)境),如果命令行中的“pip3”替換為常規(guī)的“pip”,則是試圖將PinPong庫(kù)安裝于樹莓派中可能存在的Python 2中,就會(huì)出現(xiàn)一些異常的錯(cuò)誤提示。
安裝好PinPong庫(kù)后,點(diǎn)擊左上角的樹莓派圖標(biāo),從菜單中依次選擇“編程”-“Thonny Python IDE”,進(jìn)入Python編輯器開始編程:
首先,導(dǎo)入時(shí)間庫(kù):“import time”,再導(dǎo)入PinPong庫(kù)中的Board開發(fā)板及Pin引腳類:“from pinpong.board import Board,Pin”,通過(guò)語(yǔ)句“Board("rpi").begin()”對(duì)樹莓派進(jìn)行初始化;建立Green_LED、Red_LED和Yellow_LED三個(gè)變量,分別賦值為“Pin(Pin.D5,Pin.OUT)”“Pin(Pin.D6,Pin.OUT)”和“Pin(Pin.D12,Pin.OUT)”,作用是對(duì)插入5號(hào)、6號(hào)和12號(hào)引腳的綠色、紅色和黃色LED燈進(jìn)行初始化,聲明其為電平輸出端;接著,建立RedSensor_Front和RedSensor_Up兩個(gè)變量,分別賦值為“Pin(Pin.D23,Pin.IN)”和“Pin(Pin.D24,Pin.IN)”,作用是對(duì)插入23號(hào)和24號(hào)引腳的兩支紅外線傳感器進(jìn)行初始化,聲明其為電平輸入端,二者的監(jiān)測(cè)方向分別為樹莓派的前方(Front)和上方(Up);再建立變量Low_Buzzer,賦值為“Pin(Pin.D25,Pin.OUT)”,作用是對(duì)插入25號(hào)引腳的低電平觸發(fā)蜂鳴器進(jìn)行初始化,聲明其為電平輸出端;語(yǔ)句“Low_Buzzer.value(1)”的作用是關(guān)閉蜂鳴器——因?yàn)闃漭赡J(rèn)的為其加載低電平會(huì)導(dǎo)致其異?!鞍l(fā)聲”(如圖3)。
接下來(lái),編寫“while True”循環(huán)部分主程序代碼:
為兩個(gè)變量RedSensor_Front_value和RedSensor_Up_value分別賦值“RedSensor_Front.read_digital()”和“RedSensor_Up.read_digital()”,作用是讀取兩支紅外線傳感器的數(shù)字信號(hào),注意紅外線傳感器所獲取的信號(hào)如果是1,表示監(jiān)測(cè)范圍內(nèi)無(wú)物體,0的話代表監(jiān)測(cè)到有物體闖入。接著是兩個(gè)if判斷語(yǔ)句,結(jié)構(gòu)非常類似,作用是分別對(duì)前方和上方進(jìn)行紅外線監(jiān)測(cè)結(jié)果判斷和處理:如果條件(RedSensor_Front_value==0)成立,說(shuō)明前方有物體闖入,則依次執(zhí)行熄滅綠色LED燈(Green_LED.value(0))、點(diǎn)亮紅色LED燈(Red_LED.value(1))、蜂鳴器發(fā)聲(Low_Buzzer.value(0))三個(gè)動(dòng)作,同時(shí)在程序交互界面上打印輸出文字提示信息(print("前方預(yù)警!"));如果條件(RedSensor_Up_value
==0)成立,說(shuō)明上方有物體闖入,則依次執(zhí)行熄滅綠色LED燈(Green_LED.value(0))、點(diǎn)亮黃色LED燈(Yellow_LED.value(1))、蜂鳴器發(fā)聲(Low_Buzzer.value(0))三個(gè)動(dòng)作,同時(shí)在程序交互界面上打印輸出文字提示信息(print("上方預(yù)警!"))。
兩個(gè)if判斷語(yǔ)句組執(zhí)行結(jié)束后,添加時(shí)間等待語(yǔ)句“time.sleep(0.3)”,暫停0.3秒鐘;接著,熄滅紅色和黃色警示燈:“Red_LED.value(0)”“Yellow_LED.value(0)”,點(diǎn)亮綠色LED燈:“Green_LED.value(1)”,并且同樣是通過(guò)設(shè)置高電平的方式關(guān)閉低電平觸發(fā)蜂鳴器:“Low_Buzzer.value(1)”,打印輸出文字提示信息:“print("狀態(tài)正?!?)”(如圖4)。
將程序保存為“Two_Way_Alert.py”,點(diǎn)擊上方的“運(yùn)行”按鈕進(jìn)行測(cè)試:正常情況下,前方和上方均無(wú)障礙物和遮擋,蜂鳴器不發(fā)聲,綠色LED燈常亮,同時(shí)程序界面下方會(huì)有“狀態(tài)正?!钡奈淖痔崾荆蝗绻谇胺皆O(shè)置一個(gè)玩偶障礙物的話,蜂鳴器開始嘯叫報(bào)警,紅色LED燈發(fā)光,綠色LED燈熄滅,文字提示信息顯示為“前方預(yù)警!”,直至將障礙物移除后才恢復(fù)為正常狀態(tài);如果在上方遮擋一個(gè)滑桿傳感器來(lái)模擬“闖入者”的話,蜂鳴器又會(huì)開始嘯叫報(bào)警,黃色LED燈發(fā)光,綠色LED燈熄滅,文字提示信息顯示為“上方預(yù)警!”,直至將遮擋物移除后才恢復(fù)為正常狀態(tài)(如圖5)。