ESP8266/ESP32 Mengakses NTP Server dan Api Jadwal Waktu Sholat (JWS)

Helo temen-temen anakkendali.com

Banyak yang membuat projek running teks untuk kebutuhan jadwal sholat di masjid, namun masih menggunakan modul RTC lokal seperti DS3231 dan DS1307, namun sekarang website anakkendali menyarankan data waktu bisa di ambil secara realtime dari internet. baik tanggal, tahun, jam bahkan sampai menit, semua datanya dapat di ambil dari internet menggunakan NTP server. tidak hanya itu, pada tutorial kali ini kita akan mengakses API JWS (Jadwal Waktu Sholat) sehingga mendapatkan data jadwa waktu sholat secara akurat dari Internet.

Untuk mempelajari cara bagaiaman mengambil data waktu di internet, silahkan baca artikel berikut NodeMCU NTP Server Membuat Jam Digital TM1637.h Wemos ESP8266 dan juga Jam Dot Matrix Waktu dari NTP Server Wemos ESP8266.

ESP8266/ESP32 Mengakses NTP Server dan Api Jadwal Waktu Sholat (JWS)

Skematik

Kali ini kita tidak menggunakan rangkaian atau skematik apapun, karena hanya akan menggunakan satu modul ESP8266 seperti NodeMCU, Wemos D1 Mini atau ESP32 seperti Lolin 32, Wemos D1 mini ESP32, ESP32 CAM dan lain sebagainya.

Baca Juga :  ESP8266, Cara Mengirim Data Sensor Jarak ke Thingspeak

Code

Code ESP8266 NTP Server dan API Jadwal Waktu Sholat

#include <NTPClient.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiUdp.h>
#include <ArduinoJson.h>

const char *ssid     = "anakkendali.com";
const char *password = "bayardikitlimangewu";


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

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

#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()

char tanggalapi[11];

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);

  WiFi.begin(ssid, password);

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

  timeClient.begin();
}

unsigned long lasttime = 0;

void loop() {
  // put your main code here, to run repeatedly:
  timeClient.update();
  if (millis() - lasttime >= 1000) {
    Serial.print(daysOfTheWeek[timeClient.getDay()]);
    Serial.print(", ");
    
    if (bulan >= 10 && tanggal >= 10) {
      sprintf (tanggalapi, "%d-%d-%d", tahun, bulan, tanggal);
    }
    else if (bulan >= 10 && tanggal < 10) {
      sprintf (tanggalapi, "%d-%d-0%d", tahun, bulan, tanggal);
    }
    else if (bulan < 10 && tanggal >= 10) {
      sprintf (tanggalapi, "%d-0%d-%d", tahun, bulan, tanggal);
    }
    else if (bulan < 10 && tanggal < 10) {
      sprintf (tanggalapi, "%d-0%d-0%d", tahun, bulan, tanggal);
    }

    Serial.print(tanggalapi);
    Serial.print("\t");
    
    Serial.print(jam);
    Serial.print(":");
    Serial.print(menit);
    Serial.print(":");
    Serial.println(detik);
    Serial.println();
    lasttime = millis();
  }
  req_api();
}

void req_api(){
  StaticJsonDocument<1024> doc;
  HTTPClient http;
  String url = "http://api.banghasan.com/sholat/format/json/jadwal/kota/687/tanggal/";
  url += tanggalapi;
  
//  Serial.println(
  http.begin(url);
  http.addHeader("Content-Type", "application/x-www-form-urlencoded");
  int httpCode = http.POST("?");
  String payload = http.getString();
//  Serial.println(payload);

  DeserializationError error = deserializeJson(doc, payload);

  JsonObject results = doc["jadwal"]["data"];
  String ashar = results["ashar"];
  String dhuha = results["dhuha"];
  String dzuhur = results["dzuhur"];
  String imsak = results["imsak"];
  String isya = results["isya"];
  String subuh = results["subuh"];

  Serial.print("Ashar = ");
  Serial.println(ashar);
  Serial.print("Dhuha = ");
  Serial.println(dhuha);
  Serial.print("Dzuhur = ");
  Serial.println(dzuhur);
  Serial.print("Imsak = ");
  Serial.println(imsak);
  Serial.print("Isya = ");
  Serial.println(isya);
  Serial.print("Subuh = ");
  Serial.println(subuh);
  Serial.println();
  
  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.c_str());
    return;
  }
}

ESP32 NTP Server dan API Jadwal Waktu Sholat

#include <NTPClient.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <WiFiUdp.h>
#include <ArduinoJson.h>

const char *ssid     = "anakkendali.com";
const char *password = "bayardikitlimangewu";


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

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

#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()

char tanggalapi[11];

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);

  WiFi.begin(ssid, password);

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

  timeClient.begin();
}

unsigned long lasttime = 0;

void loop() {
  // put your main code here, to run repeatedly:
  timeClient.update();
  if (millis() - lasttime >= 1000) {
    Serial.print(daysOfTheWeek[timeClient.getDay()]);
    Serial.print(", ");
    
    if (bulan >= 10 && tanggal >= 10) {
      sprintf (tanggalapi, "%d-%d-%d", tahun, bulan, tanggal);
    }
    else if (bulan >= 10 && tanggal < 10) {
      sprintf (tanggalapi, "%d-%d-0%d", tahun, bulan, tanggal);
    }
    else if (bulan < 10 && tanggal >= 10) {
      sprintf (tanggalapi, "%d-0%d-%d", tahun, bulan, tanggal);
    }
    else if (bulan < 10 && tanggal < 10) {
      sprintf (tanggalapi, "%d-0%d-0%d", tahun, bulan, tanggal);
    }

    Serial.print(tanggalapi);
    Serial.print("\t");
    
    Serial.print(jam);
    Serial.print(":");
    Serial.print(menit);
    Serial.print(":");
    Serial.println(detik);
    Serial.println();
    lasttime = millis();
  }
  req_api();
}

void req_api(){
  StaticJsonDocument<1024> doc;
  HTTPClient http;
  String url = "http://api.banghasan.com/sholat/format/json/jadwal/kota/687/tanggal/";
  url += tanggalapi;
  
//  Serial.println(
  http.begin(url);
  http.addHeader("Content-Type", "application/x-www-form-urlencoded");
  int httpCode = http.POST("?");
  String payload = http.getString();
//  Serial.println(payload);

  DeserializationError error = deserializeJson(doc, payload);

  JsonObject results = doc["jadwal"]["data"];
  String ashar = results["ashar"];
  String dhuha = results["dhuha"];
  String dzuhur = results["dzuhur"];
  String imsak = results["imsak"];
  String isya = results["isya"];
  String subuh = results["subuh"];

  Serial.print("Ashar = ");
  Serial.println(ashar);
  Serial.print("Dhuha = ");
  Serial.println(dhuha);
  Serial.print("Dzuhur = ");
  Serial.println(dzuhur);
  Serial.print("Imsak = ");
  Serial.println(imsak);
  Serial.print("Isya = ");
  Serial.println(isya);
  Serial.print("Subuh = ");
  Serial.println(subuh);
  Serial.println();
  
  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.c_str());
    return;
  }
}

Untuk Hasilnya dapat dilihat pada gambar berikut.

ESP8266/ESP32 Mengakses NTP Server dan Api Jadwal Waktu Sholat (JWS)

Untuk melihat tutorial video di youtube silahkan tonton dibawah ini.

Baca Juga :  ESP8266, NodeMcu RFID Kirim Data ke Database, XAMPP

Keyword

  1. Api Jadwal Sholat Internet,
  2. ESP32 NodemCU JWS,
  3. JWS Online Wemos D1 mini,
  4. JWS Oline ESP8266,
  5. Jam Digital Internet ESP8266 ESP32,

(Visited 82 times, 1 visits today)