Chế độ ngủ của ESP32 là gì?
Chế độ ngủ ESP32 là trạng thái tiết kiệm năng lượng mà ESP32 có thể chuyển sang khi không hoạt động. Khi đó, trạng thái ESP32 vẫn được duy trì trong RAM, nguồn sẽ bị cắt đối với một số ngoại vi không cần thiết, trong khi RAM vẫn nhận đủ năng lượng để cho phép nó giữ lại dữ liệu của mình.
Các khối trong ESP32
Để hiểu được các chế độ ngủ của ESP32, chúng ta cần biết các khối bên trong ESP32. Hình sau thể hiện các khối của chip ESP32.
Trái tim của chip ESP32 là bộ vi xử lý Dual-Core 32 bit cùng với ROM 448 KB, SRAM 520 KB và bộ nhớ Flash 4 MB.
Nó cũng chứa module WiFi, Bluetooth, Cryptographic Accelerator (bộ xử lý được thiết kế đặc biệt để thực hiện các hoạt động mã hóa), RTC và rất nhiều ngoại vi khác.
Các chế độ hoạt động của ESP32
Đối với chức năng quản lý năng lượng, ESP32 cung cấp 5 chế độ hoạt động có thể cấu hình. Tùy yêu cầu, chip có thể chuyển đổi giữa các chế độ năng lượng khác nhau.
- Active Mode
- Modem Sleep Mode
- Light Sleep Mode
- Deep Sleep Mode
- Hibernation Mode
Mỗi chế độ có các tính năng riêng biệt và khả năng tiết kiệm năng lượng riêng. Chúng ta hãy tìm hiểu lần lượt:
ESP32 Active Mode
Chế độ hoạt động bình thường là Active Mode. Trong chế độ này, tất cả các chức năng của chip đều được bật.
Vì Active Mode bật mọi chức năng (đặc biệt là module WiFi, Bluetooth và nhân xử lý ), nên chip yêu cầu dòng điện hơn 240mA để hoạt động. Ngoài ra, nếu bạn sử dụng cả hai chức năng WiFi và Bluetooth cùng lúc, các xung công suất cao có thể xuất hiện (lớn nhất là 790mA).
Theo ESP32 datasheet, mức tiêu thụ năng lượng cho chế độ Active Mode sử dụng RF như sau.
Mode | Power Consumption |
Wi-Fi Tx packet 13dBm~21dBm | 160~260mA |
Wi-Fi/BT Tx packet 0dBm | 120mA |
Wi-Fi/BT Rx and listening | 80~90mA |
Đây là chế độ tiêu tốn năng lượng nhiều nhất. Vì vậy, muốn đảm bảo năng lượng, chúng ta phải tận dụng một trong các chế độ ngủ của ESP32 khi không sử dụng.
ESP32 Modem Sleep
Trong Modem Sleep, mọi thứ đều hoạt động, chỉ có WiFi, Bluetooth và Radio bị tắt. CPU vẫn hoạt động và RTC có thể được sử dụng.
Tại chế độ này, chip tiêu thụ khoảng 3mA ở tốc độ chậm và 20mA ở tốc độ cao.
Để duy trì kết nối WiFi / Bluetooth, CPU, Wi-Fi, Bluetooth và Radio được đánh thức theo các khoảng thời gian được xác định trước đó.
Trong kiểu ngủ này, ESP32 sẽ chuyển đổi giữa chế độ Active Mode và Modem Sleep.
ESP32 chỉ có thể chuyển sang Modem Sleep khi kết nối với Access Point ở chế độ Station (trạm). ESP32 vẫn kết nối với bộ định tuyến thông qua cơ chế DTIM Beacon.
Để tiết kiệm năng lượng, ESP32 vô hiệu hóa module Wi-Fi giữa hai khoảng thời gian DTIM Beacon và tự động thức dậy trước khi đến Beacon tiếp theo.
Thời gian ngủ được quyết định bởi khoảng thời gian DTIM Beacon của Access Point thường là 100ms đến 1000ms.
Trong cơ chế này, Access Point (AP) truyền các gói tin Beacon theo định kỳ. Mỗi gói chứa tất cả các thông tin về mạng, nó được sử dụng để thông báo sự hiện diện của một mạng không dây và đồng bộ hóa tất cả các thành viên được kết nối.
ESP32 Light Sleep
Chế độ làm việc của Light Sleep tương tự như Modem Sleep. Sự khác biệt là RAM, CPU và ngoại vi đều bị tắt clock (clock-gated).
Clock Gating là gì?
Clock gating là một kỹ thuật để giảm tiêu thụ năng lượng. Nó vô hiệu hóa các phần của mạch điện bằng cách tắt các xung clock, để các flip-flop trong chúng không phải chuyển trạng thái. Vì khi có chuyển đổi trạng thái thì năng lượng bị tiêu thụ, ngược lại, mức tiêu thụ năng lượng bằng 0.
Trong Light Sleep, CPU bị tạm dừng bằng cách tắt nguồn xung clock, nhưng RTC và ULP vẫn được duy trì hoạt động. Điều này dẫn đến mức tiêu thụ điện năng ít hơn so với Modem Sleep, chỉ khoảng 0,8mA.
Khi chuyển sang Light Sleep, ESP32 duy trì trạng thái bên trong của nó và tiếp tục hoạt động khi thoát khỏi chế độ ngủ. Toàn bộ RAM vẫn được giữ nguyên.
esp_light_sleep_start()
hàm này được sử dụng để chuyển sang Light Sleep sau khi nguồn đánh thức được cấu hình.
ESP32 Deep Sleep
Ở Deep Sleep, CPU, RAM và tất cả các ngoại vi đều bị tắt. Các bộ phận duy nhất của chip vẫn được cấp nguồn là: bộ RTC, ngoại vi RTC (bao gồm bộ ULP) và bộ nhớ RTC.
Chip tiêu thụ từ 10µA đến 0.15mA.
Trong Deep Sleep, CPU chính bị tắt nguồn còn bộ ULP thực hiện các phép đo cảm biến và đánh thức hệ thống chính dựa trên dữ liệu đo được.
Cùng với CPU, bộ nhớ chính của chip cũng bị tắt. Vì vậy, mọi thứ được lưu trữ trong bộ nhớ đó bị xóa sạch và không thể truy cập được.
Tuy nhiên, bộ nhớ RTC vẫn được bật. Vì vậy, nội dung của nó được bảo quản trong Deep Sleep và có thể được lấy ra sau khi chip được đánh thức. Đó là lý do mà chip lưu trữ dữ liệu kết nối Wi-Fi và Bluetooth trong bộ nhớ RTC trước đó.
Vậy nếu bạn muốn sử dụng dữ liệu khi khởi động lại, hãy lưu trữ nó vào bộ nhớ RTC bằng cách xác định một biến toàn cục với thuộc tính RTC_DATA_ATTR
. Ví dụ: RTC_DATA_ATTR int bootCount = 0;
Ở Deep Sleep, toàn bộ chip được tắt nguồn ngoại trừ module RTC. Vì vậy, bất kỳ dữ liệu nào không có trong bộ nhớ phục hồi RTC đều bị mất và chip sẽ khởi động lại với thiết lập mặc định. Tương tự như thực hiện chương trình lại từ đầu.
Mẹo
esp_deep_sleep_start()
có thể ngay lập tức vào chế độ ngủ sâu sau khi nguồn đánh thức được cấu hình.ESP32 Hibernation mode
Không giống như Deep Sleep, ở Hibernation Mode, chip vô hiệu hóa bộ tạo dao động 8MHz bên trong và bộ ULP. Bộ nhớ phục hồi RTC cũng bị tắt nguồn, có nghĩa là không có cách nào chúng ta có thể bảo quản dữ liệu trong chế độ ngủ đông. Mọi thứ khác đều bị tắt ngoại trừ bộ đếm thời gian RTC slow clock và một số GPIO RTC đang hoạt động. Chúng có trách nhiệm đánh thức chip ra khỏi Hibernation Mode.
Trong chế độ Hibernation Mode, chip chỉ tiêu thụ khoảng 2.5µA.
Mong rằng các thông tin trong bài viết giúp ích cho các bạn trong dự án của mình, hãy đón đọc các bài viết về ESP32 tiếp theo của ESPITEK.
Chúc các bạn thành công!
lastminuteengineers.com