Trong tương lai, hầu hết các thiết bị sẽ được kết nối với nhau và sẽ liên lạc trong thời gian thực. ESP8266 được sử dụng khá phổ biến vì vậy hôm nay Espitek giới thiệu đến chế độ ngủ sâu của esp8266. Một trong những vấn đề mà các thiết bị này phải đối mặt là tiêu thụ điện năng. Yếu tố tiêu thụ năng lượng này là một trong những yếu tố quan trọng và quyết định đối với bất kỳ thiết bị và Dự án IoT nào.
Như chúng ta biết rằng ESP8266 là một trong những mô-đun phổ biến nhất để xây dựng bất kỳ dự án IoT nào, vì vậy trong bài viết này chúng ta tìm hiểu về chế độ ngủ sâu của esp8266 để tiết kiệm năng lượng khi sử dụng ESP8266 trong bất kỳ ứng dụng IoT nào. Tại đây, tôi sẽ tải dữ liệu cảm biến nhiệt độ LM35 lên server trung gian ThingSpeak trong khoảng thời gian 15 giây và trong 15 giây đó, ESP8266 vẫn ở chế độ ngủ sâu để tiết kiệm năng lượng.
Các loại chế độ ngủ sâu của esp8266
Mô-đun Esp8266 hoạt động trong các chế độ sau:
- Active mode
- Modem-sleep mode
- Light-sleep mode
- Deep-sleep mode
Trong bài hôm nay mình giới thiệu đến chế độ ngủ sâu của esp8266:
- Trong chế độ này thì dòng tiêu tốn dưới 1mA
- Đây là một chế độ quá hữu dụng với các dự án IoT
Các bước tiến hành kiểm tra:
- Kết nối mô-đun với Wi-Fi AP
- Thực hiện một tác vụ như đọc giá trị cảm biến, xuất bản tin nhắn MQTT, v.v.
- Ngủ sâu trong vài micro giây
- Lặp lại quá trình trên
Để hiểu rõ hơn về các chế độ các bạn có thể theo dõi mình đã trình bày trong bài các chế độ ngủ của esp32
2 cách để đánh thức ESP8266 khi đang trong chế độ ngủ sâu
- Sử dụng Timer (bộ hẹn giờ) để đánh thức ESP8266 sau một khoảng thời gian do bạn đặt.
- Sử dụng cách đánh thức ngoài: Dùng nút nhấn để tác động trực tiếp vào chân RST của ESP8266.
Trong bài viết này mình sẽ trình bày 2 cách để đánh thức ESP8266 khi đang trong chế độ ngủ sâu nhé !
Cách #1: Sử dụng Timer
Tiến hành kết nối LM35 và ESP8266
Kết nối chân RST của ESP8266 với chân GPIO 16 tức là D0. GPIO 16 là chân quan trọng có tính năng đánh thức chip khi đang trong chế độ ngủ của esp8266 nhé.
Khi mô-đun ESP có tín hiệu mức CAO trên chân RST, nó bắt đầu hoạt động. Ngay khi nhận được tín hiệu THẤP trên chân RST, ESP sẽ khởi động lại.
Đặt bộ hẹn giờ bằng chế độ ngủ sâu của Esp8266, khi bộ hẹn giờ kết thúc thì chân D0 sẽ gửi tín hiệu THẤP đến chân RST và mô-đun sẽ thức dậy bằng cách khởi động lại.
Bây giờ, phần cứng đã sẵn sàng. Ta tiến hành gửi dữ liệu nhiệt độ lên máy chủ Thingspeak. Tạo một tài khoản trên Thingspeak.com và tạo một kênh như hình dưới.
Sao chép API được cung cấp trên tài khoản Thinkspeak để sử dụng trong code nhằm giúp ta có thể đưa dữ liệu lên Server.
XEM THÊM: Cài thư viện ESP8266 trên Arduino IDE
Lập trình ESP8266 vào chế độ ngủ sâu
#include <ESP8266WiFi.h> String apiWritekey = "*************"; char ssid[] = "XXXXXXXXXX"; // enter your wifi home router ssid char password[] = "XXXXXXXXXX" ; // enter your wifi home router ssid char server[] = "api.thingspeak.com"; double tempF; double tempC; WiFiClient client; void connect1() { WiFi.disconnect(); delay(10); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("NodeMcu connected to wifi..."); } void data() { if (client.connect(server,80)) { String Data = apiWritekey; Data +="&field1="; Data += String(tempC); Data += "\r\n\r\n"; client.print("POST /update HTTP/1.1\n"); client.print("Host: api.thingspeak.com\n"); client.print("Connection: close\n"); client.print("X-THINGSPEAKAPIKEY: "+apiWritekey+"\n"); client.print("Content-Type: application/x-www-form-urlencoded\n"); client.print("Content-Length: "); client.print(Data.length()); client.print("\n\n"); client.print(Data); Serial.println("uploaded to Thingspeak server...."); } client.stop(); } void setup() { Serial.begin(115200); Serial.println("device is in Wake up mode"); while (!Serial) { } connect1(); int value = analogRead(A0); float volts=(value/1024.0)*5.0; //conversion to volts tempC = volts*100.0; //conversion to temp Celsius Serial.print("Temperature C: "); Serial.println(tempC); data(); Serial.println("deep sleep for 15 seconds"); ESP.deepSleep(15e6); } void loop() { }
Giải thích: Nguyên lý chung là ta sẽ tiến hành kết nối ESP8266 đến wifi do bạn chỉ định sau đó đo nhiệt độ của LM35 và sau đó đổi ra nhiệt độ. Tiếp đến ta sẽ gửi giá trị nhiệt độ đo được này lên Server Thinkspeak sau mỗi 15 giây và lặp lại quy trình này. Trong 15 giây đó ESP8266 sẽ được đưa vào chế độ ngủ sâu nhờ hàm ESP.deepSleep(15e6);. 15e6 ~ 15×10^6 micro giây.
Cách #2: Sử dụng đánh thức ngoài (dùng nút nhấn)
Kết nối nút nhấn và ESP8266
Hoặc nếu bạn sử dụng ESP-01
Lập trình dùng nút nhấn đánh thức khi ở chế độ ngủ sâu của ESP8266
/* * ESP8266 Deep sleep mode example * Rui Santos * Complete Project Details https://randomnerdtutorials.com */ void setup() { Serial.begin(115200); Serial.setTimeout(2000); // 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() { }
ESP sẽ tỉnh dậy khi bạn nhấn nút. khi trong chế độ ngủ sâu thì dòng tiêu tốn của nó là tương đối nhỏ, quá phù hợp cho các dự án cần sử dụng pin.
Chúc các bạn thành công!
Mới bất đầu tìm hiểu ESP8266.
Cám ơn nhiều.
Welcome ! Bạn cứ nghiên cứu và chia sẻ, hỏi tại blog của mình nhé!