Membuat NTP Clock Dengan panel P10 Menggunakan Wemos D1 Mini ESP8266


 Pada percobaan kali ini saya akan membuat tutorial bagaimana cara membuat Jam NTP P10 Menggunakan Wemos D1 Mini ESP8266. Sebelum Lanjut saya akan menjelasakan apa itu NTP. Network Time Protocol (NTP) adalah sebuah protokol yang digunakan untuk pengsinkronan waktu di dalam sebuah jaringan bisa pada jaringan LAN (Local Area Network) maupun pada jaringan internet dan untuk sinkronisasi jam-jam sistem komputer di atas paket-switching, variabel-latency jaringan data. Proses sinkronisasi ini dilakukan didalam jalur komunikasi data yang biasanya menggunakan protokol komunikasi TCP/IP. Jadi Jam ini akan secara otomatis sinkron dengan server yang kita gunakan, jadi tidak membutuhkan modul RTC lagi sebagai penyinkron waktunya. Bagi Kalian Yang ingin Membuat atau mencoba percobaan kali ini kalian perlu menyiapkan bahan sebagai berikut: 

1. Modul P10 4 Buah
2. Wemos D1 Mini 
3. Kabel USB 
4. Kabel Jumper Secukupnya
5. Power Supply 5V 20A 

Setelah bahan lengkap silahkan dirangkai sesuai Skema rangkaian di bawah ini:

Jika Rangkaian sudah selesai dirangkai, buatlah program seperti  di bawah ini:




================================== SOURCE CODE ==================================
#include "NTPClient.h"
#include "ESP8266WiFi.h"
#include "WiFiUdp.h"
#include "HJS589.h"

#include "fonts/Mono5x7.h"
#include "fonts/bmz15x32.h"
#include "fonts/bmz10x16.h"
#include "fonts/angka6x13.h"
#include "fonts/TimesNewRoman12.h"

// SETUP DMD HJS589
#define DispS_WIDE 4 
#define DispS_HIGH 1
HJS589 Disp(DispS_WIDE, DispS_HIGH);  // Jumlah Panel P10 yang digunakan (KOLOM,BARIS)

// HJS589 P10 FUNGSI TAMBAHAN UNTUK NODEMCU ESP8266

void ICACHE_RAM_ATTR refresh() { 
  
  Disp.refresh();
  timer0_write(ESP.getCycleCount() + 80000);  

}

void Disp_init() {
  
  Disp.start();
  noInterrupts();
  timer0_isr_init();
  timer0_attachInterrupt(refresh);
  interrupts();
  Disp.clear();
  
}

const char *ssid     = "xxxxxxxx";
const char *password = "xxxxxxxx";

const long utcOffsetInSeconds = 25200;

char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

// Define NTP Client to get time
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "asia.pool.ntp.org", utcOffsetInSeconds);

int hh, mm, ss;

void setup() {
  WiFi.begin(ssid, password);

  while ( WiFi.status() != WL_CONNECTED ) {
    delay ( 500 );
    Serial.print ( "." );
  }

  timeClient.begin();
  //DMD
  Disp_init();
  
  Disp.setBrightness(50);
  Disp.setFont(Mono5x7);
  Disp.drawText(0,  0,"Connecting.");
  delay(500);
  Disp.drawText(0,  0,"Connecting..");
  delay(500);
  Disp.drawText(0,  0,"Connecting...");
  delay(500);
  Disp.drawText(0,  0,"Connecting....!");
  delay(500);
  Disp.clear();
}

void loop() {
 timeClient.update();
  hh = timeClient.getHours();
  mm = timeClient.getMinutes();
  ss = timeClient.getSeconds();
  Serial.print(daysOfTheWeek[timeClient.getDay()]);
  Serial.print(", ");
  Serial.print(hh);
  Serial.print(":");
  Serial.print(mm);
  Serial.print(":");
  Serial.println(ss);
    char  BuffH1[20];
    char  BuffH2[20];
    char  BuffM1[20];
    char  BuffM2[20];
    char  BuffD1[20];
    char  BuffD2[20];
    int s1,s2,m1,m2,h1,h2;
     s1 = ss % 10/1;        
     s2 = ss % 100/10;        
     m1 = mm % 10/1;
     m2 = mm % 100/10;
     h1 = hh   % 10/1;
     h2 = hh   % 100/10;
     
    sprintf(BuffD1, "%.1d", s1);
    sprintf(BuffD2, "%.1d", s2);
    sprintf(BuffM1, "%.1d", m1);
    sprintf(BuffM2, "%.1d", m2);
    sprintf(BuffH1, "%.1d", h1);
    sprintf(BuffH2, "%.1d", h2);
    
    Disp.setFont(bmz10x16);
  
    Disp.drawText(20,  0, BuffH2);
    Disp.drawText(32, 0, BuffH1);
    Disp.drawText(53, 0, BuffM2);
    Disp.drawText(65, 0, BuffM1);
    Disp.drawText(86, 0, BuffD2);
    Disp.drawText(98, 0, BuffD1);

    Disp.drawCircle(47,3,2);
    Disp.drawCircle(47,12,2);
    Disp.drawCircle(80,3,2);
    Disp.drawCircle(80,12,2);
    Disp.drawCircle(47,3,1);
    Disp.drawCircle(47,12,1);
    Disp.drawCircle(80,3,1);
    Disp.drawCircle(80,12,1);
    Disp.drawCircle(47,3,0);
    Disp.drawCircle(47,12,0);
    Disp.drawCircle(80,3,0);
    Disp.drawCircle(80,12,0);

    Disp.drawLine(0,0,0,15,1);
    Disp.drawLine(15,0,15,15,1);
    Disp.drawLine(0,0,15,0,1);
    Disp.drawLine(0,15,15,15,1);

    Disp.drawLine(2,2,4,4,1);
    Disp.drawLine(4,2,2,4,1);
    
    Disp.drawLine(11,2,13,4,1);
    Disp.drawLine(13,2,11,4,1);

    Disp.drawLine(2,11,4,13,1);
    Disp.drawLine(4,11,2,13,1);
   
    Disp.drawLine(11,11,13,13,1);
    Disp.drawLine(13,11,11,13,1);

    Disp.drawLine(6,6,9,9,1);
    Disp.drawLine(6,9,9,6,1);
    
    
    Disp.drawLine(112,0,112,15,1);
    Disp.drawLine(127,0,127,15,1);
    Disp.drawLine(112,0,127,0,1);
    Disp.drawLine(112,15,127,15,1);

    Disp.drawLine(114,2,116,4,1);
    Disp.drawLine(116,2,114,4,1);

    Disp.drawLine(123,2,125,4,1);
    Disp.drawLine(125,2,123,4,1);
    
    Disp.drawLine(114,11,116,13,1);
    Disp.drawLine(116,11,114,13,1);

    Disp.drawLine(123,11,125,13,1);
    Disp.drawLine(125,11,123,13,1);

    Disp.drawLine(118,6,121,9,1);
    Disp.drawLine(118,9,121,6,1);
}



lalu Upload Program Tersebut Ke Wemos D1 Mini Dengan Kabel USB yang sudah disediakan. Bagi Yang Belum Mempunyai Library HJS589 dan NTPClient Silahkan Download.

Selamat Mencoba.!



2 comments

dian said...

Mas, apa bedanya lib HJS sama DMDESP? bagus mana mas?

An Najiyah Kendari said...

Bismillah, sy sudah berhasil buat, tapi beberapa saat layar jadi blank (kadang bisa bertahan lama kadang juga cepat), harus di reset baru tampil lagi, sudah ganti beberapa panel tetap saja gitu, sudah pake buffer juga, kira2 masalahnya dimana ya. Trima kasih

Dicky B_Mz. Powered by Blogger.