#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include "secrets.h"
LiquidCrystal_I2C lcd(0x27, 16, 2);
const String url = "http://api.coindesk.com/v1/bpi/currentprice.json";
HTTPClient http;
String lastPriceUSD;
String lastPriceEUR;
byte customChar_1[] = {
B00000,
B00110,
B01000,
B00100,
B00010,
B01100,
B00000,
B00000
};
byte customChar_2[] = {
B00000,
B00110,
B01000,
B01110,
B01000,
B00110,
B00000,
B00000
};
byte customChar_3[] = {
B00100,
B01110,
B10101,
B00100,
B00100,
B00100,
B00000,
B00000
};
byte customChar_4[] = {
B00000,
B00100,
B00100,
B00100,
B10101,
B01110,
B00100,
B00000
};
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.clear();
lcd.print("Connecting WIFI...");
WiFi.begin(SSID, WIFI_PASSWAO);
while(WiFi.status() != WL_CONNECTED){
delay(500);
}
Serial.print("Connected to SSID:");
Serial.println(SSID);
lcd.clear();
lcd.print("Connected to");
lcd.setCursor(0,1);
lcd.print(SSID);
delay(2000);
lcd.createChar(1, customChar_1);
lcd.createChar(2, customChar_2);
lcd.createChar(3, customChar_3);
lcd.createChar(4, customChar_4);
}
void loop() {
if(WiFi.status() == WL_CONNECTED){
Serial.println("Getting data from server...");
http.begin(url);
int httpCode = http.GET();
Serial.print("HTTP Code");
Serial.println(httpCode);
if(httpCode > 0){
DynamicJsonDocument doc(1024);
DeserializationError error = deserializeJson(doc, http.getString());
if(error){
Serial.print(F("Deserialization Error:"));
Serial.println(error.f_str());
delay(2500);
return;
}
Serial.print("Http status code: ");
Serial.println(httpCode);
String dislaimer = doc["dislaimer"].as<String>();
String lastUpdated = doc["time"]["updated"].as<String>();
JsonObject bpi = doc["bpi"];
String USDrate = bpi["USD"]["rate_float"].as<String>();
String EURrate = bpi["EUR"]["rate_float"].as<String>();
if(USDrate == lastPriceUSD){
Serial.print("Price hasnt chenged: ");
Serial.print(USDrate);
Serial.print(":");
Serial.print(lastPriceUSD);
delay(1500);
return;
}/*else if(EURrate == lastPriceEUR){
Serial.print("Price hasnt chenged: ");
Serial.print(EURrate);
Serial.print(":");
Serial.print(lastPriceEUR);
delay(1500);
return;
}*/ else{
lcd.clear();
lcd.print("Time: " + lastUpdated);
delay(520);
lcd.clear();
lcd.print("USD: " + USDrate);
lcd.write(1);
/*
lcd.setCursor(0,1);
lcd.print("EUR: " + EURrate);
lcd.write(2);
*/
//lastPriceEUR = EURrate;
if(USDrate > lastPriceUSD){
lcd.setCursor(0,1);
lcd.print("USD rose ");
lcd.write(3);
}else{
lcd.setCursor(0,1);
lcd.print("USD fell ");
lcd.write(4);
}
lastPriceUSD = USDrate;
}
delay(2000);
}
}
}