14:38 05/04/2023
Ngủ sâu ESP8266 với Arduino IDE (NodeMCU)
Ngủ sâu ESP8266 với Arduino IDE (NodeMCU)
Hướng dẫn này chỉ ra cách sử dụng chế độ ngủ sâu với ESP8266 (NodeMCU) bằng
Arduino IDE. Chúng tôi sẽ đề cập đến giấc ngủ sâu với tính năng đánh thức hẹn giờ và
chế độ ngủ sâu với tính năng đánh thức bên ngồi bằng cách sử dụng chân đặt lại
(RST).
Để đặt ESP8266 ở chế độ ngủ sâu, hãy sử dụng ESP.deepSleep(uS) và chuyển thời
gian ngủ làm đối số tính bằng micro giây. GPIO 16 phải được kết nối với chân đặt lại
(RST) để ESP8266 có thể thức dậy.
Để đặt ESP8266 ở chế độ ngủ sâu trong một khoảng thời gian không xác định, hãy sử
dụng ESP.deepSleep(0) . ESP8266 sẽ thức dậy khi chân RST nhận được tín hiệu
THẤP.
Xem video hướng dẫn
Hướng dẫn này có sẵn ở dạng video (xem bên dưới) và ở dạng viết (tiếp tục đọc trang
này).
Nội dung liên quan: Ngủ sâu ESP32 với Arduino IDE và đánh thức nguồn
Giới thiệu Chế độ Ngủ sâu
/>
1/13
14:38 05/04/2023
Ngủ sâu ESP8266 với Arduino IDE (NodeMCU)
Nếu bạn đã thực hiện một dự án với bo mạch ESP8266 chạy bằng pin hoặc nếu bạn
vừa kết nối bo mạch ESP8266 NodeMCU của mình với một cục sạc dự phịng. Sau khi
chạy một lúc, bạn nhận thấy pin không dùng được lâu, đặc biệt nếu bạn đang sử dụng
Wi-Fi.
Nếu bạn đặt ESP8266 ở chế độ ngủ sâu, nó sẽ giảm mức tiêu thụ điện năng và pin của
bạn sẽ hoạt động lâu hơn.
Để ESP8266 ở chế độ ngủ sâu có nghĩa là cắt bỏ các hoạt động tiêu tốn nhiều năng
lượng hơn khi hoạt động (như Wi-Fi) nhưng chỉ để lại hoạt động vừa đủ để đánh thức bộ
xử lý khi có điều gì đó thú vị xảy ra.
Các loại giấc ngủ
Có ba loại chế độ ngủ khác nhau: ngủ modem , ngủ nhẹ và ngủ sâu . Bảng dưới đây
cho thấy sự khác biệt giữa từng chế độ (thông tin từ bảng dữ liệu ESP8266).
Mục
Modem-ngủ
giấc ngủ nhẹ
Giấc ngủ sâu
Wifi
TẮT
TẮT
TẮT
Đồng hồ hệ thống
TRÊN
TẮT
TẮT
RTC
TRÊN
TRÊN
TRÊN
CPU
TRÊN
Chưa giải quyết
TẮT
Chất nền hiện tại
15mA
0,4mA
~20 uA
Dòng điện trung bình (DTIM = 1)
16,2mA
1,8mA
–
Dịng điện trung bình (DTIM = 3)
15,4mA
0,9mA
–
Dịng điện trung bình (DTIM = 10)
15,2mA
0,55mA
–
/>
2/13
14:38 05/04/2023
Ngủ sâu ESP8266 với Arduino IDE (NodeMCU)
Lưu ý: mức tiêu thụ năng lượng trên bảng đề cập đến ESP8266 dưới dạng chip độc lập.
Nếu bạn đang sử dụng bảng phát triển, chúng có các thành phần thụ động sử dụng
nhiều dịng điện hơn.
Tất cả chúng đều có mục đích khác nhau và chúng nên được sử dụng trong các ứng
dụng khác nhau.
Trong bài viết này, chúng tôi sẽ đề cập đến chế độ ngủ sâu. Mọi thứ luôn tắt, ngoại trừ
Đồng hồ thời gian thực (RTC), đây là cách mà ESP8266 theo dõi thời gian.
Đây là tùy chọn tiết kiệm năng lượng nhất và chip ESP chỉ tiêu thụ khoảng 20uA. Tuy
nhiên, nếu bạn sử dụng bo mạch phát triển đầy đủ tính năng với bộ lập trình tích hợp,
đèn LED, v.v., bạn sẽ không thể đạt được trạng thái năng lượng thấp như vậy.
Bản phác thảo giấc ngủ sâu
Với giấc ngủ sâu, một ứng dụng ví dụ trơng như thế này:
1. ESP8266 kết nối với Wi-Fi
2. ESP8266 thực hiện một tác vụ (đọc cảm biến, xuất bản thông báo MQTT, v.v.)
3. Ngủ trong một khoảng thời gian xác định trước
4. ESP8266 thức dậy
5. Quá trình được lặp đi lặp lại nhiều lần
đánh thức nguồn
Sau khi đặt ESP8266 ở chế độ ngủ sâu, có nhiều cách khác nhau để đánh thức nó:
Đánh thức hẹn giờ số 1: ESP8266 tự đánh thức sau một khoảng thời gian được
xác định trước
#2 đánh thức bên ngoài: ESP8266 thức dậy khi bạn nhấn nút RST (ESP8266 khởi
động lại)
/>
3/13
14:38 05/04/2023
Ngủ sâu ESP8266 với Arduino IDE (NodeMCU)
Đối với các dự án cơng suất thấp, bạn có thể cân nhắc sử dụng bảng ESP32 cung cấp
nhiều chế độ ngủ sâu hơn và đánh thức các nguồn .
#1 ESP8266 Ngủ sâu với Hẹn giờ đánh thức
Để sử dụng bộ hẹn giờ đánh thức với ESP8266, bạn cần kết nối chân RST với GPIO 16
được gắn nhãn là D0, trong bo mạch NodeMCU . Chỉ cần làm theo sơ đồ tiếp theo:
Chỉ kết nối chân RST với GPIO 16 sau khi tải mã lên.
Nếu bạn nhìn vào sơ đồ chân của NodeMCU, bạn có thể thấy rằng GPIO 16 là một chân
đặc biệt và nó có tính năng WAKE.
/>
4/13
14:38 05/04/2023
Ngủ sâu ESP8266 với Arduino IDE (NodeMCU)
Đề xuất đọc: Hướng dẫn tham khảo sơ đồ chân ESP8266
Chân RST của ESP8266 luôn ở mức CAO trong khi ESP8266 đang chạy. Tuy nhiên, khi
chân RST nhận được tín hiệu THẤP, nó sẽ khởi động lại vi điều khiển.
Nếu bạn đặt bộ hẹn giờ ngủ sâu với ESP8266, sau khi bộ hẹn giờ kết thúc, GPIO 16 sẽ
gửi tín hiệu THẤP. Điều đó có nghĩa là GPIO 16, khi được kết nối với chân RST, có thể
đánh thức ESP8266 sau một khoảng thời gian nhất định.
Bản phác thảo đánh thức bộ đếm thời gian ESP8266 NodeMCU
Đã cài đặt tiện ích bổ sung ESP8266 cho Arduino IDE ( cách cài đặt Bảng mạch
ESP8266 trong Arduino IDE ), đi tới Công cụ và chọn “ NodeMCU (Mô-đun ESP-12E) ”.
Đây là mã mà bạn cần tải lên ESP của mình:
/*
* ESP8266 Deep sleep mode example
* Rui Santos
* Complete Project Details
*/ void setup() {
Serial.begin(115200);
Serial.setTimeout(2000);
// Wait for serial to initialize.
/>
5/13
14:38 05/04/2023
Ngủ sâu ESP8266 với Arduino IDE (NodeMCU)
while(!Serial) { }
// Deep sleep mode for 30 seconds, the ESP8266 wakes up by itself when GPIO 16 (D0 in
NodeMCU board) is connected to the RESET pin
Serial.println("I'm awake, but I'm going into deep sleep mode for 30 seconds");
ESP.deepSleep(30e6);
// Deep sleep mode until RESET pin is connected to a LOW signal (for example pushbutton
or magnetic reed switch)
//Serial.println("I'm awake, but I'm going into deep sleep mode until RESET pin is
connected to a LOW signal");
//ESP.deepSleep(0);
}
void loop() {
}
Xem mã thơ
Trong ví dụ này, chúng tơi in một thơng báo trong Màn hình nối tiếp:
Serial.println("I'm awake, but I'm going into deep sleep mode until RESET pin is connected
to a LOW signal");
Sau đó, ESP8266 chuyển sang chế độ ngủ trong 30 giây.
ESP.deepSleep(30e6);
Để đặt ESP8266 ở chế độ ngủ sâu, bạn sử dụng ESP.deepsleep(uS) và chuyển thời
gian ngủ tính bằng micro giây làm đối số.
Trong trường hợp này, 30e6 tương ứng với 30000000 micro giây tương đương với 30
giây.
Sau khi tải mã lên, hãy nhấn nút RST để bắt đầu chạy mã, sau đó kết nối RST với GPIO
16. ESP8266 sẽ hoạt động sau mỗi 30 giây và in một thơng báo trong Màn hình nối tiếp
như hình bên dưới.
/>
6/13
14:38 05/04/2023
Ngủ sâu ESP8266 với Arduino IDE (NodeMCU)
Ví dụ này chỉ in một thơng báo trong Màn hình nối tiếp, nhưng trong một ứng dụng trong
thế giới thực, bạn sẽ thực hiện một tác vụ hữu ích như đưa ra yêu cầu, xuất bản các lần
đọc cảm biến, v.v.
Mạch đánh thức hẹn giờ ESP-01
Nếu bạn muốn thực hiện một thiết lập tương tự với bảng ESP-01, bạn cần hàn một sợi
dây như hình bên dưới. Chân nhỏ đó là GPIO 16 và nó cần được kết nối với chân RST.
/>
7/13
14:38 05/04/2023
Ngủ sâu ESP8266 với Arduino IDE (NodeMCU)
Tuy nhiên, các chân quá nhỏ nên rất khó để hàn một sợi dây như vậy vào GPIO 16 trên
ESP-01… Vì vậy, đối với chế độ đánh thức này, bạn nên sử dụng bo mạch NodeMCU
hoặc chip ESP12-E trần .
Đề xuất đọc: Tham khảo sơ đồ chân ESP8266
#2 ESP8266 Ngủ sâu với Đánh thức bên ngồi
Bạn cũng có thể đánh thức ESP8266 bằng cách đánh thức bên ngoài, chẳng hạn như
nhấn nút hoặc công tắc sậy . Bạn chỉ cần đặt ESP8266 ở chế độ ngủ sâu trong một
khoảng thời gian không xác định, sau đó đặt chân RST ở mức THẤP để đánh thức nó.
Để kiểm tra thiết lập này, hãy nối một nút bấm vào bảng ESP8266 của bạn như trong sơ
đồ sau. Khi bạn nhấn nút, chân RST ở mức THẤP.
/>
8/13
14:38 05/04/2023
Ngủ sâu ESP8266 với Arduino IDE (NodeMCU)
Nếu bạn đang sử dụng ESP-01 , hãy làm theo sơ đồ tiếp theo.
/>
9/13
14:38 05/04/2023
Ngủ sâu ESP8266 với Arduino IDE (NodeMCU)
Bản phác thảo đánh thức bên ngồi ESP8266
Sau đó, tải đoạn mã sau lên bảng ESP8266 của bạn.
/*
* ESP8266 Deep sleep mode example
* Rui Santos
* Complete Project Details
*/ void setup() {
Serial.begin(115200);
Serial.setTimeout(2000);
/>
10/13
14:38 05/04/2023
Ngủ sâu ESP8266 với Arduino IDE (NodeMCU)
// Wait for serial to initialize.
while(!Serial) { }
// Deep sleep mode for 30 seconds, the ESP8266 wakes up by itself when GPIO 16 (D0 in
NodeMCU board) is connected to the RESET pin
//Serial.println("I'm awake, but I'm going into deep sleep mode for 30 seconds");
//ESP.deepSleep(30e6);
// Deep sleep mode until RESET pin is connected to a LOW signal (for example pushbutton
or magnetic reed switch)
Serial.println("I'm awake, but I'm going into deep sleep mode until RESET pin is
connected to a LOW signal");
ESP.deepSleep(0);
}
void loop() {
}
Xem mã thô
Mã này đặt ESP8266 ở chế độ ngủ sâu trong một khoảng thời gian khơng xác định. Để
làm được điều đó, bạn chỉ cần chuyển 0 làm đối số cho hàm deepSleep() :
ESP.deepSleep(0);
ESP sẽ chỉ thức dậy khi có thứ gì đó đặt lại bảng. Trong trường hợp này, việc nhấn nút
sẽ kéo chân RST về GND.
Khi bạn nhấn nút, ESP8266 sẽ thức dậy, thực hiện tác vụ đã lập trình và quay lại chế độ
ngủ cho đến khi một sự kiện đặt lại mới được kích hoạt.
đo dịng điện
Khi bo mạch ở chế độ ngủ sâu, hãy đo mức tiêu thụ hiện tại bằng đồng hồ vạn năng để
xem nó đang tiêu thụ bao nhiêu năng lượng.
Đây là cách bạn nên đặt đầu dị vạn năng của mình.
/>
11/13
14:38 05/04/2023
Ngủ sâu ESP8266 với Arduino IDE (NodeMCU)
Khi ESP-01 ở chế độ ngủ sâu, nó chỉ sử dụng 0,3mA, xấp xỉ 300uA.
/>
12/13
14:38 05/04/2023
Ngủ sâu ESP8266 với Arduino IDE (NodeMCU)
Hãy nhớ rằng trong quá trình sử dụng bình thường với Wi-Fi, ESP8266 có thể tiêu thụ từ
50mA đến 170mA. kết
thúc
Bây giờ bạn đã biết cách sử dụng chức năng deepSleep() , dự án chạy bằng pin của
bạn có thể tồn tại lâu hơn.
/>
13/13