#include <Wire.h>
#include <WiFi.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <WiFiClientSecure.h>
#include <ArduinoJson.h>
#include <HTTPClient.h>
#define USE_SERIAL Serial
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define NUMFLAKES 10 // Number of snowflakes in the animation example
#define LOGO_HEIGHT 16
#define LOGO_WIDTH 16
//////////////
WiFiClient client;
HTTPClient http;
//////////////
#include "RTClib.h"
RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
///////
//static const unsigned char PROGMEM logo_bmp[] ={};
void setup() {
Serial.begin(115200);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3c)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for (;;); // Don't proceed, loop forever
}
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
display.display();
delay(2000); // Pause for 2 seconds
///////
// tft.begin();
// tft.setRotation(1); // 調整顯示方向
Serial.print("Connecting to WiFi");
WiFi.mode(WIFI_STA);
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
////////
// u8g2.begin(tft);
}
void loop() {
// Time
DateTime now = rtc.now();
display.clearDisplay();
display.setTextColor(1);
display.setTextSize(1);
display.setCursor(0, 0);
display.print("Current time:");
display.print(String(now.year(), DEC));
display.print('/');
display.print(String(now.month(), DEC));
display.print('/');
display.print(String(now.day(), DEC));
display.print("(");
display.print(String(daysOfTheWeek[now.dayOfTheWeek()]));
display.print(")");
display.print(String(now.hour(), DEC));
display.print(':');
display.print(String(now.minute(), DEC));
display.print(':');
display.print(String(now.second(), DEC));
display.println();
display.setCursor(0, 10);
// 授權碼 CWA-C6B2CEED-9CD5-4BE4-B95D-ADBFD6792BE9
//cloud data
if(WiFi.status()==WL_CONNECTED){
//HTTPClient http;
http.begin("https://opendata.cwb.gov.tw/api/v1/rest/datastore/F-D0047-077?Authorization=CWA-C6B2CEED-9CD5-4BE4-B95D-ADBFD6792BE9&limit=2&format=JSON&locationName=%E6%B0%B8%E5%BA%B7%E5%8D%80&elementName=WeatherDescription&timeFrom=2023-12-25T00%3A00%3A00&timeTo=2023-12-25T24%3A00%3A00");
}
int httpCode = http.GET();
if (httpCode == HTTP_CODE_OK) { // 如果取得資料成功
//6.取得網頁內容
String payload = http.getString(); // 取得資料內容
//7.將資料顯示在螢幕上
Serial.println(payload);
//JSON格式解析
//payload = "[" + payload + "]"; //將資料轉為JSON 陣列格式
DynamicJsonDocument AQJarray(payload.length() * 2);
deserializeJson(AQJarray, payload);//解析payload為JSON Array格式
String VI_IX = AQJarray["records"][0]["value"];
String IX_XII = AQJarray["records"][1]["value"];
String XII_XV = AQJarray["records"][2]["value"];
String XV_IIXX = AQJarray["records"][3]["value"];
String IXX_XXI = AQJarray["records"][4]["value"];
String XXII_O = AQJarray["records"][5]["value"];
char Time = now.hour();
switch(Time){
case 6:
case 7:
case 8:
display.print(VI_IX);
break;
case 9:
case 10:
case 11:
display.print(IX_XII);
break;
case 12:
case 13:
case 14:
display.print(XII_XV);
break;
case 15:
case 16:
case 17:
display.print(XV_IIXX);
break;
case 18:
case 19:
case 20:
display.print(IXX_XXI);
break;
case 21:
case 22:
case 23:
display.print(XXII_O);
break;
}
}
else { // 如果取得資料失敗
Serial.println("Error on HTTP request");
}
http.end();
display.display();
delay(2000);
}
void choose_display(){
}
// https://opendata.cwb.gov.tw/dist/opendata-swagger.html?urls.primaryName=openAPI#/%E9%A0%90%E5%A0%B1/get_v1_rest_datastore_F_D0047_077