基礎點燈
按上一節(jié)一般新建好文件夾選好串口后,輸入下面的代碼
import time #引入時間模塊,才可以用延時函數(shù)
from machine import Pin #引入引腳模塊,才可以控制esp32引腳
led = Pin(2,Pin.OUT) #定義led是第二腳,一般esp32板上的led連在第二腳
while True: #主循環(huán)
led.value(1) #下面就是讓燈亮0.5秒再滅0.5秒,一直循環(huán)
time.sleep_ms(500)
led.value(0)
time.sleep_ms(500)
按下DownloadAndRun,搞定!
這里不講解python的語法,其實我很建議大家先去實現(xiàn)效果,然后再去根據(jù)這個效果的代碼學習。不建議一開始就先學一堆語法,這樣很容易消磨掉興趣。大家手頭上有多的led燈,可以試著實現(xiàn)跑馬燈,無非是一個引腳高電平,然后延時一下,再下一個引腳高電平,再延時一下…把它寫在主循環(huán)里一直循環(huán),ok!
(題外話:單片機的程序基本都是先初始化,然后進入主循環(huán),復雜一點可能會有一些中斷響應,但都是在主循環(huán)里一直循環(huán)。)
呼吸燈
我一直覺得呼吸燈是點燈里面最浪漫好玩的一個,一定要學會它的思路
from machine import Pin, PWM #引入模塊,不多說
from time import sleep
frequency = 5000
led = PWM(Pin(2), frequency) #定義引腳2為PWM輸出,頻率為5000
while True:
for duty_cycle in range(0, 1024): #讓占空比從0遞增到1023
led.duty(duty_cycle) #引腳2輸出PWM電平
sleep(0.005) #當前亮度持續(xù)5ms
for duty_cycle in range(1024, 0, -1): #讓占空比從1023遞減到0
led.duty(duty_cycle) #the same
sleep(0.005)
呼吸燈的實現(xiàn)離不開占空比這個概念,就是上面英文的duty_cycle。占空比就是引腳上的高電平與一個周期的比值,你可能好奇哪來的周期?比如上面的點燈,0.5秒亮0.5秒滅,那么周期就是1秒,占空比為50%。
解釋完占空比,來說說燈的亮度如何來調節(jié),正常的做法是跟它串聯(lián)一個電阻,電阻越大燈越暗是吧,但這樣的實現(xiàn)方式太古板且單片機控制不了。當我們快速地,非??焖俚卦谝粋€引腳以占空比50%變換電平,這個變換的頻率一般要大于24hz(24幀),人眼就判斷不了你什么時候開什么時候關,只會看到一個整體呈現(xiàn)出來的效果,那就是亮度變?yōu)樵镜?0%,如果占空比變?yōu)?0%,那亮度也變成30%。
(動態(tài)顯示、開關升壓等都是差不多原理)
PWM就是調占空比的意思,要定義引腳為PWM輸出,才可以調節(jié)它的占空比。
在micropython里引腳的占空比100%定義為1023,所以占空比的范圍是0-1023,ok,我們先讓引腳輸出5ms的占空比1電平,再輸出5ms的占空比2電平…一直到占空比1023,(即占空比100%),這樣就是一個緩慢點亮的燈,再相反,讓它慢慢熄滅,一直循環(huán),搞定!
如果理解了,可以把跑馬燈程序改改,變成呼吸跑馬燈;或者改變不同顏色的燈呼吸的速度做出絢麗效果,你就是點燈大師!
附上其他文章的鏈接:
《吃白菜一樣用micropython玩esp32(一)—— 搭建環(huán)境》
《吃白菜一樣用micropython玩esp32(三)—— 觸摸按鍵、ADC》
《吃白菜一樣用micropython玩esp32(四)—— siri遠程控制點燈》