Thứ Sáu, Tháng Chín 25, 2020
Trang chủ TIN TỨC Vấn đề về quản lí năng lượng trên thiết bị IoT

Vấn đề về quản lí năng lượng trên thiết bị IoT

Giới Thiệu

Dao gần đây mình nhận được nhiều câu hỏi về tại sao những dự án IoT của các bạn chạy Pin lại nhanh hết Pin như vậy, và trong những hệ thống thật sự họ sẽ tính toán và xử lí vấn đề tiết kiệm năng lượng như thế nào?. 

Trong việc phát triển dự án vi điều khiển có một điều cần lưu ý là việc quản lí năng lượng tiêu thụ cho thiết bị, đặc biệt là các thiết bị IoT sử dụng Pin. Và việc quản lí năng lượng này là một việc đầy thách thức vì các thiết bị phải luôn được cấp nguồn và có thể đặt được ở khắp mọi nơi. Thông thường các thiết bị IoT lấy dữ liệu ở xa thường không có nguồn điện cung cấp và phải sử dụng Pin để làm việc

Trong bài này mình sẽ đề cập đến việc tối ưu hóa nguồn năng lượng tiêu thụ khi sử dụng Kit RF Thu Phát Wifi ESP8266 NodeMCU Lua CP2102 – một Kit rất là thông dụng trong việc phát triển các ứng dụng IoT hiện nay

Quản lí năng lượng thế nào ?

Việc quản lí năng lượng trong các thiết bị IoT thường bắt đầu từ việc thiết kế phần cứng và điều này thực sự là quan trọng nhất, người thiết kế phải tính toán phần cứng khi hoạt động sẽ tiêu tốn bao nhiêu năng lượng và các IC, trở, led ..v..v sẽ ảnh hưởng tới mức tiêu thụ nằng lượng ra sao. Dung lượng Pin cung cấp cũng được nhắc đến để so sánh với mức tiêu thụ để tính toán thời gian hoạt động. Ngoài ra trạng thái hoạt động của thiết bị cũng ảnh hưởng rất lớn tới mức tiêu thụ năng lượng.

Thông thường một hệ thống IoT sẽ tiêu thụ các mức năng lượng đến từ:

+ Vi điều khiển

+ Các cảm biến và cơ cấu điều khiển

+ Hoạt động giao tiếp với mạng , vô tuyến

Đa số theo bản thân mình thấy các thiết bị IoT ứng dụng phần chung là :

+ Thu thâp dữ liệu từ cảm biến

+ Truyền nhận dữ liệu từ xa

+ Kiểm soát các hoạt động, điều khiển từ xa

Các thiết bị IoT khi hoạt động theo dạng thu thập dữ liệu từ xa sẽ sử dụng từ một đến nhiều cảm biến để thu thập thông tin môi trường. Dữ liệu đọc được sẽ được xử lí cục bộ, hoặc gửi đi xa. Thông thường mỗi cảm biến sẽ có mức tiêu thụ năng lượng cụ thể, vì vậy việc lựa chọn cảm biến ngoài độ tin cậy ra các bạn còn cần phải để ý đến mức tiêu thụ của cảm biến. => Việc chọn cảm biến tối ưu cũng là một cách để tiết kiệm năng lượng

Công việc chính của một thiết bị IoT thường là gửi và nhận dữ liệu từ xa. Các thiết bị IoT kết nối với nhau từ xa, chúng sẽ gửi dữ liệu cho nhau thông qua đám mây. Trong quá trình hoạt động , việc gửi và nhận dữ liệu là một trong những nhiệm vụ tốn kém năng lượng nhất vì các hoạt động này liên quan tới (GSM,3G,WiFi,Bluetooth..v.v.)

Vi Điều Khiển tính toán và chọn VĐK tiết kiệm năng lượng cũng là một ý tưởng.

Trong bài viết này mình sẽ trình bày theo quan điểm cá nhân của mình cách tối ưu năng lượng của VĐK khi truyền và nhận dữ liệu thông qua WiFi, VĐK mình sử dụng là ESP8266 Và Arduino sẽ là cách tiếp cận dễ nhất để lập trình ESP8266

Các thiết bị IoT sẽ gửi dữ liệu theo khoảng thời gian nhất định, ví dụ khoảng 20s ESP8266 sẽ đọc và gửi dữ liệu cảm biến đi. Đa số chúng ta sẽ sử dụng phương thức delay(20000) trong hàm loop() – tương ứng với chương trình sẽ dừng lại trong 20s sau đó lập lại quá trình. Ví dụ:

void loop()
{
 String buf= readData();
 sendData(buf);
 delay(20000);
}

Tuy nhiên nếu xét về khía cạnh tiết kiệm năng lượng thì lại không hợp lí.Vì vậy mình sẽ giới thiệu các chế độ “sleep” và tiết kiệm năng lượng trên ESP8266. Bạn có thể tham khảo datasheet low power, hoặc bảng sau:

quan li nang luong

Mặc định nếu bạn không sử dụng ESP8266 sẽ không vô chế độ Sleep

+ Modem-sleep: Chế độ này sẽ bật được khi ESP8266 đã kết nối với WiFi thường được sử dụng trong việc điều chế độ rộng xung(PWM) cần thời gian thực và CPU luôn phải chạy

wifi_set_sleep_type(MODEM_SLEEP_T)

+ Light-sleep: Nhìn chung cũng tương tự như chế độ Modem-sleep nhưng CPU sẽ ngừng chạy bẳng hàm sau:

wifi_set_sleep_type(LIGHT_SLEEP_T)

Chế độ này sẽ dùng một chân GPIO để đánh thức ESP8266. Quá trình thức dậy ít hơn 3ms:
void gpio_pin_wakeup_enable(uint32 i, GPIO_INT_TYPE intr_state);

+Deep-sleep: Chế độ này sẽ tắt mọi thứ trừ RTC, sau đó sẽ đánh thức ESP8266 theo thời gian cài đặt. Chế độ này có vẻ tương đối giống ví dụ về đọc và gửi cảm biến đi sau đó chuyển sang chế độ ngủ sâu và đợi đánh thức

Phần trên mình chỉ sơ lược về các mode Sleep của ESP8266, các bạn có thể tham khảo datasheet của ESP8266 để hiểu rõ hơn !

Hướng dẫn

Mình sẽ bỏ qua những phần cơ bản như cách nạp chương trình, gửi dữ liệu thế nào,đọc dữ liệu ra sao? mà chỉ trọng tâm chính vào phần DeepSleep thôi nha ^^
Lan man vậy cũng đủ rồi chúng ta bắt tay vào thử nghiệm thôi nào. Chung quy lại mình sẽ làm theo quy trình sau:

+ Đọc data từ cảm biến

+ Gửi data đọc được lên server

+ Vào chế độ deep-sleep trong 20s

+ Thức dậy lập lại quá trình trên 

Lưu ý :

+ Trong chế độ này chân DO(GPIO16) phải được nối với chân RST của ESP8266 !

+ Khi nạp chương trình các bạn không được nối chân D0 với RST. Nếu không sẽ không nạp được

#include <ESP8266WiFi.h>

const char* SSID="---";
const char* PWD="----";
 
void setup() {
  Serial.begin(9600); 
  wifi_Connect(); // Kết nối WiFi

  String buf= readData();   // Đọc dữ liệu

  sendData(buf); // Gửi dữ liệu

  ESP.deepSleep(20e6); // deepSleep trong 20s
}

void loop() {

}

void wifi_Connect() {
  Serial.print("Connecting to Wifi:");
  Serial.println(WIFI_SSID);
  WiFi.begin(SSID, PWD);
  
   while (WiFi.status() != WL_CONNECTED) {
    if (WiFi.status() == WL_CONNECT_FAILED) {
      Serial.println("Error during WiFi connection- ");
      delay(10000);
    }
    delay(1000);
   }

    Serial.print("Wifi IP:");
    Serial.println(WiFi.localIP());
}

[/junkie-toggle]

Tổng Kết

Mình hi vọng bạn đã có thêm kiến thức về cách tiết kiệm năng lương trong các dự án IoT bằng các ví dụ trên. Mình nghĩ đây là một vấn đề quan trọng và chúng ta cần phải lưu tâm đến nó để tiết kiệm năng lượng hết mức có thể.

Hẹn gặp lại các bạn trong bài viết tới! Chúc các bạn thành công với các của mình!

 

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments

Most Popular

Hướng dẫn sử dụng Mạch đóng ngắt tải không tiếp xúc chế tạo Thiết bị vệ sinh tự động

Từ ngày 03/08/2020 mạch chuyển sang phiên bản mới tuy nhiên kích thước, vị trí linh kiện và chức năng của mạch giống và...

Lưu trữ nhật ký dữ liệu Online với ESP32 và Google Spreadsheets

Giới Thiệu Chào các bạn, trong các dự án IoT nhỏ gọn thì việc lưu trữ  và kiểm soát dữ liệu trên đám mây cũng...

Đọc Cảm Biến DHT11/DHT21/DHT22 không bị DELAY chương trình

Giới Thiệu Chào các bạn, hôm nay mình giới thiệu và hướng dẫn cách đọc cảm biến các dòng DHT11/DHT21/DHT22 ở bài này mình sử...

Gỡ lỗi ESP8266/ESP32 với thư viện ArduinoTrace

Giới Thiệu Chào các bạn, thông thường khi các bạn debug chương trình các bạn thường sử dùng hàm Serial.print() tuy nhiên, hôm nay mình sẽ...

Recent Comments

0
Would love your thoughts, please comment.x
()
x