[ESP8266] Get Data JSON
Dibuat oleh admin pada Sun, 05/11/2023 - 07:01
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"];