Jam Dot Matrix Waktu dari NTP Server Wemos ESP8266

Helo temen temen anakkendali.com
Pada kesempatan kali ini saya akan menulis artikel tutorial bagaimana cara mendapatkan waktu secara realtime dan ditampilkan pada modul display dot matrix max7219. artikel serupa mengenai NTP server untuk mendapatkan waktu dari internet juga sudah pernah saya tulis sebelumnya, yang dapat dibaca NodeMCU NTP Server Membuat Jam Digital TM1637.h Wemos ESP8266. Adapun jenis mikrokontroler yang saya gunakan adalah esp8266 wemos d1 mini untuk mengakses NTP server dengan internet. Jam Dot Matrix Ntp Server

Modul Dot Matrix yang dilengkapi dengan ic max7219 berfungsi untuk menampilkan karakter baik angka maupun huruf, dengan komunikasi SPI untuk dapat terhubung ke wemos d1 mini esp8266. membuat kita menghemat penggunaan pin gpio. adapun berapa banyak modul led dotmatrix yang bisa kita gunakan, jawabanya unlimited, selama kita memperhatikan konsumsi arus maka kita bisa menambahkan modul dotmatrix sebanyak apapun.

Jam Dot Matrix Waktu dari NTP Server Wemos ESP8266

Kemudian bagaimana jika ingin menampilkanya pada modul p10 ?

Jawabanya tentu saja sangat bisa, asalkan kalian bisa membuat rangkaian dan program untuk modul p10 dan mengkombinasikan dengan program mendapatkan waktu dari internet dengan NTP server semuanya akan berjalan lancar.

Dan apabila kalian ingin menggunakan board mikrokontroler esp8266 jenis lain seperti NodeMCU juga sangat bisa dilakukan, karena pada dasarnya sama saja, adapun jika ingin menggunakan board ESP32 bisa dilakukan dengan sedikit memodifikasi program serta rangkaian, jika ada waktu dan kesempatan saya akan coba buatkan tutorial NTP server dengan ESP32 juga.

Rangkaian Wemos Dot Matrix Max7219

karena saya males membuat gambar, jadi untuk rangkaianya bisa meniru gambar dibawah ini, tinggal hilangkan modul RTC Ds3231, karena dengan program mendapatkan waktu dari internet, rtc tidak akan kita gunakan lagi.

Jam Dot Matrix Waktu dari NTP Server Wemos ESP8266

Library yang Dibutuhkan

Silahkan terlebih dahulu mendownload library yang dibutuhkan untuk membuat program Jam Dot Matrix Waktu dari NTP Server Wemos d1 mini.

Baca Juga :  Tutorial ESP8266 Wemos D1 Mini Kontrol Relay Firebase Aplikasi Android

Library MD_Parola.h
Library NTPClient.h

Kode Arduino IDE

Buatlah program seperti dibawah ini, kemudian upload pada board wemos d1 mini atau nodemcu yang kalian jadikan sebagai mikrokontroler untuk projek membuat jam sinkronasi otomatis internet dengan NTP server

Kita akan menggunakan tiga buah tab, yang pertama main.ino yakni program utama dan isi kode nya seperti dibawah.

/*
   visit : anakkendali.com
   2020
   admin : chaerul anam
   email : chaerulanam@anakkendali.com
   wa : 083862832235
*/
#include <NTPClient.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include "deklarasi.h"

const char *ssid     = "Devis_Cantik";
const char *password = "kodikitgah";

const long utcOffsetInSeconds = 25200;


#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
#define CLK_PIN   D5
#define DATA_PIN  D7
#define CS_PIN    D0

MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
// Arbitrary output pins
// MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);

#define ARRAY_SIZE(x)  (sizeof(x)/sizeof(x[0]))

// Global data
struct sCatalog
{
  textEffect_t  effect;   // text effect to display
  char *        psz;      // text string nul terminated
  uint16_t      speed;    // speed multiplier of library default
  uint16_t      pause;    // pause multiplier for library default
};
char newMessage[75];

sCatalog  catalog[] =
{
  { PA_PRINT, "PRINT", 1, 1 },
  { PA_SCROLL_UP, "SC_U", 5, 1 },
  { PA_SCROLL_DOWN, "SCR_D", 5, 1 },
  { PA_SCROLL_LEFT, "SCR_L", 5, 1 },
  { PA_SCROLL_RIGHT, "SCR_R", 5, 1 },
#if ENA_SPRITE
  { PA_SPRITE, "SPRIT", 5, 1 },
#endif
#if ENA_MISC
  { PA_SLICE, "SLICE", 1, 1 },
  { PA_MESH, "MESH", 20, 1 },
  { PA_FADE, "FADE", 20, 1 },
  { PA_DISSOLVE, "DSLVE", 7, 1 },
  { PA_BLINDS, "BLIND", 7, 1 },
  { PA_RANDOM, "RAND", 3, 1 },
#endif
#if ENA_WIPE
  { PA_WIPE, "WIPE", 5, 1 },
  { PA_WIPE_CURSOR, "WPE_C", 4, 1 },
#endif
#if ENA_SCAN
  { PA_SCAN_HORIZ, "SCNH", 4, 1 },
  { PA_SCAN_HORIZX, "SCNHX", 4, 1 },
  { PA_SCAN_VERT, "SCNV", 3, 1 },
  { PA_SCAN_VERTX, "SCNVX", 3, 1 },
#endif
#if ENA_OPNCLS
  { PA_OPENING, "OPEN", 3, 500 },
  { PA_OPENING_CURSOR, "OPN_C", 4, 1 },
  { PA_CLOSING, "CLOSE", 3, 1 },
  { PA_CLOSING_CURSOR, "CLS_C", 4, 1 },
#endif
#if ENA_SCR_DIA
  { PA_SCROLL_UP_LEFT, "SCR_UL", 7, 1 },
  { PA_SCROLL_UP_RIGHT, "SCR_UR", 7, 1 },
  { PA_SCROLL_DOWN_LEFT, "SCR_DL", 7, 1 },
  { PA_SCROLL_DOWN_RIGHT, "SCR_DR", 7, 1 },
#endif
#if ENA_GROW
  { PA_GROW_UP, "GRW_U", 7, 1 },
  { PA_GROW_DOWN, "GRW_D", 7, 1 },
#endif
};

// Sprite Definitions
const uint8_t F_PMAN1 = 6;
const uint8_t W_PMAN1 = 8;
static const uint8_t PROGMEM pacman1[F_PMAN1 * W_PMAN1] =  // gobbling pacman animation
{
  0x00, 0x81, 0xc3, 0xe7, 0xff, 0x7e, 0x7e, 0x3c,
  0x00, 0x42, 0xe7, 0xe7, 0xff, 0xff, 0x7e, 0x3c,
  0x24, 0x66, 0xe7, 0xff, 0xff, 0xff, 0x7e, 0x3c,
  0x3c, 0x7e, 0xff, 0xff, 0xff, 0xff, 0x7e, 0x3c,
  0x24, 0x66, 0xe7, 0xff, 0xff, 0xff, 0x7e, 0x3c,
  0x00, 0x42, 0xe7, 0xe7, 0xff, 0xff, 0x7e, 0x3c,
};

const uint8_t F_PMAN2 = 6;
const uint8_t W_PMAN2 = 18;
static const uint8_t PROGMEM pacman2[F_PMAN2 * W_PMAN2] =  // ghost pursued by a pacman
{
  0x00, 0x81, 0xc3, 0xe7, 0xff, 0x7e, 0x7e, 0x3c, 0x00, 0x00, 0x00, 0xfe, 0x7b, 0xf3, 0x7f, 0xfb, 0x73, 0xfe,
  0x00, 0x42, 0xe7, 0xe7, 0xff, 0xff, 0x7e, 0x3c, 0x00, 0x00, 0x00, 0xfe, 0x7b, 0xf3, 0x7f, 0xfb, 0x73, 0xfe,
  0x24, 0x66, 0xe7, 0xff, 0xff, 0xff, 0x7e, 0x3c, 0x00, 0x00, 0x00, 0xfe, 0x7b, 0xf3, 0x7f, 0xfb, 0x73, 0xfe,
  0x3c, 0x7e, 0xff, 0xff, 0xff, 0xff, 0x7e, 0x3c, 0x00, 0x00, 0x00, 0xfe, 0x73, 0xfb, 0x7f, 0xf3, 0x7b, 0xfe,
  0x24, 0x66, 0xe7, 0xff, 0xff, 0xff, 0x7e, 0x3c, 0x00, 0x00, 0x00, 0xfe, 0x73, 0xfb, 0x7f, 0xf3, 0x7b, 0xfe,
  0x00, 0x42, 0xe7, 0xe7, 0xff, 0xff, 0x7e, 0x3c, 0x00, 0x00, 0x00, 0xfe, 0x73, 0xfb, 0x7f, 0xf3, 0x7b, 0xfe,
};

int count_h = 0;

char daysOfTheWeek[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jum'at", "Sabtu"};

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "asia.pool.ntp.org", utcOffsetInSeconds);

void setup() {
  // put your setup code here, to run once:
#ifndef ESP8266
  while (!Serial); // for Leonardo/Micro/Zero
#endif
  WiFi.begin(ssid, password);

  while ( WiFi.status() != WL_CONNECTED ) {
    delay ( 500 );
    Serial.print ( "." );
  }
  Serial.begin(9600);
  delay(3000);
  P.begin();
#if ENA_SPRITE
  P.setSpriteData(pacman1, W_PMAN1, F_PMAN1, pacman2, W_PMAN2, F_PMAN2);
#endif

  for (uint8_t i = 0; i < ARRAY_SIZE(catalog); i++)
  {
    catalog[i].speed *= P.getSpeed();
    catalog[i].pause *= 500;
  }
}

unsigned long lasttime = 0;
byte menu = 0;
long interval = 0;

void loop() {
  // put your main code here, to run repeatedly:
  static textPosition_t just = PA_CENTER;
  static uint8_t i = 0;
  if (P.displayAnimate()) // animates and returns true when an animation is completed
  {
    // rotate the justification if needed
    switch (i) {
      case 0:
        tampil(0);
        i = 3;
        break;
      case 2:
        tampil(3);
        i = 3;
        break;
      case 3:
        tampil(2);
        i = 4;
        break;
      case 4: //fade
        tampil(1);
        i = 8;
        break;
      case 8: // slice
        tampil(1);
        i = 5;
        break;
      case 6: // sprit pacman
        tampil(4);
        i = 3;
        break;
      case 5: // open
        tampil(5);
        i = 2;
        break;
    }
    catalog[i].psz = newMessage;
    // set up new animation
    P.displayText(catalog[i].psz, just, catalog[i].speed, catalog[i].pause, catalog[i].effect, catalog[i].effect);

    delay(catalog[i].pause);
  }
}

Kemudian buatlah tab kedua dengan nama deklarasi.h dengan megisi kode seperti dibawah ini.

#define tahun timeClient.getYear()
#define bulan timeClient.getMonth()
#define tanggal timeClient.getDate()
#define hari daysOfTheWeek[timeClient.getDay()]
#define jam timeClient.getHours()
#define menit timeClient.getMinutes()
#define detik timeClient.getSeconds()

#define _jam 0
#define _tanggal 1
#define _pesan 2
#define _alarm 3

Dan yang ketiga silahkan buat tab baru dengan nama fungsi.ino, isi dengan kode berikut.

#include "deklarasi.h"

void tampil(int a) {
  // berikut ini program supaya jam tampil lebih bagus jika nilainya kurang dari 10
  // seharusnya tampil 1:12:23 >> 01:12:23
  timeClient.update();
  switch (a) {
    case 0:
      sprintf (newMessage, "Made In Indramayu, anakkendali.com");
      break;
    case 1:
      if (jam  < 10 && menit < 10) {
        sprintf (newMessage, "0%d:0%d", jam, menit);
      }
      if (jam  < 10 && menit >= 10) {
        sprintf (newMessage, "0%d:%d", jam, menit);
      }
      if (jam  >= 10 && menit >= 10) {
        sprintf (newMessage, "%d:%d", jam, menit);
      }
      if (jam  >= 10 && menit < 10) {
        sprintf (newMessage, "%d:0%d", jam, menit);
      }
      break;
    case 2:
      sprintf (newMessage, "%s  %d-%d-%d", hari, tanggal, bulan, tahun);
      break;
    case 3:
    sprintf (newMessage, "Alarm Next Tutorial");
      break;
    case 4:
      sprintf (newMessage, "For The Fairest");
      break;
    case 5:
    sprintf (newMessage, "Devi");
      break;
  }
}

Video Tutorial

Untuk menonton video tutorial youtube nya silahkan lihat dibawah.

Baca Juga :  ESP8266, NodeMCU, Cara Mengirim Data DHT11 ke Cayenne

Itulah artikel kali ini tentang Jam Dot Matrix Waktu dari NTP Server Wemos d1 mini, semoga bermanfaat. Dan bagikan ke akun sosail media kalian.

Pencarian Terkait

  • Cara Menadapatkan waktu dari internet
  • Cara mendapatkan waktu NTP Server
  • Program NTP Server ESP8266
  • ESP8266 NTP Server
  • NTP Server ESP8266
  • NodeMCU ESP8266
  • Wemos D1 Mini NTP Server
  • NTP Server Dotmatrix
(Visited 44 times, 1 visits today)