Proyek DIY Jam Digital WiFi Berbasis ESP8266: Sinkron Otomatis dengan Waktu Dunia!

Dalam era digital yang semakin terhubung, perangkat yang dapat berkomunikasi dengan jaringan internet semakin banyak diminati. Salah satu perangkat yang menjadi perhatian adalah mikrokontroler ESP8266, sebuah modul WiFi yang memungkinkan berbagai proyek elektronik untuk terkoneksi dengan internet. Dengan harga yang terjangkau dan kemampuan yang mumpuni, ESP8266 sering digunakan dalam berbagai proyek Internet of Things (IoT), termasuk untuk membuat jam digital yang dapat memperbarui waktu secara otomatis dari internet.

Proyek “Jam Digital WiFi ESP8266” adalah salah satu contoh aplikasi sederhana namun bermanfaat dari penggunaan ESP8266. Proyek ini mengintegrasikan kemampuan ESP8266 untuk terhubung ke jaringan WiFi dan mendapatkan waktu yang akurat dari server NTP (Network Time Protocol). Waktu yang diperoleh kemudian ditampilkan secara real-time pada sebuah LED display, menjadikannya sebagai jam digital yang selalu sinkron dengan waktu global.

Artikel ini akan membahas lebih dalam mengenai cara kerja dan struktur kode dari proyek ini. Dengan memahami kode yang digunakan, pembaca diharapkan dapat mempelajari cara memanfaatkan ESP8266 untuk proyek-proyek IoT lainnya. Dari pengaturan koneksi WiFi hingga proses menampilkan waktu pada LED display, semua aspek teknis dari proyek ini akan dijelaskan secara rinci.

Komponen yang dibutuhkan

Proyek “Jam Digital WiFi ESP8266” menggunakan beberapa komponen kunci yang berperan penting dalam fungsionalitas dan kesederhanaan rangkaian. Berikut adalah pembahasan tentang komponen-komponen tersebut:

1. Max7219 x 4 Dot Matrix Module 4in1 Display (32×8)

Modul Max7219 ini adalah display dot matrix yang terdiri dari 4 unit dot matrix 8×8, disusun dalam format 32×8. Modul ini sangat cocok digunakan dalam proyek seperti jam digital karena memungkinkan tampilan waktu yang jelas dan mudah dibaca. Max7219 berfungsi sebagai driver yang mengontrol tampilan LED dengan hanya menggunakan beberapa pin dari mikrokontroler, sehingga mempermudah pengaturannya. Modul ini terkenal karena kemudahannya dalam dihubungkan ke mikrokontroler seperti ESP8266 dengan antarmuka SPI.

Estimasi harga (Agustus 2024): Rp. 48.000

2. Modul ESP8266: Wemos D1 Mini atau NodeMCU

Wemos D1 Mini dan NodeMCU adalah dua jenis mikrokontroler berbasis ESP8266 yang sering digunakan dalam proyek IoT. Keduanya mendukung konektivitas WiFi yang memungkinkan perangkat terhubung ke internet dan mendapatkan waktu secara otomatis melalui protokol NTP. Wemos D1 Mini memiliki ukuran yang lebih kecil dan lebih hemat ruang dibandingkan NodeMCU, namun NodeMCU menawarkan lebih banyak pin GPIO dan ukuran yang lebih besar untuk fleksibilitas tambahan.

Estimasi Harga:

  • Wemos D1 Mini: Rp. 32.000
  • NodeMCU: Rp. 47.000

Pemilihan antara keduanya tergantung pada kebutuhan spesifik proyek dan preferensi ukuran atau jumlah pin yang dibutuhkan.

3. Kabel Jumper

Kabel jumper adalah kabel penghubung yang digunakan untuk membuat koneksi antara mikrokontroler dan modul display Max7219. Kabel ini sangat penting untuk memastikan koneksi antar komponen berjalan dengan baik dan stabil. Menggunakan kabel jumper berkualitas baik dapat membantu menghindari masalah koneksi yang tidak stabil.

Estimasi Harga:

  • Kabel Jumper (FF): Rp. 10.000

4. Adaptor Mini USB

Adaptor Mini USB digunakan untuk memberi daya pada mikrokontroler (Wemos D1 Mini atau NodeMCU). Komponen ini sangat penting karena memastikan mikrokontroler mendapatkan suplai daya yang stabil, yang penting untuk performa optimal perangkat.

Estimasi Harga:

  • Adaptor Mini USB: Rp 26.000

Estimasi Total Budget yang Dibutuhkan

Untuk membangun jam digital ini, estimasi anggaran tergantung pada pilihan mikrokontroler yang digunakan:

  • Menggunakan Wemos D1 Mini: Total biaya sekitar IDR 116.000.
  • Menggunakan NodeMCU: Total biaya sekitar IDR 131.000.

Pemilihan komponen yang tepat sesuai dengan kebutuhan proyek dan anggaran yang tersedia dapat membantu dalam membuat proyek ini lebih efisien dan fungsional.

Rangkaian

Rangkaian cukup sederhana, ESP dihubungkan ke Display melalui protokol SPI, pin disesuaikan dengan device yang digunakan. Berikut gambar rangkaianannya:

Rangkaian Jam Digital WiFi ESP8266

Coding

Flow programnya cukup sederhana, setelah insiasi, hubungkan ke wifi, lalu ambil waktu dari NTP dan tampilkan di LED Dot Matrik

Flowchart Jam Digital WiFi ESP8266

Penjelasan program sebagai berikut:

Program ini dirancang untuk menampilkan waktu dan tanggal pada matrix LED 8×8 menggunakan modul Max72xx dengan ESP8266. Berikut adalah penjelasan mengenai setiap bagian dari kode:

1. Header Files

#include <ESP8266WiFi.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>
#include <time.h>
  • ESP8266WiFi.h: Untuk menghubungkan ESP8266 ke jaringan Wi-Fi.
  • SPI.h: Library untuk komunikasi SPI.
  • Adafruit_GFX.h: Library grafis yang diperlukan oleh Max72xxPanel.
  • Max72xxPanel.h: Library untuk mengendalikan modul Max72xx LED matrix.
  • time.h: Untuk menangani operasi waktu, seperti mendapatkan waktu dari server NTP.

2. Konstanta dan Variabel Global

int numberOfHorizontalDisplays = 4;
int numberOfVerticalDisplays = 1;
const byte buffer_size = 45;
char time_value[buffer_size];
int pinCS = D4;

Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);

const char *ssid = "WIFINAME";
const char *password = "WIFIPASS";
  • numberOfHorizontalDisplays: Jumlah display horizontal.
  • numberOfVerticalDisplays: Jumlah display vertikal (biasanya 1).
  • buffer_size: Ukuran buffer untuk menyimpan string waktu.
  • time_value: Array untuk menyimpan string waktu dalam format HH:MM dd/mm.
  • pinCS: Pin Chip Select untuk komunikasi SPI.
  • matrix: Objek dari kelas Max72xxPanel yang mengontrol matrix LED.
  • ssid dan password: Kredensial Wi-Fi untuk menghubungkan ke jaringan.

3. Fungsi setup()

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  configTime(0 * 3600, 0, "pool.ntp.org", "time.nist.gov");
  setenv("TZ", "WIB-7", 1);
  matrix.setIntensity(7);
  matrix.setRotation(0, 1);
  matrix.setRotation(1, 1);
  matrix.setRotation(2, 1);
  matrix.setRotation(3, 1);
}
  • Serial.begin(115200): Memulai komunikasi serial dengan kecepatan 115200 baud.
  • WiFi.begin(ssid, password): Menghubungkan ESP8266 ke Wi-Fi.
  • configTime(0 * 3600, 0, “pool.ntp.org”, “time.nist.gov”): Mengatur waktu menggunakan server NTP.
  • setenv(“TZ”, “WIB-7”, 1): Menyetel zona waktu ke WIB (Waktu Indonesia Barat).
  • matrix.setIntensity(7): Mengatur kecerahan matrix LED (0-15).
  • matrix.setRotation(…): Mengatur rotasi untuk setiap display.

4. Fungsi loop()

void loop() {
  matrix.fillScreen(LOW);

  String time = get_time();
  time.trim();
  Serial.println(time);
  time.toCharArray(time_value, 12);

  matrix.drawChar(2, 0, time_value[0], HIGH, LOW, 1);
  matrix.drawChar(8, 0, time_value[1], HIGH, LOW, 1);
  matrix.drawChar(20, 0, time_value[3], HIGH, LOW, 1);
  matrix.drawChar(26, 0, time_value[4], HIGH, LOW, 1);

  for (int i = 0; i < 10; i++) {
    matrix.drawChar(14, 0, time_value[2], HIGH, LOW, 1);
    matrix.write();
    delay(500);

    matrix.drawChar(14, 0, time_value[5], HIGH, LOW, 1);
    matrix.write();
    delay(500);
  }

  matrix.drawChar(2, 0, time_value[6], HIGH, LOW, 1);
  matrix.drawChar(8, 0, time_value[7], HIGH, LOW, 1);
  matrix.drawChar(14, 0, time_value[8], HIGH, LOW, 1);
  matrix.drawChar(20, 0, time_value[9], HIGH, LOW, 1);
  matrix.drawChar(26, 0, time_value[10], HIGH, LOW, 1);
  matrix.write();
  delay(2000);
}
  • matrix.fillScreen(LOW): Mengosongkan layar matrix LED.
  • String time = get_time(): Mendapatkan string waktu dari fungsi get_time().
  • time.toCharArray(time_value, 12): Menyalin waktu ke array time_value.
  • matrix.drawChar(…): Menampilkan karakter pada matrix LED sesuai dengan posisi yang ditentukan.
  • for (int i = 0; i < 10; i++): Mengganti karakter detik setiap 500 ms.
  • matrix.write(): Mengirim data ke matrix LED untuk ditampilkan.
  • delay(…): Menunda eksekusi selama waktu tertentu.

5. Fungsi get_time()

String get_time() {
  time_t now;
  time(&now);
  char time_output[buffer_size];

  strftime(time_output, buffer_size, "%R %d/%m", localtime(&now));

  return String(time_output);
}
  • time_t now: Mendapatkan waktu saat ini.
  • strftime(time_output, buffer_size, “%R %d/%m”, localtime(&now)): Memformat waktu menjadi string dalam format HH:MM dd/mm.
  • return String(time_output): Mengembalikan string waktu.

Program ini menggunakan waktu dari server NTP dan menampilkannya di matrix LED dengan format HH:MM dd/mm. Display menunjukkan waktu saat ini, memperbarui tampilan setiap detik dan menampilkan tanggal setiap 2 detik.


Code program:

https://github.com/brifeb/Jam-Digital-WiFi-ESP8266

Youtube vidio:

Tonton di Youtube: https://www.youtube.com/watch?v=AhU7EykZbcQ

Febrianto

Penulis Senior Ndoware.com yang lagi suka ngulik Arduino dan IoT. Hoby bermain game baik itu di komputer, gadget maupun di dunia nyata :)

Mungkin Anda juga menyukai

Tinggalkan Balasan

This site uses Akismet to reduce spam. Learn how your comment data is processed.