引言
這個基礎(chǔ)系列的是為了完成一個智能家居系統(tǒng)。
定時器,顧名思義就是用來計時的。我們常常會設(shè)定計時或鬧鐘,然后時間到了就告訴我們要做什么了。單片機(jī)也是這樣,通過定時器可以完成各種預(yù)設(shè)好的任務(wù)。在這篇文章中,我們將介紹如何在Micropython+ESP32環(huán)境中使用定時器來實(shí)現(xiàn)各種實(shí)用的功能。
本次我們通過定時器讓 LED 周期性每秒閃爍 1 次。
材料準(zhǔn)備
連接電路

編寫代碼
## 定時器的基本原理
在單片機(jī)中,定時器是一種硬件設(shè)備,用于產(chǎn)生精確的時間間隔。當(dāng)定時器到達(dá)設(shè)定的時間值時,它會觸發(fā)一個事件,通知處理器執(zhí)行相應(yīng)的任務(wù)。在Micropython+ESP32中,我們可以使用machine.Timer類來創(chuàng)建和管理定時器。
ESP32-S3 內(nèi)置 RTOS(實(shí)時操作系統(tǒng))定時器,在 machine 的 Timer 模塊中。通過 MicroPython 可以輕松編程使用。我們也是只需要了解其構(gòu)造對象函數(shù)和使用方法即可。
代碼
反轉(zhuǎn)狀態(tài)方法一:

反轉(zhuǎn)狀態(tài)方法二:

上面用兩種不同的方法來實(shí)現(xiàn)狀態(tài)的反轉(zhuǎn)。
代碼簡說
代碼中的注釋很清晰了,還是分四步走,重點(diǎn)說明一下構(gòu)造函數(shù)和使用方法。
*構(gòu)造函數(shù):
t=machine.Timer(id) 構(gòu)建定時器對象
【id】ESP32-S3 有 2 路硬件定時器,id=0~1,也可以定義成-1,即RTOS 虛擬定時器
*使用方法:
tim.init(period,mode,callback) 定時器初始化
- period:單位為 ms;
- mode:2 種工作模式,Timer.ONE_SHOT(執(zhí)行一次)、Timer.PERIODIC(周期
性); - callback:定時器中斷后的回調(diào)函數(shù)。
運(yùn)行程序
定時器到了預(yù)設(shè)指定時間后,也會產(chǎn)生中斷,因此跟外部中斷的編程方式類似。我們已經(jīng)創(chuàng)建了一個每隔1秒翻轉(zhuǎn)一次引腳狀態(tài)的定時器。你可以根據(jù)需要修改定時器的周期和回調(diào)函數(shù)來實(shí)現(xiàn)各種實(shí)用的功能。
總結(jié)
本節(jié)實(shí)驗(yàn)介紹了RTOS定時器的使用方式。雖然使用延時函數(shù)也可以實(shí)現(xiàn)類似的功能,但是相比于延時函數(shù),定時器具有不占用CPU資源的優(yōu)勢。
在傳統(tǒng)的程序設(shè)計中,我們常常使用延時函數(shù)來實(shí)現(xiàn)一些需要等待一段時間的操作。然而,這種方式會阻塞CPU的執(zhí)行,導(dǎo)致其他任務(wù)無法得到及時的處理。而使用定時器可以解決這個問題。
定時器是一種硬件設(shè)備,它可以在指定的時間間隔后觸發(fā)一個事件。通過設(shè)置定時器的周期和回調(diào)函數(shù),我們可以實(shí)現(xiàn)在特定的時間點(diǎn)執(zhí)行某個任務(wù),而不需要占用CPU的資源。這樣,其他的任務(wù)就可以在這段時間內(nèi)繼續(xù)執(zhí)行,提高了系統(tǒng)的并發(fā)性和響應(yīng)性。
在使用定時器時,我們需要先初始化一個定時器對象,并設(shè)置其周期和回調(diào)函數(shù)。然后,通過調(diào)用定時器的啟動方法,使其開始計時。當(dāng)定時器到達(dá)設(shè)定的時間值時,它會觸發(fā)回調(diào)函數(shù)的執(zhí)行,從而實(shí)現(xiàn)我們想要的功能。
相比于延時函數(shù),定時器的好處在于它不會阻塞CPU的執(zhí)行。即使定時器正在計時,CPU仍然可以繼續(xù)處理其他的任務(wù)。這樣可以提高系統(tǒng)的吞吐量和效率。此外,定時器還可以幫助我們實(shí)現(xiàn)更復(fù)雜的時間相關(guān)操作,如周期性的任務(wù)調(diào)度、事件觸發(fā)等。
總之,使用RTOS定時器可以提高系統(tǒng)的性能和效率。通過合理地設(shè)置定時器的周期和回調(diào)函數(shù),我們可以實(shí)現(xiàn)在特定時間點(diǎn)執(zhí)行任務(wù)的需求,而不需要占用CPU的資源。這使得我們能夠更好地管理系統(tǒng)的并發(fā)性和響應(yīng)性,提高系統(tǒng)的可靠性和穩(wěn)定性。
-
定時器
+關(guān)注
關(guān)注
23文章
3368瀏覽量
123586 -
RTOS
+關(guān)注
關(guān)注
25文章
866瀏覽量
122975 -
回調(diào)函數(shù)
+關(guān)注
關(guān)注
0文章
95瀏覽量
12195 -
ESP32
+關(guān)注
關(guān)注
26文章
1194瀏覽量
21669 -
Micropython
+關(guān)注
關(guān)注
1文章
69瀏覽量
5833
發(fā)布評論請先 登錄
如何在ESP32上使用MicroPython
了解esp32環(huán)境搭建以及初識esp32
ESP32硬定時器可以用來掃描HUB75D的LED32*16的顯示屏嗎?
ESP32教程之如何在Windows系統(tǒng)上搭建開發(fā)環(huán)境
ESP32 之 ESP-IDF 教學(xué)(三)——通用硬件定時器(Timer)
ESP32刷入MicroPython以及連接WiFi
arduino / VScode+platformIO搭建esp32/esp8266編譯環(huán)境(一篇足矣)
使用MicroPython開發(fā)ESP32(01):快速入門
如何在ESP32/ESP8266上使用MicroPython
基于ESP32的低功耗藍(lán)牙暗室定時器
構(gòu)建ESP32 MicroPython Wifi的機(jī)器人汽車
如何在Arduino IDE中安裝ESP32開發(fā)環(huán)境
如何在Micropython+ESP32環(huán)境中使用定時器來實(shí)現(xiàn)各種實(shí)用功能
評論