這節課開始,進入樹莓派硬件控制傳感器的世界,感受軟件和硬件結合帶來的無窮魅力。
硬件入手
根據后續課程的安排,需要入手的硬件零件如下:
面包板,杜邦線,led燈,蜂鳴器,溫濕度傳感器,單位數碼管,雙位數碼管
渠道推薦如下:
或者是這個:
以前面一個為例,進入之后,查找以下關鍵字和對應的型號:
面包板:
杜邦線:
選擇“20CM公對母”
led燈:
蜂鳴器:
可以買2個備用。
溫濕度傳感器:
單位數碼管:
雙位數碼管:
GPIO介紹
先來看一下樹莓派主板的一些對外的接口,這是反面的情況:
這是正面的情況:
重點關注上面有40根排針,這就是樹莓派用于控制外部傳感器的接口,稱之為GPIO
40根引腳如何進行編號呢,如果按照物理位置來編號,只要掌握一個規則就容易記?。?/p>
最靠近角上的那一根引腳為2號引腳。旁邊的就是1號引腳,具體請看上圖示意圖。
那么這40根引腳具體的用途和定義是什么呢,請看下面的圖:
這個圖是一個比較全面的一個定義,主要是因為對于這40根引腳有不同的編號規則來定義
雖然不同的規則叫的名字不一樣,但實際的用途是一致的
這里只學習一種編號規則,也就是物理位置編號,這樣更容易進行物理連接。
請看下面這張簡圖:
比如:1號引腳,是輸出1個3.3伏的電壓,也就是如果你拿一個數字萬用表去測量這根引腳的電壓,會一直測出來是3.3伏。
比如:2號引腳,是輸出1個5伏的電壓,也就是如果你拿一個數字萬用表去測量這根引腳的電壓,會一直測出來是5伏。
比如:6號引腳,是一個GND,也就是接地,如果測量電壓的話,就是0伏。
比如:11號引腳,是綠色圖標,旁邊寫著GPIO17,其實這個接口就是普通的接口,可以輸入也可以輸出,如果設置為輸出,則可以輸出高電壓或者低電壓。輸出高電壓就是3.3伏,輸出低電壓就是0伏??梢酝ㄟ^程序來控制。GPIO17是另外一種編號方式而已,這里我們可以忽略。
假如需要一個恒定的電壓輸出到某個電路,則可以選擇3.3v或者5v的相應接口。
假如需要一個變化的電壓輸出到某個電路,則可以選擇綠色的GPIO接口,例如11號,12號,13號,15號等等。
led燈電路原理
學過物理的話,應該可以看懂下面的最簡單的電路圖:
要讓led燈亮起來,需要在led燈的正極輸入一個正的電壓,led燈的負極接地,這樣led燈就可以亮起來了。
根據前面的GPIO接口的定義,選擇6號口GND連接到led燈的負極,然后選擇11號口連接到led燈的正極
這樣,通過程序控制11號口,輸出一個3.3伏的電壓,led燈就亮了,輸出一個0伏電壓,led燈就滅了。
硬件連接
在開始連接硬件電路之前,首先要做的事是將樹莓派電腦關機,并斷開電源。
因為如果樹莓派主板帶電的時候,進行插接電路可能會導致電子元器件的燒毀,所以一定要記住這個原則:
連接電路的時候主板必須斷電。
取出面包板,2根20cm的公對母杜邦線,1個led燈。
將杜邦線的母頭插到樹莓派主板的GPIO接口的6號口和11號口:
將杜邦線另外一頭的公頭插入面包板上:
將led燈的長腳插入11號口線的同一縱排,將led燈的短腳插入6號口線的同一縱排:
插好之后的樣子:
這樣插好之后,全部的電路就連接好了。
這里大家可以自行去網上搜索一下關于面包板的電路圖,看看為何這樣就可以把線和led燈連接起來了。
看看整體連接的效果:
然后,檢查一下電路的接口是否有錯誤,正確無誤之后就可以啟動樹莓派電腦的電源了:
程序編寫
電腦啟動之后,可以編寫程序了:
啟動文本編輯器,輸入以下代碼,文件保存為led.py
程序執行
保存文件之后,運行sudo python led.py看看led燈是否亮了3秒鐘之后熄滅。
如果燈不亮,則按照以下次序進行檢查判斷:
1.首先查看樹莓派主板上的引腳口的編號
是否是11號口,接到面包板上的是對著led燈的長腳
是否是6號口,接到面包板上的是對著led燈的短腳
2.如果接線沒有錯誤,則有可能是led燈壞了
可以采取換一個led燈試試看
或者將11號口的杜邦線的母頭拔出來,插入到1號口,看看led燈是否亮,如果亮了則說明燈和線沒有問題。
3.如果電路都沒有問題,則可能是程序錯誤
逐行檢查代碼,看看是否有遺漏或者錯誤。
4.如果以上都不能讓燈亮起來,那只能去qq群里直接提問了。
看看程序執行結果:
程序每行說明
import RPi.GPIO as GPIO
導入模塊RPI.GPIO,命名為別名為GPIO
如果只寫import RPi.GPIO也是可以的,但是后面用的地方就必須用RPi.GPIO.setmode(RPi.GPIO.BOARD)這樣寫齊全
用別名的方式可以簡化代碼
import time
導入time模塊
GPIO.setmode(GPIO.BOARD)
聲明GPIO使用物理編號方式,也就是11號口就是物理編號11號口
GPIO.setup(11,GPIO.OUT)
聲明11號口是用于輸出模式
為何6號口不用聲明呢,因為它是GND,不可能變化,也就不可能輸入和輸出
GPIO.output(11,True)
設置11號口為高電壓,也就是11號口變為3.3伏
這行代碼執行之后,11號口變為高電壓,那么根據電路原理,led燈就會亮起來
如果后面沒有代碼了,則led燈會一直亮下去,直到程序修改了輸出或者電腦接口斷電
time.sleep(3)
程序休眠3秒鐘
程序休眠期間,led燈會一直亮著
GPIO.output(11,False)
設置11號口為低電壓,也就是11號口變為0伏,和GND一樣
這行代碼執行之后,11號口變為低電壓,那么根據電路原理,led燈就會熄滅
GPIO.cleanup()
將所有的GPIO口狀態恢復為初始化,一般代碼結束都執行此代碼,方便后續代碼運行都是從初始狀態開始。
程序整體的功能很簡單:
導入必須的模塊
設置GPIO的編號模式
設置需要用到的GPIO接口的模式
控制GPIO口的電壓狀態
結合時間模塊運行出自己想要的結果
大家要根據以上基本的代碼以及說明,思考如何修改程序,改變運行功能
課后作業
1.將休眠時間修改為10秒
2.增加8根線和4個led燈,5個led燈依次亮3秒,循環10次結束
往期教程
因為教程是系列教程,前后關聯性非常強,請大家按照_|_微_|_信_|_公_|_眾_|_號_|_【零基礎學編程】的歷史消息發布時間先后次序進行閱讀。
Q_Q_群簡介
歡迎大家加入Q_Q_群 603559164 零基礎學編程,交流學習,共同進步。