#include <WiFi.h>
#include <HTTPClient.h>
#include <LiquidCrystal_I2C.h>
#include <ArduinoJson.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup() {
Serial.begin(9600);
Serial.print("Connecting to WiFi");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
lcd.init();
lcd.backlight();
}
void loop() {
if (WiFi.status() == WL_CONNECTED) {
// **API 1: Lấy giá xăng dầu**
HTTPClient http1;
http1.begin("https://wifeed.vn/api/du-lieu-vimo/hang-hoa/gia-xang-dau-trong-nuoc?page=1&limit=100&apikey=demo");
int httpCode1 = http1.GET();
if (httpCode1 > 0) {
String payload1 = http1.getString();
Serial.println(httpCode1);
Serial.println(payload1);
StaticJsonDocument<1024> doc; // Kích thước bộ nhớ cho JSON
DeserializationError error = deserializeJson(doc, payload1);
if (error) {
Serial.print("JSON deserialization failed: ");
Serial.println(error.f_str());
return;
}
float xang95 = doc["data"][0]["vung_1_xang_ron_95_v"];
float dau = doc["data"][0]["vung_1_dau_hoa"];
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Gia xang 95: ");
lcd.print(xang95);
lcd.setCursor(0, 1);
lcd.print("Gia dau: ");
lcd.print(dau);
} else {
Serial.println("Error on HTTP request (Fuel API)");
}
http1.end();
// **API 2: Lấy giá vàng**
HTTPClient http2;
http2.begin("http://api.btmc.vn/api/BTMCAPI/getpricebtmc?key=3kd8ub1llcg9t45hnoh8hmn7t5kc2v");
int httpCode2 = http2.GET();
if (httpCode2 > 0) {
String payload2 = http2.getString();
Serial.println(httpCode2);
Serial.println(payload2); // In ra dữ liệu nhận được để kiểm tra
// Gọi hàm getGoldPrice để lấy giá vàng
String goldPrice = getGoldPrice(payload2);
if (goldPrice.length() > 0) {
lcd.setCursor(0, 3);
lcd.print("Gia vang: ");
lcd.print(goldPrice);
} else {
Serial.println("No data found in gold API response");
}
} else {
Serial.println("Error on HTTP request (Gold API)");
}
http2.end();
}
delay(10000);
}
// Hàm để trích xuất giá vàng từ XML
String getGoldPrice(String xml) {
String price = "";
// Tìm kiếm chuỗi chứa thông tin giá vàng
int startIndex = xml.indexOf("pb_1=\"");
if (startIndex != -1) {
startIndex += 6; // Bỏ qua "pb_1=\""
int endIndex = xml.indexOf("\"", startIndex);
price = xml.substring(startIndex, endIndex); // Trích xuất giá
}
// Kiểm tra xem có giá hay không
if (price.length() > 0) {
return price; // Trả về giá vàng tìm được
} else {
Serial.println("Failed to extract gold price.");
return ""; // Nếu không tìm thấy giá, trả về chuỗi rỗng
}
}