#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 <Wire.h> //Wire库
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, SCL, SDA, U8X8_PIN_NONE);
//OLED默认驱动设置
const char* host = "api.seniverse.com"; //心知天气服务器地址
const int httpPort = 80; //服务器端口号
String privateKey = "SHkUcaU55k1w40BZr"; //请求URL所用私钥(在心知天气官网注册账号即可)
String requireCity = "Haerbin"; //查询天气的城市(如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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFC,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0xFF,0x1B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFB,0x6F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x2E,0xFF,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x7C,0x30,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x10,0xF8,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0xEF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xE7,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xC7,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xB7,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xE0,0xFE,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xE0,0xBF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xC0,0xFB,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00,
0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x1C, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x1C, 0x3E, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x3E, 0x7F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x7F,
0x7F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x7F, 0x7F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x7F, 0x3E, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x3E, 0x1C, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x1C,
0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x1F, 0x00, 0x00,
0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x00, 0x70, 0x00,
0x00, 0x1C, 0x00, 0xFE, 0x3F, 0x00, 0xF8, 0x00, 0x00, 0x3E, 0x00, 0xF8, 0x0F, 0x00, 0xFC, 0x01, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x01,
0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00
};
//多云
static const unsigned char Cloudy[] 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, 0xC0, 0x07, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x01, 0x00,
0x00, 0x00, 0xE0, 0xC1, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xF8, 0xE3, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00,
0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00,
0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01,
0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F,
0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x1F, 0x80, 0xFF, 0xFF, 0xFF, 0x1F, 0x1E, 0xF0, 0x1F, 0x00, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0x80, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0x0F, 0x06,
0x00, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0x3F, 0x00, 0x00, 0xFE, 0xFF, 0x7F, 0xF8, 0xFF, 0x7F, 0x00, 0x00, 0xFE, 0xFF, 0x1F, 0xFE, 0xFF, 0x7F, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0x01,
0x00, 0xF0, 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xE0, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x3F,
0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0xC0, 0x01, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F,
0xF0, 0x07, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0xF8, 0x0F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0xF8, 0x3F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0xFC, 0x7F, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x3F,
0xFE, 0xFF, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x0F, 0xFE, 0x7F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x03,
0xF8, 0x0F, 0x00, 0x80, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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 PartlyOrMostlyCloudy[] 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, 0xFC, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 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, 0xFE, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF0, 0x03, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0xFC, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0xFE, 0xFF, 0xF8, 0xFF, 0xFF, 0x00, 0x80, 0x0F, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0x00, 0xE0, 0x9F, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF,
0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF0, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x7F,
0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x7F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3E, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1D, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01,
0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01,
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00,
0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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 Overcast[] 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, 0xF8, 0x07, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x07, 0x00,
0x00, 0x00, 0x1E, 0xF8, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x80, 0xFF, 0xFC, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00,
0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00,
0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00,
0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0x0F,
0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0x1F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0x3F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F,
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F,
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F,
0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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 Shower[] 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, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFE, 0xF8, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00,
0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00,
0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00,
0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01,
0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07,
0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F,
0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07,
0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x10, 0x80, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x07, 0x38, 0xC0, 0x01, 0x00,
0x00, 0xE0, 0x00, 0x07, 0x38, 0xC0, 0x01, 0x00, 0x00, 0xF0, 0x80, 0x07, 0x3C, 0xE0, 0x01, 0x00, 0x00, 0xF0, 0x80, 0x07, 0x3C, 0xE0, 0x01, 0x00, 0x00, 0x78, 0xC0, 0x03, 0x1C, 0xE0, 0x00, 0x00,
0x00, 0x78, 0xC0, 0x03, 0x1E, 0xF0, 0x00, 0x00, 0x00, 0x38, 0xC0, 0x01, 0x0E, 0x70, 0x00, 0x00, 0x00, 0x3C, 0xE0, 0x01, 0x0F, 0x78, 0x00, 0x00, 0x00, 0x1C, 0xE0, 0x00, 0x0F, 0x78, 0x00, 0x00,
0x00, 0x1E, 0xF0, 0x80, 0x07, 0x3C, 0x00, 0x00, 0x00, 0x1E, 0xF0, 0x80, 0x07, 0x3C, 0x00, 0x00, 0x00, 0x0C, 0x70, 0x00, 0x03, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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 Snow[] 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, 0xF8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x00,
0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFC, 0xF8, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00,
0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00,
0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00,
0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01,
0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07,
0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F,
0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07,
0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x63, 0xC0, 0x18, 0x30, 0x06, 0x00, 0x00, 0x00, 0x77, 0xC0, 0x1D, 0x70, 0x07, 0x00, 0x00, 0x00, 0x3E, 0x80, 0x0F, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x1F, 0xF0, 0x07, 0x00,
0x00, 0xC0, 0xFF, 0xF1, 0x7F, 0xFC, 0x1F, 0x00, 0x00, 0xC0, 0xFF, 0xF1, 0x7F, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0x3E, 0x80, 0x0F, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x3E, 0x80, 0x0F, 0xE0, 0x03, 0x00,
0x00, 0x00, 0x77, 0xC0, 0x1D, 0x70, 0x07, 0x00, 0x00, 0x00, 0x63, 0xC0, 0x18, 0x30, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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 Foggy[] 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, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00,
0x00, 0xF8, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00,
0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03,
0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03,
0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03,
0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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 Haze[] 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, 0x80, 0x03, 0x00, 0xC0, 0x01, 0x00, 0x80, 0x03,
0xC0, 0x07, 0x00, 0xE0, 0x03, 0x00, 0xC0, 0x07, 0xC0, 0x07, 0x00, 0xE0, 0x03, 0x00, 0xC0, 0x07, 0xC0, 0x07, 0x00, 0xE0, 0x03, 0x00, 0xC0, 0x07, 0x80, 0x03, 0x00, 0xC0, 0x01, 0x00, 0x80, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0xF8, 0x01, 0x00,
0x00, 0xF8, 0x7F, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x80, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0xE0, 0xFF, 0xFF, 0x00, 0x80, 0xFF, 0xFF, 0x07, 0xF0, 0xFF, 0xFF, 0x01,
0xC0, 0x3F, 0xF0, 0x0F, 0xF8, 0x07, 0xFE, 0x01, 0xE0, 0x0F, 0xC0, 0x1F, 0xFC, 0x01, 0xF8, 0x03, 0xE0, 0x07, 0x00, 0x3F, 0xFE, 0x00, 0xE0, 0x07, 0xE0, 0x03, 0x00, 0x7E, 0x7E, 0x00, 0xE0, 0x07,
0xF0, 0x03, 0x00, 0x7C, 0x3F, 0x00, 0xC0, 0x07, 0xF0, 0x01, 0x00, 0xFC, 0x1F, 0x00, 0xC0, 0x0F, 0xF0, 0x01, 0x00, 0xF8, 0x1F, 0x00, 0xC0, 0x0F, 0xF0, 0x01, 0x00, 0xF0, 0x0F, 0x00, 0x80, 0x0F,
0xF0, 0x01, 0x00, 0xF0, 0x0F, 0x00, 0x80, 0x0F, 0xF0, 0x01, 0x00, 0xF0, 0x0F, 0x00, 0x80, 0x0F, 0xF0, 0x01, 0x00, 0xF8, 0x1F, 0x00, 0xC0, 0x0F, 0xF0, 0x01, 0x00, 0xFC, 0x1F, 0x00, 0xC0, 0x07,
0xF0, 0x03, 0x00, 0x7C, 0x3F, 0x00, 0xC0, 0x07, 0xE0, 0x03, 0x00, 0x7E, 0x7E, 0x00, 0xE0, 0x07, 0xE0, 0x07, 0x00, 0x3F, 0xFC, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0xC0, 0x1F, 0xFC, 0x01, 0xF8, 0x03,
0xC0, 0x3F, 0xF0, 0x0F, 0xF8, 0x0F, 0xFE, 0x01, 0x80, 0xFF, 0xFF, 0x07, 0xF0, 0xFF, 0xFF, 0x01, 0x00, 0xFF, 0xFF, 0x03, 0xE0, 0xFF, 0xFF, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x80, 0xFF, 0x3F, 0x00,
0x00, 0xF8, 0x7F, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0xC0, 0x01, 0x00, 0x80, 0x03,
0xC0, 0x07, 0x00, 0xE0, 0x03, 0x00, 0xC0, 0x07, 0xC0, 0x07, 0x00, 0xE0, 0x03, 0x00, 0xC0, 0x07, 0xC0, 0x07, 0x00, 0xE0, 0x03, 0x00, 0xC0, 0x07, 0x80, 0x03, 0x00, 0xC0, 0x01, 0x00, 0x80, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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 unknown[] 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,
0x38, 0x00, 0xE0, 0x00, 0x1C, 0x80, 0x07, 0x00, 0x7C, 0x00, 0xF0, 0x01, 0x1E, 0xC0, 0x0F, 0x00, 0xFE, 0x00, 0xF0, 0x01, 0x1E, 0xE0, 0x1F, 0x00, 0xFE, 0x00, 0xF0, 0x01, 0x1E, 0xE0, 0x1F, 0x00,
0xFE, 0x01, 0xF0, 0x01, 0x0F, 0xF0, 0x3F, 0x00, 0xFE, 0x03, 0xF0, 0x01, 0x0F, 0xF0, 0x3F, 0x00, 0xFE, 0x03, 0xF0, 0x01, 0x0F, 0xF0, 0x3F, 0x00, 0xFE, 0x07, 0xF0, 0x01, 0x0F, 0xF8, 0x7E, 0x00,
0xFE, 0x0F, 0xF0, 0x81, 0x07, 0xF8, 0x7C, 0x00, 0xFE, 0x1F, 0xF0, 0x81, 0x07, 0xFC, 0xFC, 0x00, 0xBE, 0x1F, 0xF0, 0x81, 0x07, 0x7C, 0xFC, 0x00, 0x3E, 0x3F, 0xF0, 0x81, 0x07, 0x7C, 0xF8, 0x00,
0x3E, 0x7F, 0xF0, 0xC1, 0x07, 0x7E, 0xF8, 0x01, 0x3E, 0x7E, 0xF0, 0xC1, 0x03, 0x3E, 0xF8, 0x01, 0x3E, 0xFC, 0xF0, 0xC1, 0x03, 0x3F, 0xF0, 0x03, 0x3E, 0xF8, 0xF1, 0xC1, 0x03, 0x3F, 0xF0, 0x03,
0x3E, 0xF8, 0xF3, 0xE1, 0x03, 0x1F, 0xE0, 0x03, 0x3E, 0xF0, 0xF3, 0xE1, 0x81, 0x1F, 0xE0, 0x07, 0x3E, 0xE0, 0xF7, 0xE1, 0x81, 0xFF, 0xFF, 0x07, 0x3E, 0xE0, 0xFF, 0xE1, 0xC1, 0xFF, 0xFF, 0x0F,
0x3E, 0xC0, 0xFF, 0xE1, 0xC1, 0xFF, 0xFF, 0x0F, 0x3E, 0x80, 0xFF, 0xF1, 0xC0, 0xFF, 0xFF, 0x0F, 0x3E, 0x80, 0xFF, 0xF1, 0xE0, 0x07, 0x80, 0x1F, 0x3E, 0x00, 0xFF, 0xF1, 0xE0, 0x07, 0x80, 0x1F,
0x3E, 0x00, 0xFE, 0xF1, 0xF0, 0x03, 0x00, 0x3F, 0x3E, 0x00, 0xFE, 0x79, 0xF0, 0x03, 0x00, 0x3F, 0x3E, 0x00, 0xFC, 0x79, 0xF0, 0x01, 0x00, 0x3F, 0x3E, 0x00, 0xF8, 0x79, 0xF0, 0x01, 0x00, 0x3E,
0x1C, 0x00, 0xF0, 0x38, 0xE0, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
void setup() {
//串口波特率(调试用)
//Serial.begin(9600);
//初始化OLED
u8g2.begin();
//允许显示UTF8字符
u8g2.enableUTF8Print();
//文本的参考点为左上角
u8g2.setFontPosTop();
//显示启动界面
showStart();
//连接WiFi
connectWifi();
//获取天气数据
getWeather();
//计算星期(周几)
calculateWeek();
//连接NTP服务器(阿里的NTP服务器)
timeClient.begin();
//开启服务器请求定时
requestTicker.attach(1, tickerRequestInterval);
//开启更新时间定时
updateTimeTicker.attach(1, tickerUpdateTimeInterval);
//开启OLED显示界面定时
displayTicker.attach(1, tickerDisplayInterval);
}
void loop() {
//每隔60s向服务器发起一次请求
if (requestInterval >= 60) {
//获取天气数据
getWeather();
//重新计时
requestInterval = 0;
}
//每隔1s更新一次时间
if (updateTimeInterval >= 1) {
//更新时间
timeClient.update();
nowTime = timeClient.getFormattedTime();
//重新计时
updateTimeInterval = 0;
}
//显示10s时间
if (displayInterval <= 10) {
displayTime();
}
//显示3s今天的天气
else if (displayInterval <= 13) {
displayWeather(todayWeather);
}
//显示3s明天的天气
else if (displayInterval <= 16) {
displayWeather(tomorrowWeather);
}
//显示3s后天的天气
else if (displayInterval <= 19) {
displayWeather(afterTomorrowWeather);
}
//重新计时
else {
displayInterval = 0;
}
}
/******************************************************
函 数 名: tickerRequestInterval
描 述: 用于服务器请求定时(每隔1s执行一次)
参 数: 无
返 回 值: 无
******************************************************/
void tickerRequestInterval() {
requestInterval++;
}
/******************************************************
函 数 名: tickerUpdateTimeInterval
描 述: 用于更新时间定时(每隔1s执行一次)
参 数: 无
返 回 值: 无
******************************************************/
void tickerUpdateTimeInterval() {
updateTimeInterval++;
}
/******************************************************
函 数 名: tickerDisplayInterval
描 述: 用于OLED显示界面定时(每隔1s执行一次)
参 数: 无
返 回 值: 无
******************************************************/
void tickerDisplayInterval() {
displayInterval++;
}
/******************************************************
函 数 名: showStart
描 述: 显示启动界面
参 数: 无
返 回 值: 无
******************************************************/
void showStart() {
u8g2.clearBuffer();
u8g2.drawXBMP(0, 0, 128, 64, Start);
u8g2.sendBuffer();
delay(1000);
}
/******************************************************
函 数 名: displayTime
描 述: 显示时间界面
参 数: 无
返 回 值: 无
******************************************************/
void displayTime() {
//设置字体
u8g2.setFont(u8g2_font_crox2h_tf);
u8g2.clearBuffer();
//周几
u8g2.setCursor(0, 0);
u8g2.print(weekDay);
//地点
u8g2.setCursor(84, 0);
u8g2.print(requireCity);
//直线(为了好看一点,分隔一下)
u8g2.drawLine(0, 14, 128, 14);
//今天的日期
u8g2.setCursor(30, 16);
u8g2.print(todayWeather.date);
//现在的时间(大一点的字体)
u8g2.setFont(u8g2_font_logisoso24_tn);
u8g2.setCursor(7, 32);
u8g2.print(nowTime);
u8g2.sendBuffer();
}
/******************************************************
函 数 名: displayWeather
描 述: 显示天气界面
参 数: 今天(today)、明天(tomorrow)、后天(afterTomorrow)
返 回 值: 无
******************************************************/
void displayWeather(weatherInfo dayWeather) {
u8g2.clearBuffer();
//根据天气代码绘制天气图标(详细代码参见心知天气官网的文档说明)
switch (dayWeather.dayCode) {
case 0:
case 1:
case 2:
case 3: {
u8g2.drawXBMP(0, 0, 64, 64, Sunny);
break;
}
case 4 : {
u8g2.drawXBMP(0, 0, 64, 64, Cloudy);
break;
}
case 5:
case 6:
case 7:
case 8: {
u8g2.drawXBMP(0, 0, 64, 64, PartlyOrMostlyCloudy);
break;
}
case 9 : {
u8g2.drawXBMP(0, 0, 64, 64, Overcast);
break;
}
case 10:
case 11:
case 13:
case 14:
case 15:
case 16:
case 17:
case 18 : {
u8g2.drawXBMP(0, 0, 64, 64, Shower);
break;
}
case 20:
case 21:
case 22:
case 23:
case 24:
case 25 : {
u8g2.drawXBMP(0, 0, 64, 64, Snow);
break;
}
case 30 : {
u8g2.drawXBMP(0, 0, 64, 64, Foggy);
break;
}
case 31 : {
u8g2.drawXBMP(0, 0, 64, 64, Haze);
break;
}
default : {
u8g2.drawXBMP(0, 0, 64, 64, unknown);
}
}
//设置字体
u8g2.setFont(u8g2_font_crox2h_tf);
//日期
u8g2.setCursor(65, 0);
u8g2.print(dayWeather.date.substring(5, 10));
//天气
u8g2.setCursor(65, 16);
u8g2.print(dayWeather.day);
//温度
u8g2.setCursor(65, 32);
u8g2.print("T: " + dayWeather.low + "~" + dayWeather.high + "°C");
//湿度
u8g2.setCursor(65, 48);
u8g2.print("H: " + dayWeather.humidity + "%");
u8g2.sendBuffer();
}
/******************************************************
函 数 名: connectWifi
描 述: 用于连接网络
参 数: 无
返 回 值: 无
******************************************************/
void connectWifi() {
//ESP8266WiFiMulti对象
ESP8266WiFiMulti wifiMulti;
//通过addAp函数存储 WiFi名称 WiFi密码(需要自己添加修改)
wifiMulti.addAP("1", "912345678");
//wifiMulti.addAP("xxxxxx", "xxxxxx");
//wifiMulti.addAP("xxxxxx", "xxxxxx");
//显示正在连接
u8g2.setFont(u8g2_font_crox2hb_tr);
u8g2.clearBuffer();
u8g2.drawStr(0, 0, "Connecting to WiFi");
//连接在当前环境中addAP函数所存储的中连接信号最强的那一个WiFi
//连接成功后,wifiMulti.run()将会返回“WL_CONNECTED”
int i = 0;
while (wifiMulti.run() != WL_CONNECTED) {
delay(1000);
u8g2.drawStr(i, 16, ".");
i = i + 5;
u8g2.sendBuffer();
}
u8g2.drawStr(0, 42, "Successfully!");
u8g2.sendBuffer();
delay(1000);
//显示连接成功的WiFi信息
u8g2.clearBuffer();
//WiFi名称
u8g2.setCursor(0, 0);
u8g2.print("SSD: ");
u8g2.setCursor(0, 16);
u8g2.print(WiFi.SSID());
//IP地址
u8g2.setCursor(0, 32);
u8g2.print("IP: ");
u8g2.setCursor(0, 48);
u8g2.print(WiFi.localIP());
u8g2.sendBuffer();
delay(1000);
}
/******************************************************
函 数 名: getWeather
描 述: 用于向心知天气服务器发送http请求,获得的天气响应信息
参 数: 无
返 回 值: 无
******************************************************/
void getWeather() {
//WiFiClient对象
WiFiClient client;
// 建立心知天气API天气请求资源地址
String reqRes = "/v3/weather/daily.json?key=" + privateKey +
+ "&location=" + requireCity + "&language=en&unit=" +
temperatureUnit + "&start=0&days=3";
//建立http请求信息
String httpRequest = String("GET ") + reqRes + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n";
//打印连接服务器信息
//Serial.println("");
//Serial.print("Connecting to ");
//Serial.print(host);
if (client.connect(host, 80)) {
//Serial.println(" Success!");
//向服务器发送http请求信息
client.print(httpRequest);
//获取并显示服务器响应状态行
String status_response = client.readStringUntil('\n');
//Serial.print("status_response: ");
//Serial.println(status_response);
//使用find跳过HTTP响应头,只留下服务器返回的Json数据
if (client.find("\r\n\r\n")) {
//Serial.println("Found Header End. Start Parsing.");
}
//serverJson即为服务器返回的Json数据,可用readString函数读取
//String serverJson = client.readString();
//Serial.println(serverJson);
//利用ArduinoJson库解析心知天气响应信息
parseWeather(client);
} else {
//Serial.println(" Failed!");
}
//断开与服务器的连接
client.stop();
}
/******************************************************
函 数 名: parseWeather
描 述: 对获得的天气响应信息进行解析
参 数: client 响应信息即天气数据
返 回 值: 无
******************************************************/
void parseWeather(WiFiClient client) {
const size_t capacity = 1536;
//创建DynamicJsonDocument对象doc,参数为建立DynamicJsonDocument对象所需的内存空间
DynamicJsonDocument doc(capacity);
//使用deserializeJson来对JSON文件进行解析
deserializeJson(doc, client);
//Json对象
JsonObject results_0 = doc["results"][0];
//Json中包含的天气信息(3天,所以是一个数组)
JsonArray results_0_daily = results_0["daily"];
//今天的天气信息
JsonObject results_0_daily_0 = results_0_daily[0];
todayWeather.date = results_0_daily_0["date"].as<String>(); //日期
todayWeather.day = results_0_daily_0["text_day"].as<String>(); //白天天气现象文字
todayWeather.dayCode = results_0_daily_0["code_day"].as<int>(); //白天天气现象代码
todayWeather.night = results_0_daily_0["text_night"].as<String>(); //晚间天气现象文字
todayWeather.nightCode = results_0_daily_0["code_night"].as<int>(); //晚间天气现象代码
todayWeather.high = results_0_daily_0["high"].as<String>(); //当天最高温度
todayWeather.low = results_0_daily_0["low"].as<String>(); //当天最低温度
todayWeather.humidity = results_0_daily_0["humidity"].as<String>(); //相对湿度,0~100,单位为百分比
//明天的天气信息
JsonObject results_0_daily_1 = results_0_daily[1];
tomorrowWeather.date = results_0_daily_1["date"].as<String>();
tomorrowWeather.day = results_0_daily_1["text_day"].as<String>();
tomorrowWeather.dayCode = results_0_daily_1["code_day"].as<int>();
tomorrowWeather.night = results_0_daily_1["text_night"].as<String>();
tomorrowWeather.nightCode = results_0_daily_1["code_night"].as<int>();
tomorrowWeather.high = results_0_daily_1["high"].as<String>();
tomorrowWeather.low = results_0_daily_1["low"].as<String>();
tomorrowWeather.humidity = results_0_daily_1["humidity"].as<String>();
//后天的天气信息
JsonObject results_0_daily_2 = results_0_daily[2];
afterTomorrowWeather.date = results_0_daily_2["date"].as<String>();
afterTomorrowWeather.day = results_0_daily_2["text_day"].as<String>();
afterTomorrowWeather.dayCode = results_0_daily_2["code_day"].as<int>();
afterTomorrowWeather.night = results_0_daily_2["text_night"].as<String>();
afterTomorrowWeather.nightCode = results_0_daily_2["code_night"].as<int>();
afterTomorrowWeather.high = results_0_daily_2["high"].as<String>();
afterTomorrowWeather.low = results_0_daily_2["low"].as<String>();
afterTomorrowWeather.humidity = results_0_daily_2["humidity"].as<String>();
}
/******************************************************
函 数 名: calculateWeek
描 述: 利用蔡勒公式计算星期
参 数: 无
返 回 值: 无
******************************************************/
void calculateWeek() {
//年、月、日
int year, month, day;
//当天的日期
String date = todayWeather.date;
//取出年、月、日
year = date.substring(0, 4).toInt();
month = date.substring(5, 7).toInt();
day = date.substring(8, 10).toInt();
//如果月份为1或2,就将其当作上一年的13月和14月
if (month == 1 || month == 2) {
year--;
month += 12;
}
//世纪
int c = year / 100;
int y = year - c * 100;
//蔡勒公式
int week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1;
//如果计算结果为负数,将其加上7的倍数转化为正数,再除7取模
while (week < 0) {
week += 7;
}
week %= 7;
switch (week)
{
case 1: weekDay = "Monday"; break;
case 2: weekDay = "Tuesday"; break;
case 3: weekDay = "Wednesday"; break;
case 4: weekDay = "Thursday"; break;
case 5: weekDay = "Friday"; break;
case 6: weekDay = "Saturday"; break;
case 0: weekDay = "Sunday"; break;
}
}