| ESP32 教學 | MicroPython | RTC 實時時鐘 Real Time Clock | 211 |

ESP32 內部提供了 RTC(real time clock) 實時時鐘的功能,可以讓我們設定與讀取時間,這篇來瞭解如何利用 Micropython 提供的方法建立一個內部參考時間。

1. ESP32 RTC 時間設置與讀取

RTC 在很多 MCU 都是已經內建好的功能,一旦設置完成,就可以變成系統運作的時間參考依據。ESP32 在 micropython 平台提供了幾個簡單的方法操作,下面為建置 RTC 時間參考的範例:

import machine
rtc = machine.RTC()
rtc.init((2021,4,28,2,10,23,0,0))

RTC 放在 machine 這個硬體控制模組下,首先必須先產生一個 RTC 物件, 接著就可以透過 .init 方法建置初始日期時間,init 刮號內接收的資料型態為 tuple,日期格式就是 年份-月-日-星期幾-時-分-秒-毫秒,這邊星期幾的數字並不是我們常用的 1 -7(分別代表星期一到日),而是採用0 – 6的序列,0 就是星期一,6就是星期日。設定好初始時間後,讀取日期時間就可以使用 .datatime() 這個方法,我們來使用 REPL 模式進行測試:

rtc

ESP32 RTC 的程式設定上相當簡單,唯一要考慮的因素有2個:

  1. RTC 的時間會在系統斷電後就消失,所以通常會搭配電池來避免需要重新設定值。
  2. ESP32 的內部 RTC 並不是高精度的RTC,長時間使用會因為溫度與內部頻率誤差導致精度變差,所以就有兩個解決辦法:
    • 電路外接另一個高精度 RTC(如 DS3231)來作為時間參考依據,這種方案可以提供1年約 1 分鐘左右誤差。
    • 固定時間連上伺服器來做時間校正,缺點就是如果是在意耗電量的系統,在連網狀態下會消耗電流較大,這就需要做完整的考量。

2. ESP32 RTC 記憶體操作

還記得我們之前有提到的 ESP32 休眠模式嗎? 在 DeepSleep 模式下,RTC 相關記憶體與周邊仍然可以保持電源狀態, 所以可以利用 RTC 的 memory 在進入低功耗前,儲存相關參數,等待回到正常模式後讀取記憶體,維持系統正常操作。

寫入或讀取 RTC 記憶體,可以使用 .memory 方法,寫入的資料必須是 byte 型態,記憶體操作範例如下:

import machine
rtc= machine.RTC()
data= b'112233445566'
rtc.memory(data)		## write data to rtc's memory
rd_data= rtc.memory()		## read data from rtc's momory

在 REPL 模式下,結合休眠模式可以更清楚 RTC 記憶體流程:

⬇ 建立 RTC 物件,將重要參數存入 RTC 的記憶體中,之後進入休眠模式3秒,等待重新起動。

⬇ 重新起動後,RTC 記憶體的資料仍保留下來。

3. 小結

一般來說,RTC 的最大用途是作為時間日期的參考,而 ESP32 內建 RTC 的精度,以長時間使用來說仍略顯不足,但由於晶片已內建 Wifi ,所以如果有精確時間需求,也可以考慮定時透過網路校正時間,後續 JIMI哥也會分享這類校正時間的作法~

今天的內容就到這邊,如果有遇到什麼問題或想看那些教學內容,也歡迎在下面或 twitter 留言與我討論囉~

↓↓↓↓↓↓賣場連結↓↓↓↓↓↓

歡迎大家有需要的話,可以多多支持一下我們的蝦皮賣場喔! 😀 

吉米家官方店-創客機器人材料專賣 https://shopee.tw/jimirobot.tw

Follow JIMI哥 Twitter : https://twitter.com/jimirobot  <–得到最新文章通知

發佈留言

Close Menu