[ESP8266] Get Data JSON
Mengambil data dari website via API dengan format data JSON menggunakan ESP8266. Contoh hasil yang diperoleh dari API dalam format JSON adalah sebagai berikut:
[
    {
        "id": "37",
        "mac": "112233445566",
        "datanya": "a2422ddc206bd37ea0c21f062651d9dee08e647cae",
        "ket": null
    }
]
#define ARDUINOJSON_DECODE_UNICODE 1
#define PROGMEM ICACHE_RODATA_ATTR
#define ICACHE_RODATA_ATTR __attribute__((section(".irom.text")))
#include <WiFiClientSecure.h>
#include <WiFiClient.h> 
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>

String ssid = "NAMA WIFI";
String pswd = "PASS WIFI";
WiFiClientSecure clientSSH;
HTTPClient https;

void setup() 
{
  Serial.begin(19200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, pswd);
  clientSSH.setInsecure();

  DynamicJsonDocument dataku(1000);
  https.begin(clientSSH, "https://azkatech.com/modul_api.php?mac=" + MAC);
  int httpCode = https.GET();

  DeserializationError jwsError = deserializeJson(dataku, https.getString());
  deserializeJson(dataku, https.getString());
  JsonObject hasil = dataku[0]; 
  String DATA = hasil["datanya"];
    
  Serial.print(F("DATA:"));
  Serial.println(DATA);
}

void loop()
{
}


//--- Function
String getValue(String data, char separator, int index)
{
  int found = 0;
  int strIndex[] = {0, -1};
  int maxIndex = data.length()-1;

  for(int i=0; i<=maxIndex && found<=index; i++){
    if(data.charAt(i)==separator || i==maxIndex){
        found++;
        strIndex[0] = strIndex[1]+1;
        strIndex[1] = (i == maxIndex) ? i+1 : i;
    }
  }

  return found>index ? data.substring(strIndex[0], strIndex[1]) : "";
}
Cara yang lainnya:
#define ARDUINOJSON_DECODE_UNICODE 1
#define PROGMEM ICACHE_RODATA_ATTR
#define ICACHE_RODATA_ATTR __attribute__((section(".irom.text")))
#include <WiFiClientSecure.h>
#include <WiFiClient.h> 
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>

String ssid = "NAMA WIFI";
String pswd = "PASS WIFI";
WiFiClientSecure clientSSH;
HTTPClient https;

void setup() 
{
  Serial.begin(19200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, pswd);
  clientSSH.setInsecure();

  String api = httpGetString("https://azkatech.com/modul_api.php?mac=" + MAC);
  DynamicJsonDocument dataku(1000);
  DeserializationError error = deserializeJson(dataku, api);
  if (error) return;

  JsonObject hasil = dataku[0];
  String DATA = hasil["datanya"];
    
  Serial.print(F("DATA:"));
  Serial.println(DATA);
}

void loop()
{
}


//--- Function
String httpGetString(String link) 
{
  String payload = "";
  WiFiClientSecure client;
  client.setInsecure();
  HTTPClient http;
  if (http.begin(client, link)) {
    int httpCode = http.GET();
    if (httpCode == HTTP_CODE_OK) 
    {
      payload = http.getString();
     } 
    else 
    {
      Serial.printf("[HTTP] GET Error: %s\n", http.errorToString(httpCode).c_str());
    }
    http.end();
  }
  return payload;
}
Jika hasil yang diperoleh formatnya seperti dibawah ini, maka kita harus menyesuaikan JsonObject nya.
{
"status":true,
"data":{
"id":"0233",
"lokasi":"KOTA TEBING TINGGI",
"daerah":"SUMATERA UTARA",

"koordinat":{
      "lat":3.3294333333333332,
      "lon":99.15999722222222,
      "lintang":"3\u00b0 19' 45.96\" N",
      "bujur":"99\u00b0 09' 35.99\" E"},

"jadwal":{
      "subuh":"04:50",
      "dzuhur":"12:10",
      "ashar":"15:31",
      "maghrib":"18:10",
      "isya":"19:21",
      "date":"2023-11-05"}
      }
}
Sesuaikan scriptnya seperti ini:
      https.begin(clientSSH, "https://api.myquran.com/v1/sholat/jadwal/" + cityID + tanggal); //Contoh: https://api.myquran.com/v1/sholat/jadwal/0233/2023/11/05
      int httpCode = https.GET(); 
      DeserializationError jwsError = deserializeJson(dataku, https.getString());
      deserializeJson(dataku, https.getString());
      JsonObject hasil = dataku["data"]["jadwal"];
      String sbh = hasil["subuh"];
      String dzu = hasil["dzuhur"];
      String ash = hasil["ashar"];
      String mag = hasil["maghrib"];
      String isy = hasil["isya"];