#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 customChar1[] = {
B00100,
B01111,
B01100,
B00100,
B00110,
B00110,
B11110,
B00100
};
byte customChar2[] = {
B00111,
B01000,
B10000,
B11110,
B11110,
B10000,
B01000,
B00111
};
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...");
lcd.createChar(1, customChar1);
lcd.createChar(2, customChar2);
WiFi.begin(SSID, WIFI_password);
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);
}
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 disclaimer = doc["disclaimer"].as<String>();
String updateTime = 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 changed: ");
Serial.print(USDrate);
Serial.print(":");
Serial.print(lastPriceUSD);
delay(1500);
return;
}else if(USDrate.toDouble() > lastPriceUSD.toDouble()){
}
else{
lcd.clear();
lcd.print("USD: " + USDrate);
lastPriceUSD = USDrate;
lcd.setCursor(16, 0);
lcd.write(1);
lcd.setCursor(0,1);
lcd.print("EUR: " + EURrate);
lastPriceEUR = EURrate;
lcd.setCursor(16, 1);
lcd.write(2);
}
delay(2000);
}
}
}