引言
這個(gè)基礎(chǔ)系列的是為了完成一個(gè)智能家居系統(tǒng)。
定時(shí)器,顧名思義就是用來(lái)計(jì)時(shí)的。我們常常會(huì)設(shè)定計(jì)時(shí)或鬧鐘,然后時(shí)間到了就告訴我們要做什么了。單片機(jī)也是這樣,通過(guò)定時(shí)器可以完成各種預(yù)設(shè)好的任務(wù)。在這篇文章中,我們將介紹如何在Micropython+ESP32環(huán)境中使用定時(shí)器來(lái)實(shí)現(xiàn)各種實(shí)用的功能。
本次我們通過(guò)定時(shí)器讓 LED 周期性每秒閃爍 1 次。
材料準(zhǔn)備
連接電路
編寫代碼
## 定時(shí)器的基本原理
在單片機(jī)中,定時(shí)器是一種硬件設(shè)備,用于產(chǎn)生精確的時(shí)間間隔。當(dāng)定時(shí)器到達(dá)設(shè)定的時(shí)間值時(shí),它會(huì)觸發(fā)一個(gè)事件,通知處理器執(zhí)行相應(yīng)的任務(wù)。在Micropython+ESP32中,我們可以使用machine.Timer
類來(lái)創(chuàng)建和管理定時(shí)器。
ESP32-S3 內(nèi)置 RTOS(實(shí)時(shí)操作系統(tǒng))定時(shí)器,在 machine 的 Timer 模塊中。通過(guò) MicroPython 可以輕松編程使用。我們也是只需要了解其構(gòu)造對(duì)象函數(shù)和使用方法即可。
代碼
反轉(zhuǎn)狀態(tài)方法一:
反轉(zhuǎn)狀態(tài)方法二:
上面用兩種不同的方法來(lái)實(shí)現(xiàn)狀態(tài)的反轉(zhuǎn)。
代碼簡(jiǎn)說(shuō)
代碼中的注釋很清晰了,還是分四步走,重點(diǎn)說(shuō)明一下構(gòu)造函數(shù)和使用方法。
*構(gòu)造函數(shù):
t=machine.Timer(id) 構(gòu)建定時(shí)器對(duì)象
【id】ESP32-S3 有 2 路硬件定時(shí)器,id=0~1,也可以定義成-1,即RTOS 虛擬定時(shí)器
*使用方法:
tim.init(period,mode,callback) 定時(shí)器初始化
- period:單位為 ms;
- mode:2 種工作模式,Timer.ONE_SHOT(執(zhí)行一次)、Timer.PERIODIC(周期
性); - callback:定時(shí)器中斷后的回調(diào)函數(shù)。
運(yùn)行程序
定時(shí)器到了預(yù)設(shè)指定時(shí)間后,也會(huì)產(chǎn)生中斷,因此跟外部中斷的編程方式類似。我們已經(jīng)創(chuàng)建了一個(gè)每隔1秒翻轉(zhuǎn)一次引腳狀態(tài)的定時(shí)器。你可以根據(jù)需要修改定時(shí)器的周期和回調(diào)函數(shù)來(lái)實(shí)現(xiàn)各種實(shí)用的功能。
總結(jié)
本節(jié)實(shí)驗(yàn)介紹了RTOS定時(shí)器的使用方式。雖然使用延時(shí)函數(shù)也可以實(shí)現(xiàn)類似的功能,但是相比于延時(shí)函數(shù),定時(shí)器具有不占用CPU資源的優(yōu)勢(shì)。
在傳統(tǒng)的程序設(shè)計(jì)中,我們常常使用延時(shí)函數(shù)來(lái)實(shí)現(xiàn)一些需要等待一段時(shí)間的操作。然而,這種方式會(huì)阻塞CPU的執(zhí)行,導(dǎo)致其他任務(wù)無(wú)法得到及時(shí)的處理。而使用定時(shí)器可以解決這個(gè)問題。
定時(shí)器是一種硬件設(shè)備,它可以在指定的時(shí)間間隔后觸發(fā)一個(gè)事件。通過(guò)設(shè)置定時(shí)器的周期和回調(diào)函數(shù),我們可以實(shí)現(xiàn)在特定的時(shí)間點(diǎn)執(zhí)行某個(gè)任務(wù),而不需要占用CPU的資源。這樣,其他的任務(wù)就可以在這段時(shí)間內(nèi)繼續(xù)執(zhí)行,提高了系統(tǒng)的并發(fā)性和響應(yīng)性。
在使用定時(shí)器時(shí),我們需要先初始化一個(gè)定時(shí)器對(duì)象,并設(shè)置其周期和回調(diào)函數(shù)。然后,通過(guò)調(diào)用定時(shí)器的啟動(dòng)方法,使其開始計(jì)時(shí)。當(dāng)定時(shí)器到達(dá)設(shè)定的時(shí)間值時(shí),它會(huì)觸發(fā)回調(diào)函數(shù)的執(zhí)行,從而實(shí)現(xiàn)我們想要的功能。
相比于延時(shí)函數(shù),定時(shí)器的好處在于它不會(huì)阻塞CPU的執(zhí)行。即使定時(shí)器正在計(jì)時(shí),CPU仍然可以繼續(xù)處理其他的任務(wù)。這樣可以提高系統(tǒng)的吞吐量和效率。此外,定時(shí)器還可以幫助我們實(shí)現(xiàn)更復(fù)雜的時(shí)間相關(guān)操作,如周期性的任務(wù)調(diào)度、事件觸發(fā)等。
總之,使用RTOS定時(shí)器可以提高系統(tǒng)的性能和效率。通過(guò)合理地設(shè)置定時(shí)器的周期和回調(diào)函數(shù),我們可以實(shí)現(xiàn)在特定時(shí)間點(diǎn)執(zhí)行任務(wù)的需求,而不需要占用CPU的資源。這使得我們能夠更好地管理系統(tǒng)的并發(fā)性和響應(yīng)性,提高系統(tǒng)的可靠性和穩(wěn)定性。
-
定時(shí)器
+關(guān)注
關(guān)注
23文章
3228瀏覽量
114166 -
RTOS
+關(guān)注
關(guān)注
21文章
808瀏覽量
119299 -
回調(diào)函數(shù)
+關(guān)注
關(guān)注
0文章
87瀏覽量
11522 -
ESP32
+關(guān)注
關(guān)注
17文章
944瀏覽量
16906 -
Micropython
+關(guān)注
關(guān)注
0文章
68瀏覽量
4692
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論