一、前言
千呼萬(wàn)喚始出來(lái),今天,他來(lái)了,他來(lái)了,點(diǎn)燈的教程他終于來(lái)了,作為嵌入式編程世界公認(rèn)最經(jīng)典的入門(mén)程序,把你放在第5講算是給足面子了,要是在其他教程,能活過(guò)第2講?好了,廢話不多說(shuō),盤(pán)他就完了。
GPIO是通用輸入輸出口的意思,是MCU控制外設(shè)最基本的硬件接口。把LED燈接到GPIO上面,通過(guò)控制GPIO的輸出電壓,就可以控制燈的亮滅,我們今天的目標(biāo)是點(diǎn)亮第一個(gè)LED燈。
二、引腳對(duì)照表
要點(diǎn)燈,先要確定燈接在哪個(gè)引腳上面,對(duì)應(yīng)的引腳號(hào)是多少。
要確定硬件引腳對(duì)應(yīng)的軟件引腳號(hào),可以通過(guò)下面這個(gè)指令查看自己的設(shè)備引腳對(duì)照表。
gpio readall
樹(shù)莓派的引腳編碼方式有兩種:wiringPi和BCM,其實(shí)就是對(duì)應(yīng)兩個(gè)不同的庫(kù)函數(shù)。
1)wiringPi:基于WiringPi庫(kù),是樹(shù)莓派平臺(tái)的庫(kù)函數(shù),類似于Arduino里面的wiring。
2)BCM:基于bcm2835庫(kù),是樹(shù)莓派cpu芯片的庫(kù)函數(shù),相當(dāng)于stm32的固件庫(kù)一樣,底層直接操作寄存器。
這里引用一張樹(shù)莓派實(shí)驗(yàn)室的通用引腳圖,這個(gè)圖非常好用,除了對(duì)應(yīng)40pin的樹(shù)莓派之外也兼容了其他版本的硬件。
再引用了一張3B的引腳圖,兩張圖對(duì)比來(lái)看,引腳的對(duì)應(yīng)關(guān)系就非常清晰了。
三、硬件連接
首先我們得準(zhǔn)備一個(gè)LED燈或者帶LED燈的擴(kuò)展板,我這里用的是微雪的多功能擴(kuò)展板Pioneer600(某寶上面找不到,要在微雪官網(wǎng)上面采購(gòu)),總體來(lái)說(shuō),這款擴(kuò)展板性價(jià)比不算高,但是對(duì)于初學(xué)者來(lái)說(shuō)很友好,接口是pin對(duì)pin的,可以直接接上樹(shù)莓派,常用的外設(shè)也比較全(LEDUARTIICSPI按鍵顯示屏),如果能把把這些外設(shè)都調(diào)完,那去做一些小項(xiàng)目是基本沒(méi)有問(wèn)題的了。(特別說(shuō)明:這不是在恰飯哈)
把LED接到樹(shù)莓派任意一個(gè)GPIO口上面(如果是用的是普通插件LED燈,還要串一個(gè)1k左右的電阻,不然可能會(huì)把燈燒掉)。
四、編寫(xiě)程序
1、編程方式簡(jiǎn)述
樹(shù)莓派控制IO口的方式有很多種。
1:通過(guò)shell命令直接控制
2:通過(guò)Linux腳本控制
3:通過(guò)wiringPi庫(kù)控制
4:通過(guò)bcm2835庫(kù)控制
控制的方式有多種,編程的語(yǔ)音也有多種,C、C++、python、Java等等,所以就導(dǎo)致很多初學(xué)者無(wú)從下手,到底應(yīng)該選擇哪種方式呢?我本身從事的工作是以C語(yǔ)言為主的,一開(kāi)始我是想從C開(kāi)始突破,但是經(jīng)過(guò)我一段時(shí)間的摸索,我認(rèn)為樹(shù)莓派最好的方式應(yīng)該是Linux系統(tǒng)+python編程。確定了路線之后,我后面的編程教程也都是以python編程為主。
2、python編程
python語(yǔ)法不懂的同學(xué),可以先去看下其他的教程,了解一下python最基本的語(yǔ)法,然后再邊學(xué)邊做。
用python控制樹(shù)莓派外設(shè)是通過(guò)python類庫(kù)實(shí)現(xiàn)的,比如樹(shù)莓派系統(tǒng)本身集成的RPi.GPIO就可以控制GPIO口。
樹(shù)莓派官方的鏡像基本都是自帶python工具的,所以一般是不用再另外安裝軟件了。
1)新建py文件
新建led.py文件
touch led.py
2)編寫(xiě)程序
打開(kāi)led.py并編寫(xiě)以下示例程序:
#!/usr/bin/python
#-*- coding:utf-8 -*-
import RPi.GPIO as GPIO #導(dǎo)入RPi.GPIO庫(kù)
import time #導(dǎo)入time庫(kù)
GPIO.setwarnings(False) #禁用警告(可以不用)
GPIO.setmode(GPIO.BCM) #使用BCM編碼的引腳號(hào)
GPIO.setup(26,GPIO.OUT) #根據(jù)自己LED燈接的引腳配置,我這里是26腳
try:
while True: #wile循環(huán)
GPIO.output(26,GPIO.HIGH) #引腳拉高
time.sleep(1) #延時(shí)1s
GPIO.output(26,GPIO.LOW) #引腳拉低
time.sleep(1) #延時(shí)1s
except:
print("except")
GPIO.cleanup()
注:
#!/usr/bin/env python,定義python解析腳本的絕對(duì)路徑
#-*- coding:utf-8 -*-,python文件為utf-8格式,否則無(wú)法寫(xiě)入中文注釋
編寫(xiě)代碼的方式有很多種,根據(jù)自己的喜歡選擇一種即可。
方式1:在樹(shù)莓派命令窗口編輯
vim led.py // 用vim編輯
nano led.py // 用nano編輯
vim編輯示例如下:
方式2:在樹(shù)莓派可視化界面編輯
方式3:在PC端打開(kāi)并編輯
參考我上一講介紹的文件共享。
樹(shù)莓派從零開(kāi)始快速入門(mén)第4講——文件共享
3)運(yùn)行
運(yùn)行方式有兩種方式。
方式1:命令行運(yùn)行
python led.py
python led.py開(kāi)始運(yùn)行,Crtl+C結(jié)束運(yùn)行。
方式2:可視化界面運(yùn)行
注:如果RPi.GRIO檢測(cè)到一個(gè)引腳已經(jīng)被設(shè)置成了非默認(rèn)值,那運(yùn)行的時(shí)候會(huì)彈出一個(gè)警告信息。
可以在配置GPIO模式之前調(diào)用以下代碼即可禁用警告,當(dāng)然,不禁用也是沒(méi)關(guān)系的,不影響代碼運(yùn)行。
GPIO.setwarnings(False)
運(yùn)行結(jié)果:
LED每間隔1s閃爍一次。
五、結(jié)束語(yǔ)
點(diǎn)燈儀式就此結(jié)束,經(jīng)過(guò)對(duì)LED的調(diào)試,相信你對(duì)樹(shù)莓派的編程方式已經(jīng)有了一定的了解。萬(wàn)事開(kāi)頭難,我覺(jué)得樹(shù)莓派最容易讓人產(chǎn)生疑惑的是它的編程方式,因?yàn)榛犹嗔?,你?a class="article-link" target="_blank" href="/manufacturer/1000050/">百度上搜索樹(shù)莓派的編程方式,會(huì)得到很多種答案,都不知道該信誰(shuí),關(guān)于這個(gè),我認(rèn)為最好的方式是Linux系統(tǒng)+python編程。選擇一種路線入門(mén)很重要,明確了自己的路線,就可以邁出新手村了,后面無(wú)非就是打怪升級(jí)。
想了解更多樹(shù)莓派的知識(shí)可以關(guān)注我,后續(xù)我會(huì)繼續(xù)出更多的教程。