ESP8266

#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;
  }
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值