#include <ESP8266WiFi.h> //ESP8266WiFi库
#include <ESP8266WiFiMulti.h> //ESP8266WiFiMulti库
#include <ArduinoJson.h> //ArduinoJson库
#include <Ticker.h> //Ticker库
#include <WiFiUdp.h> //WiFiUdp库
#include <NTPClient.h> //NTPClient库
#include <Arduino.h> //Arduino库
#include <U8g2lib.h> //U8g2lib库
//#include <U8glib.h>
#include <Wire.h> //Wire库
//U8G2_SSD1309_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, SCL, SDA, U8X8_PIN_NONE);
//U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);
//U8G2_SSD1309_128X64_NONAME_F_SW_I2C u8g2(13, 11, 10, 9);
//OLED默认驱动设置
const char* host = "api.seniverse.com"; //心知天气服务器地址
const int httpPort = 80; //服务器端口号
String privateKey = "ST1nKgHvk1fFqVoOD"; //请求URL所用私钥(在心知天气官网注册账号即可)
String requireCity = "北京"; //查询天气的城市(如Wuhan)
String temperatureUnit = "c"; //温度单位(摄氏度)
typedef struct { //天气信息结构体
String date; //日期
String day; //白天天气
int dayCode; //白天天气代码
String night; //夜晚天气
int nightCode; //夜晚天气代码
String high; //最高气温
String low; //最低气温
String humidity; //相对湿度
} weatherInfo;
weatherInfo todayWeather; //今天的天气信息
weatherInfo tomorrowWeather; //明天的天气信息
weatherInfo afterTomorrowWeather; //后天的天气信息
Ticker requestTicker; //向服务器请求定时器
int requestInterval = 0; //向服务器请求时间间隔
Ticker updateTimeTicker; //更新时间定时器
int updateTimeInterval = 0; //更新时间时间间隔
Ticker displayTicker; //OLED显示界面定时器
int displayInterval = 0; //OLED显示界面时间间隔
WiFiUDP ntpUDP; //WiFiUDP对象
NTPClient timeClient(ntpUDP, "ntp.aliyun.com", 60 * 60 * 8, 30 * 60 * 1000);
//timeClient对象
String weekDay = ""; //星期几
String nowTime = ""; //当前时间
//启动开始界面
static const unsigned char Start[] U8X8_PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xF0, 0x00,
0x00, 0x80, 0x0F, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x0E, 0xF0, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x80, 0x1F, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x0E, 0xF0, 0x00,
0x00, 0xFE, 0x0F, 0x00, 0xC0, 0xEF, 0x0F, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x0F, 0x70, 0x00, 0x00, 0xFC, 0x07, 0x00, 0xE0, 0xFF, 0x0F, 0x00, 0x80, 0x03, 0xF0, 0x01, 0x00, 0xF7, 0x70, 0x00,
0x00, 0xF8, 0x01, 0x00, 0xF0, 0xFF, 0x03, 0x00, 0xC0, 0x0F, 0xE0, 0x01, 0x80, 0xFF, 0x70, 0x0F, 0x00, 0xF0, 0x00, 0x00, 0xF0, 0xFF, 0x00, 0x00, 0x80, 0x1F, 0xE0, 0x01, 0xC0, 0x7D, 0xF0, 0x1F,
0x00, 0x68, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x1C, 0xE0, 0x01, 0xE0, 0x18, 0xF8, 0x3C, 0x00, 0x30, 0x00, 0x00, 0xE0, 0xFE, 0x01, 0x00, 0x10, 0x1C, 0xE0, 0x07, 0xE0, 0x10, 0x7E, 0x3C,
0x00, 0x38, 0x0C, 0x00, 0x80, 0xFF, 0x01, 0x00, 0x10, 0x1C, 0xFE, 0x0F, 0x70, 0xF8, 0x77, 0x1E, 0x00, 0xB4, 0x3F, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x30, 0xDC, 0xFF, 0x1F, 0x38, 0xFE, 0x73, 0x0F,
0x00, 0xF8, 0x1F, 0x00, 0xC0, 0x7F, 0x03, 0x00, 0x38, 0xFC, 0xFF, 0x0C, 0xD8, 0x9F, 0xF3, 0x03, 0x00, 0xF8, 0x07, 0x00, 0xC0, 0xDF, 0x07, 0x00, 0xFC, 0xFD, 0xE3, 0x00, 0xDC, 0x8F, 0xF3, 0x07,
0x00, 0xFE, 0x01, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0xF8, 0x8F, 0xE1, 0x00, 0xCE, 0xB7, 0xFB, 0x07, 0xA0, 0x7F, 0x00, 0x00, 0x80, 0x3F, 0x0F, 0x00, 0xF8, 0x0F, 0xE0, 0x00, 0x86, 0x7F, 0xFF, 0x07,
0xE0, 0xFF, 0x00, 0x00, 0xC0, 0x0F, 0x07, 0x00, 0xF8, 0xEF, 0xE3, 0x00, 0x83, 0x7E, 0x7F, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0xF8, 0x03, 0x03, 0x00, 0xB8, 0xEF, 0xE7, 0x80, 0x41, 0x4F, 0x7E, 0x00,
0xC0, 0xDF, 0x03, 0x00, 0xFC, 0x00, 0x03, 0x00, 0x78, 0xEE, 0xE7, 0xC0, 0xE0, 0x27, 0x70, 0x00, 0x00, 0x1C, 0x0F, 0x00, 0x3C, 0x80, 0x01, 0x00, 0x38, 0x2F, 0xE7, 0x00, 0xF0, 0x27, 0x70, 0x00,
0x00, 0x0C, 0x1E, 0x00, 0x00, 0x80, 0x01, 0x00, 0xB8, 0x2F, 0xE3, 0x00, 0xF0, 0x13, 0x70, 0x00, 0x00, 0x0C, 0x3C, 0x00, 0x00, 0x80, 0x01, 0x00, 0xF8, 0x4F, 0xE1, 0x00, 0x60, 0x13, 0x70, 0x00,
0x00, 0x0E, 0x78, 0x00, 0x00, 0x80, 0x01, 0x00, 0xFC, 0x8E, 0xE0, 0x00, 0x00, 0x0B, 0x70, 0x00, 0x00, 0x0F, 0xF0, 0x03, 0x00, 0x80, 0x41, 0x00, 0x7C, 0x8E, 0xE3, 0x00, 0x00, 0x0F, 0x70, 0x00,
0x80, 0x07, 0xF0, 0x0F, 0x00, 0x80, 0x81, 0x00, 0x78, 0x0E, 0xFF, 0x00, 0x00, 0x0F, 0x70, 0x00, 0xC0, 0x03, 0xE0, 0x3F, 0x00, 0x80, 0x81, 0x00, 0x10, 0x06, 0xFE, 0x00, 0x00, 0x0E, 0x70, 0x00,
0xF8, 0x00, 0x80, 0x7F, 0x00, 0x80, 0x03, 0x01, 0x00, 0x06, 0xFC, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x07, 0x03, 0x00, 0x02, 0xF8, 0x00, 0x00, 0x00, 0x70, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x07, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
//晴
static const unsigned char Sunny[] U8X8_PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00,
0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x80, 0x3F, 0x00, 0xF8, 0x0F, 0x00, 0x38, 0x00, 0x00, 0x1F, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x00,
0x00, 0x0E, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x0F, 0x00, 0x00,
0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00,
0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,