Pada artikel ini, Arduino Indonesia membahas tentang cara menggunakan deep sleep pada ESP8266 serta metode membangunkannya menggunakan timer atau wake up eksternal dengan firmware MicroPython.
Pengenalan Deep Sleep
Saat ESP8266 berada dalam mode deep sleep, seluruh sistem dimatikan kecuali Real Time Clock (RTC) yang berfungsi menjaga penghitungan waktu. Dalam mode deep sleep, konsumsi daya chip ESP8266 hanya sekitar 20 µA.
Namun, perlu diingat bahwa pada papan ESP8266 yang sudah dirakit, konsumsi arus akan jauh lebih tinggi.
Kami berhasil membuat perekam data stasiun cuaca dengan ESP8266 menggunakan MicroPython yang hanya mengonsumsi 7 µA saat dalam mode deep sleep.
Baca juga: Tutorial MicroPython ESP32 - WiFi Manager (Kompatibel ESP8266)
Timer Wake Up judul terbesar
Ada beberapa cara untuk membangunkan ESP8266 dengan timer setelah deep sleep. Salah satu cara termudah adalah dengan menggunakan fungsi berikut dalam kode Anda.
def deep_sleep(msecs):
#configure RTC.ALARM0 to be able to wake the device
rtc = machine.RTC()
rtc.irq(trigger=rtc.ALARM0, wake=machine.DEEPSLEEP)
# set RTC.ALARM0 to fire after Xmilliseconds, waking the device
rtc.alarm(rtc.ALARM0, msecs)
#put the device to sleep
machine.deepsleep()
Kami menyarankan untuk menyalin fungsi di atas ke bagian awal kode program Anda, lalu memanggil fungsi deep_sleep() untuk memasukkan ESP8266 ke mode deep sleep.
Fungsi deep_sleep() ini membuat timer yang akan membangunkan ESP8266 setelah sejumlah detik yang ditentukan. Untuk menggunakan fungsi ini nanti dalam kode, Anda cukup memberikan argumen deep sleep dalam milidetik.
Kode Program
Pada kode berikut, ESP8266 akan berada dalam mode deep sleep selama 10 detik. Saat terbangun, LED akan berkedip, kemudian kembali tidur. Proses ini akan terus berulang.
import machine
from machine import Pin
from time import sleep
led = Pin(2, Pin.OUT)
def deep_sleep(msecs):
# configure RTC.ALARM0 to be able to wake the device
rtc = machine.RTC()
rtc.irq(trigger=rtc.ALARM0, wake=machine.DEEPSLEEP)
# set RTC.ALARM0 to fire after X milliseconds (waking the device)
rtc.alarm(rtc.ALARM0, msecs)
# put the device to sleep
machine.deepsleep()
#blink LED
led.value(1)
sleep(1)
led.value(0)
sleep(1)
# wait 5 seconds so that you can catch the ESP awake to establish a serial communication later
# you should remove this sleep line in your final script
sleep(5)
print('Im awake, but Im going to sleep')
#sleep for 10 seconds (10000 milliseconds)
deep_sleep(10000)
Penjelasan Kode
Pertama, impor library yang diperlukan:
import machine
from machine import Pin
from time import sleep
Buat objek Pin yang merujuk ke GPIO 2 dengan nama led. Pada papan kami, ini merujuk ke LED onboard.
led = Pin(2, Pin.OUT)
Setelah itu, tambahkan fungsi deep_sleep() ke dalam kode Anda:
def deep_sleep(msecs):
#configure RTC.ALARM0 to be able to wake the device
rtc = machine.RTC()
rtc.irq(trigger=rtc.ALARM0, wake=machine.DEEPSLEEP)
# set RTC.ALARM0 to fire after Xmilliseconds, waking the device
rtc.alarm(rtc.ALARM0, msecs)
#put the device to sleep
machine.deepsleep()
Baris berikut membuat LED berkedip.
led.value(1)
sleep(1)
led.value(0)
sleep(1)
Sebelum masuk ke mode tidur, kami menambahkan jeda 5 detik dan mencetak pesan untuk memberi tahu bahwa perangkat akan tidur.
sleep(5)
print('Im awake, but Im going to sleep')
Penting untuk menambahkan jeda 5 detik sebelum tidur saat kita mengembangkan kode program. Saat Anda ingin mengunggah kode baru ke papan, perangkat harus dalam keadaan bangun. Jadi, tanpa jeda tersebut, akan sulit untuk menangkap momen bangunnya guna mengunggah kode nanti. Setelah kode final siap, jeda ini dapat dihapus.
Terakhir, masukkan ESP8266 ke mode deep sleep selama 10 detik (10.000 milidetik) dengan memanggil fungsi deep_sleep() dan memberikan jumlah milidetik sebagai argumen.
deep_sleep(10000)
Setelah 10 detik, ESP8266 akan bangun dan menjalankan kode dari awal lagi, mirip seperti ketika Anda menekan tombol RESET.
Mengunggah Kode
Salin kode yang disediakan ke file main.py dan unggah ke ESP8266 Anda.
Setelah mengunggah kode, Anda perlu menghubungkan GPIO16 (D0) ke pin RST* agar ESP8266 dapat membangkitkan dirinya sendiri.
Demonstrasi
Setelah mengunggah kode dan menghubungkan GPIO 16 (D0) ke pin RST, ESP8266 akan membuat LED onboard berkedip dan mencetak pesan di Shell.
Kemudian, papan akan tidur selama 10 detik, bangun, dan menjalankan kode lagi. Proses ini akan terus berulang.
Deep Sleep dengan ESP-01
Jika Anda ingin membuat rangkaian serupa dengan papan ESP-01, Anda perlu menyolder kawat seperti yang ditunjukkan pada gambar berikut. Pin kecil pada chip tersebut adalah GPIO16 dan harus dihubungkan ke pin RST.
Namun, ukuran pin-pin tersebut sangat kecil sehingga sangat sulit untuk menyolder kawat langsung ke GPIO16 tanpa berisiko merusak chip.
External Wake Up
ESP8266 tidak mendukung external wake up langsung seperti ESP32. Namun, ada solusi yang dapat diterapkan.
Jika kita memasukkan ESP8266 ke dalam mode deep sleep tanpa batas waktu, papan hanya akan bangun ketika ada sesuatu yang me-reset-nya. Jadi, kita dapat menghubungkan suatu komponen ke pin RST dan menggunakannya sebagai pemicu bangun eksternal. Misalnya, tombol tekan (pushbutton) atau saklar reed magnetik yang mendekat.
ESP8266 akan di-reset ketika pin RST mendapat sinyal LOW.
Diagram Rangkaian
Untuk menguji metode ini, hubungkan sebuah pushbutton ke pin RST. Anda memerlukan komponen berikut:
- ESP8266
- Pushbutton
- Resistor 10k Ohm
- Breadboard
- Kabel jumper
Jika Anda menggunakan modul ESP8266 12-E NodeMCU, ikuti diagram rangkaian berikut.
Jika Anda menggunakan ESP-01, Anda dapat mengikuti diagram rangkaian berikut.
Kode Program
Unggah kode berikut ke ESP8266 sebagai main.py.
from machine import deepsleep
from machine import Pin
from time import sleep
led = Pin (2, Pin.OUT)
#blink LED
led.value(0)
sleep(1)
led.value(1)
sleep(1)
# wait 5 seconds so that you can catch the ESP awake to establish a serial communication later
# you should remove this sleep line in your final script
sleep(5)
print('Im awake, but Im going to sleep')
sleep(1)
#sleep for indefinite time
deepsleep()
Dalam kasus ini, Anda cukup memanggil machine.deepsleep() setelah eksekusi kode utama. Saat Anda memanggil machine.deepsleep() tanpa argumen, ESP8266 akan masuk ke mode deep sleep tanpa batas waktu hingga Anda menekan tombol RST.
Demonstrasi
Setelah merangkai sirkuit dan mengunggah kode, Anda dapat menguji setup ini. Setiap kali Anda menekan pushbutton yang terhubung ke pin RST, ESP8266 akan di-reset dan terbangun. Papan akan membuat LED onboard berkedip, lalu kembali tidur.
Baca juga: MicroPython ESP32/ESP8266 - Cara Mengontrol Modul Relay Menggunakan Web Server
Siap Belajar & Bangun Proyek IoT?
KLIK GAMBAR DI BAWAH INI UNTUK BELI TRAINER KIT ESP32
![]() |
| Klik gambar untuk pembelian |
Dalam praktik, hasil dan kendala yang ditemui bisa berbeda tergantung perangkat, konfigurasi, versi library, dan sistem yang digunakan.
- Diskusi umum dan tanya jawab praktik: https://t.me/edukasielektronika
- Kendala spesifik dan kasus tertentu: http://bit.ly/Chatarduino













0 on: "Panduan Lengkap MicroPython ESP8266 - Deep Sleep, Wake Up Source, dan Manajemen Daya "