ESP8266 Deep Sleep Mode: Cara Menghemat Daya untuk Proyek IoT Berbasis Baterai

Pada era Internet of Things (IoT), perangkat yang terhubung ke internet semakin banyak digunakan untuk berbagai aplikasi, mulai dari pertanian cerdas, smart home hingga monitoring lingkungan. Salah satu tantangan terbesar dalam pengembangan proyek IoT adalah manajemen daya untuk perangkat berbasis baterai. ESP8266 adalah modul Wi-Fi yang populer dan terjangkau, sering digunakan dalam proyek IoT karena memiliki kemampuan untuk terhubung ke internet dengan mudah. Namun, ketika perangkat harus beroperasi dalam waktu yang lama dengan sumber daya terbatas, konsumsi daya yang tinggi dapat menjadi masalah. Salah satu solusi untuk mengatasi masalah ini adalah dengan menggunakan ESP8266 Deep Sleep Mode. Mode ini memungkinkan modul untuk menghemat daya dengan mematikan sebagian besar komponennya ketika tidak digunakan, sehingga dapat memperpanjang masa pakai baterai. 

 

Apa itu Deep Sleep Mode?


Deep Sleep Mode adalah salah satu fitur yang disediakan oleh ESP8266 untuk menghemat daya. Pada mode ini, ESP8266 akan mematikan sebagian besar komponennya seperti CPU, Wi-Fi dan sistem radio sehingga konsumsi daya yang dimiliki menjadi sangat rendah. ESP8266 akan tetap menyala dalam keadaan "tidur" hingga ada pemicu yang membangunkannya, seperti timer atau sinyal eksternal. Pada Deep Sleep Mode, ESP8266 hanya mengkonsumsi daya sekitar 20 µA, jauh lebih rendah daripada mode aktif yang dapat mengkonsumsi hingga 70 mA atau lebih. Jadi, penggunaan Deep Sleep Mode sangat cocok untuk proyek IoT yang membutuhkan operasi jangka panjang dengan sumber daya baterai terbatas.

 

Cara Kerja Deep Sleep Mode


Deep Sleep Mode pada ESP8266 bekerja dengan cara mematikan sebagian besar komponen internal modul, kecuali Real-Time Clock (RTC). RTC tetap aktif dan dapat digunakan untuk membangunkan ESP8266 setelah periode waktu tertentu. Selain itu, ESP8266 juga dapat dibangunkan oleh sinyal eksternal, seperti interrupt dari pin GPIO. Ketika ESP8266 memasuki Deep Sleep Mode, semua data yang disimpan dalam RAM akan hilang. Namun, data yang disimpan dalam RTC memory akan tetap terjaga. RTC memory adalah bagian kecil dari memori yang tetap aktif selama Deep Sleep Mode, sehingga dapat digunakan untuk menyimpan data sementara yang diperlukan setelah modul bangun dari tidur. Setelah periode Deep Sleep selesai atau ada pemicu eksternal, ESP8266 akan melakukan reboot dan melanjutkan eksekusi program dari awal. Oleh karena itu, penting untuk merancang program dengan mempertimbangkan bahwa modul akan melakukan reboot setiap kali bangun dari Deep Sleep Mode.

 

Manfaat Penggunaan Deep Sleep Mode

 

1. Penghematan Daya yang Signifikan

Konsumsi daya ESP8266 dapat dikurangi secara drastis dengan mengaktifkan Deep Sleep Mode, sehingga dapat memperpanjang masa pakai baterai.  

2. Operasi Jangka Panjang

Deep Sleep Mode memungkinkan perangkat IoT untuk beroperasi dalam waktu yang lama tanpa perlu sering mengganti atau mengisi ulang baterai.

3. Mengurangi Panas

ESP8266 mematikan sebagian besar komponen agar menghasilkan panas yang lebih sedikit untuk mengurangi risiko overheating.  

4. Meningkatkan Keandalan

Penggunaan Deep Sleep Mode dapat mengurangi beban pada baterai dan komponen elektronik lainnya, sehingga dapat meningkatkan keandalan perangkat secara keseluruhan.

 

Implementasi ESP8266 Deep Sleep Mode

 

1. Siapkan Perangkat Keras

- ESP8266 (NodeMCU, Wemos D1 Mini atau modul ESP8266 lainnya)

- Baterai (baterai LiPo 3.7V atau baterai AA)

- Regulator Tegangan (jika diperlukan)

- Komponen pendukung seperti resistor, LED dan kabel jumper

2. Hubungkan ESP8266 ke Baterai

ESP8266 membutuhkan tegangan operasi 3.3V. Jika Anda menggunakan baterai dengan tegangan yang lebih tinggi seperti baterai LiPo 3.7V, pastikan untuk menggunakan regulator tegangan atau modul pengatur tegangan seperti AMS1117-3.3V guna menurunkan tegangan ke level yang aman.

3. Siapkan Lingkungan Pengembangan

Anda dapat menggunakan Arduino IDE atau platform pengembangan lainnya untuk memprogram ESP8266. Pastikan Anda telah menginstal driver dan library yang diperlukan untuk ESP8266.

4. Buat Program untuk Deep Sleep Mode

Berikut ini contoh kode program sederhana yang menggunakan ESP8266 Deep Sleep Mode:

 

#include <ESP8266WiFi.h>

#define SLEEP_TIME 10e6 // Waktu tidur dalam mikrodetik (10 detik)

void setup() {

  Serial.begin(115200);

  Serial.println("Memulai ESP8266...");

  // Lakukan tugas-tugas yang diperlukan di sini

  // Misalnya, membaca sensor, mengirim data ke server, dll.

  Serial.println("Mengaktifkan Deep Sleep Mode...");

  ESP.deepSleep(SLEEP_TIME); // Masuk ke Deep Sleep Mode

}

void loop() {

  // Kode ini tidak akan dijalankan karena ESP8266 akan reboot setelah bangun dari Deep Sleep

}

 

Penjelasan Kode Program:

- '#define SLEEP_TIME 10e6` untuk mendefinisikan waktu tidur dalam mikrodetik. Dalam contoh ini, ESP8266 akan tidur selama 10 detik.

- 'ESP.deepSleep(SLEEP_TIME)' untuk memasukkan ESP8266 ke dalam Deep Sleep Mode selama waktu yang telah ditentukan.

- 'void loop()', kode dalam fungsi `loop()` tidak akan dijalankan karena ESP8266 akan melakukan reboot setelah bangun dari Deep Sleep Mode.

5. Gunakan Pemicu Eksternal untuk Membangunkan ESP8266

Selain menggunakan timer, ESP8266 juga dapat dibangunkan dari Deep Sleep Mode dengan memanfaatkan pemicu eksternal, seperti interrupt dari pin GPIO. Berikut ini contoh kode program menggunakan pemicu eksternal:

 

#include <ESP8266WiFi.h>

#define WAKEUP_PIN 4 // Pin GPIO yang digunakan sebagai pemicu

void setup() {

  Serial.begin(115200);

  Serial.println("Memulai ESP8266...");

  // Konfigurasi pin sebagai input

  pinMode(WAKEUP_PIN, INPUT_PULLUP);

  // Lakukan tugas-tugas yang diperlukan di sini

  // Misalnya, membaca sensor, mengirim data ke server, dll.

  Serial.println("Mengaktifkan Deep Sleep Mode...");

  ESP.deepSleep(0); // Masuk ke Deep Sleep Mode, menunggu pemicu eksternal

}

void loop() {

  // Kode ini tidak akan dijalankan karena ESP8266 akan reboot setelah bangun dari Deep Sleep

}

Penjelasan Kode Program:

- '#define WAKEUP_PIN 4' untuk mendefinisikan pin GPIO yang akan digunakan sebagai pemicu guna membangunkan ESP8266.

- 'ESP.deepSleep(0)' untuk memasukkan ESP8266 ke dalam Deep Sleep Mode tanpa timer, sehingga modul akan tidur hingga ada pemicu eksternal.

6. Gunakan RTC Memory untuk Menyimpan Data

Data dalam RAM akan hilang ketika ESP8266 memasuki Deep Sleep Mode, seperti yang telah disebutkan sebelumnya. Namun, Anda dapat menggunakan RTC memory untuk menyimpan data sementara yang diperlukan setelah modul bangun dari tidur. Berikut ini contoh penggunaan RTC memory:

 

#include <ESP8266WiFi.h>

#define SLEEP_TIME 10e6 // Waktu tidur dalam mikrodetik (10 detik)

// Deklarasi variabel RTC memory

RTC_DATA_ATTR int bootCount = 0;

void setup() {

  Serial.begin(115200);

  Serial.println("Memulai ESP8266...");

  // Increment boot count

  bootCount++;

  Serial.print("Boot count: ");

  Serial.println(bootCount);

  // Lakukan tugas-tugas yang diperlukan di sini

  // Misalnya, membaca sensor, mengirim data ke server, dll.

  Serial.println("Mengaktifkan Deep Sleep Mode...");

  ESP.deepSleep(SLEEP_TIME); // Masuk ke Deep Sleep Mode

}

void loop() {

  // Kode ini tidak akan dijalankan karena ESP8266 akan reboot setelah bangun dari Deep Sleep

}

Penjelasan Kode Program:

- 'RTC_DATA_ATTR int bootCount = 0;' untuk mendeklarasikan variabel `bootCount` yang disimpan dalam RTC memory. Variabel ini akan tetap terjaga meskipun ESP8266 memasuki Deep Sleep Mode.

- 'bootCount++' untuk menambahkan nilai `bootCount` setiap kali ESP8266 bangun dari Deep Sleep Mode.

 

Contoh Aplikasi: Sensor Suhu Berbasis Baterai

 

Sebagai contoh aplikasi, Anda dapat membuat proyek sederhana menggunakan ESP8266 dan sensor suhu DHT11. Proyek ini akan mengirimkan data suhu ke server setiap 10 menit, sedangkan ESP8266 akan memasuki Deep Sleep Mode di antara interval pengiriman data.

1. Siapkan Komponen

- ESP8266 (NodeMCU atau Wemos D1 Mini)

- Sensor Suhu DHT11

- Baterai LiPo 3.7V

- Regulator Tegangan 3.3V

- Resistor 10kΩ (untuk pull-up pada pin data DHT11)

2. Hubungkan Komponen

- Hubungkan pin VCC dan GND DHT11 ke pin 3.3V dan GND ESP8266.

- Hubungkan pin data DHT11 ke pin GPIO2 (D4) ESP8266, dan tambahkan resistor pull-up 10kΩ antara pin data dan VCC.

- Hubungkan baterai LiPo ke regulator tegangan 3.3V, lalu hubungkan output regulator ke pin VCC dan GND ESP8266.

 

3. Menulis Program

Berikut ini program untuk membaca data suhu dari DHT11 dan mengirimkannya ke server setiap 10 menit:

 

#include <ESP8266WiFi.h>

#include <DHT.h>

#define DHTPIN 2     // Pin GPIO2 (D4) untuk DHT11

#define DHTTYPE DHT11

#define SLEEP_TIME 600e6 // Waktu tidur dalam mikrodetik (10 menit)

DHT dht(DHTPIN, DHTTYPE);

// Deklarasi variabel RTC memory

RTC_DATA_ATTR int bootCount = 0;

const char* ssid = "SSID_WIFI";

const char* password = "PASSWORD_WIFI";

void setup() {

  Serial.begin(115200);

  Serial.println("Memulai ESP8266...");

  // Increment boot count

  bootCount++;

  Serial.print("Boot count: ");

  Serial.println(bootCount);

  // Inisialisasi DHT11

  dht.begin();

  // Membaca suhu dan kelembaban

  float h = dht.readHumidity();

  float t = dht.readTemperature();

  // Cek jika pembacaan sensor berhasil

  if (isnan(h) || isnan(t)) {

    Serial.println("Gagal membaca data dari DHT11!");

    return;

  }

  // Menampilkan data suhu dan kelembaban

  Serial.print("Kelembaban: ");

  Serial.print(h);

  Serial.print(" %\t");

  Serial.print("Suhu: ");

  Serial.print(t);

  Serial.println(" *C");

  // Mengirim data ke server

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {

    delay(500);

    Serial.print(".");

  }

  Serial.println("Terhubung ke WiFi");

  // Contoh mengirim data ke server menggunakan HTTP GET

  WiFiClient client;

  const char* host = "example.com";

  const int httpPort = 80;

  if (!client.connect(host, httpPort)) {

    Serial.println("Gagal terhubung ke server");

    return;

  }

  String url = "/data?temperature=" + String(t) + "&humidity=" + String(h);

  client.print(String("GET ") + url + " HTTP/1.1\r\n" +

               "Host: " + host + "\r\n" +

               "Connection: close\r\n\r\n");

  Serial.println("Data terkirim ke server");

  // Masuk ke Deep Sleep Mode

  Serial.println("Mengaktifkan Deep Sleep Mode...");

  ESP.deepSleep(SLEEP_TIME);

}

void loop() {

  // Kode ini tidak akan dijalankan karena ESP8266 akan reboot setelah bangun dari Deep Sleep

}

 

4. Menjelaskan Kode Program

- `DHT dht(DHTPIN, DHTTYPE);` untuk menginisialisasi objek DHT untuk membaca data dari sensor DHT11.

- `WiFi.begin(ssid, password);` untuk menghubungkan ESP8266 ke jaringan Wi-Fi.

- `client.connect(host, httpPort);` untuk menghubungkan ESP8266 ke server untuk mengirim data suhu dan kelembaban.

- ‘ESP.deepSleep(SLEEP_TIME);’ untuk memasukkan ESP8266 ke dalam Deep Sleep Mode selama 10 menit.




 

 

 

 

 

Siap Untuk Membuat Proyek Impianmu Menjadi Kenyataan?

Klik di sini untuk chat langsung via WhatsApp dan dapatkan dukungan langsung dari tim ahli kami!

 


Posting Komentar

0 Komentar