引言
這個基礎系列的是為了完成一個智能家居系統。
定時器,顧名思義就是用來計時的。我們常常會設定計時或鬧鐘,然后時間到了就告訴我們要做什么了。單片機也是這樣,通過定時器可以完成各種預設好的任務。在這篇文章中,我們將介紹如何在Micropython+ESP32環境中使用定時器來實現各種實用的功能。
本次我們通過定時器讓 LED 周期性每秒閃爍 1 次。
材料準備
連接電路
編寫代碼
## 定時器的基本原理
在單片機中,定時器是一種硬件設備,用于產生精確的時間間隔。當定時器到達設定的時間值時,它會觸發一個事件,通知處理器執行相應的任務。在Micropython+ESP32中,我們可以使用machine.Timer
類來創建和管理定時器。
ESP32-S3 內置 RTOS(實時操作系統)定時器,在 machine 的 Timer 模塊中。通過 MicroPython 可以輕松編程使用。我們也是只需要了解其構造對象函數和使用方法即可。
代碼
反轉狀態方法一:
反轉狀態方法二:
上面用兩種不同的方法來實現狀態的反轉。
代碼簡說
代碼中的注釋很清晰了,還是分四步走,重點說明一下構造函數和使用方法。
*構造函數:
t=machine.Timer(id) 構建定時器對象
【id】ESP32-S3 有 2 路硬件定時器,id=0~1,也可以定義成-1,即RTOS 虛擬定時器
*使用方法:
tim.init(period,mode,callback) 定時器初始化
- period:單位為 ms;
- mode:2 種工作模式,Timer.ONE_SHOT(執行一次)、Timer.PERIODIC(周期
性); - callback:定時器中斷后的回調函數。
運行程序
定時器到了預設指定時間后,也會產生中斷,因此跟外部中斷的編程方式類似。我們已經創建了一個每隔1秒翻轉一次引腳狀態的定時器。你可以根據需要修改定時器的周期和回調函數來實現各種實用的功能。
總結
本節實驗介紹了RTOS定時器的使用方式。雖然使用延時函數也可以實現類似的功能,但是相比于延時函數,定時器具有不占用CPU資源的優勢。
在傳統的程序設計中,我們常常使用延時函數來實現一些需要等待一段時間的操作。然而,這種方式會阻塞CPU的執行,導致其他任務無法得到及時的處理。而使用定時器可以解決這個問題。
定時器是一種硬件設備,它可以在指定的時間間隔后觸發一個事件。通過設置定時器的周期和回調函數,我們可以實現在特定的時間點執行某個任務,而不需要占用CPU的資源。這樣,其他的任務就可以在這段時間內繼續執行,提高了系統的并發性和響應性。
在使用定時器時,我們需要先初始化一個定時器對象,并設置其周期和回調函數。然后,通過調用定時器的啟動方法,使其開始計時。當定時器到達設定的時間值時,它會觸發回調函數的執行,從而實現我們想要的功能。
相比于延時函數,定時器的好處在于它不會阻塞CPU的執行。即使定時器正在計時,CPU仍然可以繼續處理其他的任務。這樣可以提高系統的吞吐量和效率。此外,定時器還可以幫助我們實現更復雜的時間相關操作,如周期性的任務調度、事件觸發等。
總之,使用RTOS定時器可以提高系統的性能和效率。通過合理地設置定時器的周期和回調函數,我們可以實現在特定時間點執行任務的需求,而不需要占用CPU的資源。這使得我們能夠更好地管理系統的并發性和響應性,提高系統的可靠性和穩定性。
-
定時器
+關注
關注
23文章
3255瀏覽量
115381 -
RTOS
+關注
關注
22文章
819瀏覽量
119889 -
回調函數
+關注
關注
0文章
87瀏覽量
11623 -
ESP32
+關注
關注
18文章
978瀏覽量
17530 -
Micropython
+關注
關注
0文章
68瀏覽量
4788
發布評論請先 登錄
相關推薦
![](https://file1.elecfans.com/web2/M00/88/5D/wKgaomRmqmGAPw29AACiCYP9aWU172.png)
如何在ESP32上使用MicroPython
了解esp32環境搭建以及初識esp32
ESP32 之 ESP-IDF 教學(三)——通用硬件定時器(Timer)
![<b class='flag-5'>ESP32</b> 之 <b class='flag-5'>ESP</b>-IDF 教學(三)——通用硬件<b class='flag-5'>定時器</b>(Timer)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
ESP32刷入MicroPython以及連接WiFi
![<b class='flag-5'>ESP32</b>刷入<b class='flag-5'>MicroPython</b>以及連接WiFi](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
arduino / VScode+platformIO搭建esp32/esp8266編譯環境(一篇足矣)
![arduino / VScode+platformIO搭建<b class='flag-5'>esp32</b>/<b class='flag-5'>esp</b>8266編譯<b class='flag-5'>環境</b>(一篇足矣)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
ESP-32開發踩坑歷程(三)ESP-IDF 定時器使用
![<b class='flag-5'>ESP</b>-32開發踩坑歷程(三)<b class='flag-5'>ESP</b>-IDF <b class='flag-5'>定時器</b>使用](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
使用MicroPython開發ESP32(01):快速入門
![使用<b class='flag-5'>MicroPython</b>開發<b class='flag-5'>ESP32</b>(01):快速入門](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
如何在ESP32/ESP8266上使用MicroPython
![如<b class='flag-5'>何在</b><b class='flag-5'>ESP32</b>/<b class='flag-5'>ESP</b>8266上使用<b class='flag-5'>MicroPython</b>](https://file.elecfans.com/web2/M00/63/77/pYYBAGL_NriAWGiVAAJnszk1qi8528.png)
構建ESP32 MicroPython Wifi的機器人汽車
![構建<b class='flag-5'>ESP32</b> <b class='flag-5'>MicroPython</b> Wifi的機器人汽車](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論