“樹莓派”是一塊僅為信用卡般大小的微型電腦,可用于嵌入式開發(fā)和計算機開源硬件編程,目前在中小學創(chuàng)客教育活動領域有著極為廣泛的應用;Python語法精簡,而且能夠調(diào)用功能強大的各種“庫”模塊,比如樹莓派通過RPi.GPIO庫可以非常方便地控制各種外設(LED燈等)。
1.實驗目的
認識和連接樹莓派,通過Python編程控制LED燈發(fā)光和熄滅。
2.實驗器材及連接
樹莓派(帶電源線)主板一塊,紅色LED燈一支,兩根母對母杜邦線,一臺聯(lián)網(wǎng)電腦。
樹莓派的兩排引腳可以連接多種外設,共40針,其物理引腳的BOARD編碼是從1到40。排列規(guī)律是:按字母正向標注平放樹莓派后,下面一列為奇數(shù)序號,從左至右分別是1、3、5……37、39;上面一列為偶數(shù)序號,從左至右分別是2、4、6……38、40。
通過Windows的“遠程桌面連接”登錄樹莓派后,在LX終端命令行窗口(“pi@raspberrypi:~$”提示符)中輸入“gpio readall”命令,可顯示出所有的引腳編號及功能對應關系(如圖1)。Python語言編程庫使用的是BCM編碼(依據(jù)是BCM2835芯片的GPIO寄存器編號)。按照功能來分類,除了8個GND(接地)端、3.3V和5V的電源正極各兩個之外,最主要的就是17個可編程的GPIO(General Purpose Input/Output:“通用型輸入輸出接口”),其BCM編碼分別是0-7、21-29兩組(注意:物理引腳位置并不是連續(xù)分布的),可以用來驅(qū)動LED燈、傳感器、舵機等各種外設。
使用樹莓派GPIO引腳與外設連接時必須要仔細,在確定好BCM編碼號后再與物理引腳一一對應。比如:我們要將LED燈的長引腳(正極)接至樹莓派BCM編碼為5的引腳,對應的物理引腳BOARD編碼就是29號;短引腳(負極)任意選擇一個GND接地引腳即可(比如25號),通過杜邦線連接好(如圖2)。
3.實驗步驟
(1)在LX終端命令行模式中控制LED燈
連接好實驗設備后給樹莓派通電開機,然后通過“遠程桌面連接”進入樹莓派系統(tǒng)(輸入IP地址),點擊LX終端進入命令行模式。
首先輸入“python”后回車,進入Python界面(命令提示符變?yōu)椤?>>”);接著,輸入“import RPi.GPIO as GPIO”命令,作用是以GPIO為名導入RPi.GPIO庫,無“回顯”錯誤提示,說明Python已經(jīng)成功加載了RPi.GHIO庫(出錯的話要進行更新或安裝);然后輸入“GPIO.setmode(GPIO.BCM)”命令,作用是設置樹莓派的引腳控制方式為BCM編碼模式——紅色LED燈的正極已經(jīng)連接至BCM編碼5號,Python編程控制時通過數(shù)字“5”就能夠進行控制(而并非物理引腳BOARD編碼“29”);接著,輸入命令“GPIO.setup(5,GPIO.OUT)”,設置5號GPIO為輸出端(GPIO.OUT);再輸入“GPIO.output(5,GPIO.HIGH)”命令,設置5號GPIO輸出高電平(GPIO.HIGH)。
回車執(zhí)行命令后,樹莓派的LED燈就會被“點亮”(如圖3)。
如何熄滅LED燈呢?非常簡單,只須將5號GPIO的輸出由高電平再修改為低電平即可,對應的命令是“GPIO.output(5,GPIO.LOW)”,回車執(zhí)行后,LED燈熄滅。
(2)在Python IDE模式中控制LED燈
在LX終端命令行模式中控制LED燈的方式需要命令的逐條輸入和執(zhí)行,不適合較為復雜的程序,此時可通過“編程”-“Thonny Python IDE”進入Python的IDE編輯窗口來進行程序的編寫和調(diào)試運行。命令如下:
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(5,GPIO.OUT)
GPIO.output(5,GPIO.HIGH)
time.sleep(3)
GPIO.output(5,GPIO.LOW)
GPIO.cleanup()
其中的“import time”命令的作用是導入時間庫,因為程序中使用了sleep語句來控制LED燈持續(xù)發(fā)光3秒鐘;GPIO.cleanup()語句的作用是釋放程序所引用的GPIO引腳,并且清除所設置的BCM編碼引腳編號規(guī)則。將程序保存為LED.py,點擊Run按鈕調(diào)試運行,LED燈發(fā)光3秒后熄滅。如果將該程序放置于循環(huán)結構中(比如循環(huán)10次),并且在GPIO.output(5,GPIO.LOW)后也添加一條time.sleep(1)命令,LED燈就會閃爍起來:亮3秒再熄滅1秒、再亮3秒熄滅1秒……
試想一下:如果使用六根杜邦線分別將紅黃綠三支不同顏色的LED燈連接至樹莓派的話,是不是可以在IDE中編寫循環(huán)結構來實現(xiàn)十字路口紅綠燈效果呢?