Eksperimen ESP32 Deep Sleep melalui thingspeak

    Kebutuhan akan power dalam suatu perangkat sangatlah penting. perangkat dengan menggunakan tenaga dari listrik langsung (PLN) dapat dengan mudah dibuat dan seringkali tanpa memikirkan penggunaannya. lain halnya dengan tenaga baterai, justru kita harus dapat menghemat pemakainnya agar perangkat yang dijalankan dapat bertahan lama. semakin lama perangkat dengan sumber baterai bertahan, semakin baik pula perangkat tersebut.
    Esp32 merupakan perangka dengan konsumsi keadaan stanby WiFi adalah 75 mA (tanpa LED atau apapun), nilai ini tentunya sangat tinggi sehingga jika menggunakan baterai, beberapa menit saja akan habis. namun jika menggunakan listrik langsung, hal tersebut tidak menjadi masalah yang berarti. namun jika menggunakan baterai hal ini menjadi masalah besar yang membuat esp32 menjadi tidak bisa digunakan lama. namun ada solusi alternatif dalam mengatasi masalah tersebut, yakni menggunakan mode deep sleep yang sudah tersedia pada ESP32.


Deep Sleep pada esp32 merupakan fitur dimana chip esp32 akan mematikan semua fitur yang ada (GPIO, WiFi, dll) kecuali timer sleep, sehingga membuat mode ini mengkonsumsi daya yang sangat rendah yaitu 5uA yang tentunya sangat cocok digunakan pada power baterai. Dalam mengimplementasikannya, kita hanya perlu menambhakan kode deep sleep beserta waktunya untuk kembali lagi ke mode normal sehingga penggunaan daya baterai pada perangkat dapat dikurangi dengan sangat signifikan.

Disini saya telah melakukan sebuah percobaan menggunakan ESP32 (dengan LED dan sumber 5V bukan 3.3V) dengan mode stanby dan mode deep sleep. kode programnya ditunjukan dibawah ini

Kode Program Mode Stanby

#include <WiFi.h>
#include "secrets.h"
#include "ThingSpeak.h" // always include thingspeak header file after other header files and custom macros
#include "esp_deep_sleep.h" //Library needed for ESP32 Sleep Functions

char ssid[] = SECRET_SSID;   // your network SSID (name) 
char pass[] = SECRET_PASS;   // your network password
int keyIndex = 0;            // your network key Index number (needed only for WEP)
WiFiClient  client;

unsigned long myChannelNumber = SECRET_CH_ID;
const char * myWriteAPIKey = SECRET_WRITE_APIKEY;

int number = 0;
const int UpdateInterval = 0.33 * 60 * 1000000;  // e.g. 0.33 * 60 * 1000000; //20-Sec update interval for development tests, to fast for practical purposes and Thingspeak!
void setup() {
  Serial.begin(115200);  //Initialize serial
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo native USB port only
  }
  
}

void loop() {

  WiFi.mode(WIFI_STA);   
  ThingSpeak.begin(client);  // Initialize ThingSpeak
  // Connect or reconnect to WiFi
  if(WiFi.status() != WL_CONNECTED){
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(SECRET_SSID);
    while(WiFi.status() != WL_CONNECTED){
      WiFi.begin(ssid, pass); // Connect to WPA/WPA2 network. Change this line if using open or WEP network
      Serial.print(".");
      delay(3000);     
    } 
    Serial.println("\nConnected.");
  }

  // Write to ThingSpeak. There are up to 8 fields in a channel, allowing you to store up to 8 different
  // pieces of information in a channel.  Here, we write to field 1.
  int x = ThingSpeak.writeField(myChannelNumber, 1, number, myWriteAPIKey);
  if(x == 200){
    Serial.println("Channel update successful.");
  }
  else{
    Serial.println("Problem updating channel. HTTP error code " + String(x));
  }
  number = random(50,90);
delay(20000);
}
Hasil dari mode stanby adalah sebagai berikut:
  • Detik mengubungkan WiFi (8-20 detik rata-rata)


  • Detik Stanby (20 Detik)


Note: Daya besar, karena adanya regulator 5V ke 3.3V dan LED esp32 board serta komponen pendukungnya.

Kode Program Mode Deep Sleep

include <WiFi.h>
#include "secrets.h"
#include "ThingSpeak.h" // always include thingspeak header file after other header files and custom macros
#include "esp_deep_sleep.h" //Library needed for ESP32 Sleep Functions

char ssid[] = SECRET_SSID;   // your network SSID (name) 
char pass[] = SECRET_PASS;   // your network password
int keyIndex = 0;            // your network key Index number (needed only for WEP)
WiFiClient  client;

unsigned long myChannelNumber = SECRET_CH_ID;
const char * myWriteAPIKey = SECRET_WRITE_APIKEY;

int number = 0;
const int UpdateInterval = 0.33 * 60 * 1000000;  // e.g. 0.33 * 60 * 1000000; //20-Sec update interval for development tests, to fast for practical purposes and Thingspeak!
void setup() {
  Serial.begin(115200);  //Initialize serial
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo native USB port only
  }
  
  WiFi.mode(WIFI_STA);   
  ThingSpeak.begin(client);  // Initialize ThingSpeak
  // Connect or reconnect to WiFi
  if(WiFi.status() != WL_CONNECTED){
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(SECRET_SSID);
    while(WiFi.status() != WL_CONNECTED){
      WiFi.begin(ssid, pass); // Connect to WPA/WPA2 network. Change this line if using open or WEP network
      Serial.print(".");
      delay(3000);     
    } 
    Serial.println("\nConnected.");
  }

  // Write to ThingSpeak. There are up to 8 fields in a channel, allowing you to store up to 8 different
  // pieces of information in a channel.  Here, we write to field 1.
  int x = ThingSpeak.writeField(myChannelNumber, 1, number, myWriteAPIKey);
  if(x == 200){
    Serial.println("Channel update successful.");
  }
  else{
    Serial.println("Problem updating channel. HTTP error code " + String(x));
  }
  number = random(50,90);
  esp_deep_sleep_enable_timer_wakeup(UpdateInterval);
  Serial.println("Going to sleep now...");
  esp_deep_sleep_start();
}

void loop() {


}
Hasil dari mode deep sleep adalah sebagai berikut:
  • Detik mengubungkan WiFi (8-20 detik rata-rata)/Waktu ON


  • Detik Deep Sleep (20 Detik)/Waktu Deep Sleep


  • Perhitungan Waktu konsumsi
- Perhitungan Daya Tahan Baterai. Asumsikan baterai 3.6v (3 batt x1.2v NiMHd) berkapasitas 2200mAH dan durasi waktu aktif (ON) 8 detik dan kemudian 20 ​​detik tidur (128,6x per jam)
- Total konsumsi mAH per jam (waktu ON) = 128,6 x 75mA * 8 / 3600 = 21,43mAH 
- Total konsumsi mAH per jam(waktu DS) = 128,6 x 5uA * 20 / 3600 = 0,0036mAH Total waktu dalam jam pada baterai = 2200/(21,43 +0,0036) = 97,97 Jam 
- Total hari dengan baterai = 97,97/24 = 4,08 Hari

Note: Daya besar, karena adanya regulator 5V ke 3.3V dan LED esp32 board serta komponen pendukungnya.


0 Response to "Eksperimen ESP32 Deep Sleep melalui thingspeak"

Posting Komentar

Berkomentarlah dengan baik ^_^