几个要点:
1、注册心知天气,进入控制台,添加产品,在免费版中可得到秘钥,放程序的“my_key”中。
2、程序开头,需修改秘钥和城市
3、目标服务器可写ip地址,也可写入网站
4、OLED屏的七引脚不要搞错
制作出来的实物图如下:
image.png

image.png

image.png
image.png
代码
  1. #include <SPI.h>
  2. #include <Wire.h>
  3. #include <Adafruit_GFX.h>
  4. #include <Adafruit_SSD1306.h>
  5. #include <ESP8266WiFi.h>
  6. #include <ArduinoJson.h>
  7. //====  需修改的地方:本程序第九行,第10行,第15行,第16行,第400行,接线方法见程序第17到24行 ==== //
  8. //============WiFi名称和密码================//
  9. const char* ssid     = "WIFI名称";
  10. const char* password = "WIFI密码";
  11. //==========目标服务器网址和端口==============//
  12. const char* host = "116.62.81.138";  //apiseniversecom
  13. const uint16_t port = 80 ;
  14. //===============地区设置===================//
  15. String City = "城市名称";//城市
  16. String My_Key = "心知天气秘钥";//禁止泄露
  17. //===============OLED引脚===================//
  18. #define SCREEN_WIDTH 128  // OLED显示宽度,以像素为单位
  19. #define SCREEN_HEIGHT 64  // OLED显示高度,以像素为单位
  20. #define OLED_MOSI   12    //D6
  21. #define OLED_CLK   13     //D7
  22. #define OLED_DC    14     //D5
  23. #define OLED_CS    15     //D8
  24. #define OLED_RESET 16     //D0
  25. Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
  26. //=================变量=====================//
  27. typedef struct  
  28. {
  29.    int Hour;
  30.    int Minute;
  31.    int Second;
  32.    int Year;
  33.    int Month;
  34.    int Day;
  35. }STime;       //时间日期结构体
  36. typedef struct
  37. {
  38.    int gws;
  39.    int gwg;
  40.    int dws;
  41.    int dwg;
  42.    int sds;
  43.    int sdg;
  44. }dat;       //最高温最低温和湿度的结构体  十位和个位
  45. typedef struct
  46. {
  47.   int zuigaowendu;
  48.   int zuidiwendu;
  49.   int shidu;
  50.   int tianqitubiao;
  51. }tianqixinxi; //高温最低温和湿度的结构体
  52. tianqixinxi day1,day2,day3;
  53. dat Nume;
  54. STime dTime,hTime;
  55. int OnTime = -1;   //计数显示变量  10s时间 5s今明后天天气
  56. bool DatFlag = true; //处理接收json数据的标志位
  57. unsigned long getTime = 0;  //获取网络天气和时间  5s请求一次
  58. String inputString = "";  //接收到的数据
  59. //请求URL
  60. String url = "/v3/weather/daily.json?key=" + My_Key +"&location=" + City + "&language=zh-Hans&unit=c&start=0&days=3";
  61. //请求数据
  62. String urlDat = "key=" + My_Key +"&location=" + City + "&language=zh-Hans&unit=c&start=0&days=3";
  63. WiFiClient client;
  64. /*************************************************************************************
  65. * 使用取模软件:PCTOLCD 2002完美版
  66. * 取模方式为:阴码,逐行式,顺序  
  67. * 字体:32X32 仿宋
  68. * 图标:60X60
  69. **************************************************************************************/
  70. static const unsigned char PROGMEM qintian[] =
  71. {
  72. //晴,天
  73. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  74. 0x00,0x00,0x00,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0x00,0x00,0x00,
  75. 0x00,0x01,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFC,0x00,0x00,
  76. 0x00,0x1F,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,
  77. 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,
  78. 0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,
  79. 0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,
  80. 0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,
  81. 0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,
  82. 0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,
  83. 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0x00,0x00,
  84. 0x00,0x3F,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xF0,0x00,0x00,
  85. 0x00,0x01,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFC,0x00,0x00,0x00,
  86. 0x00,0x00,0x01,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  87. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  88. };
  89. static const unsigned char PROGMEM yintian[] =
  90. {
  91. //阴,天
  92. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  93. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  94. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
  95. 0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0x00,0x00,0x00,0x00,
  96. 0x0F,0x80,0x1F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x3F,0xF0,0x3F,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x7F,0xF8,0x7F,0xFF,0xFF,0xC0,0x00,0x00,0x00,0xFF,0xFC,0x7F,0xFF,0xFF,
  97. 0xE0,0x00,0x00,0x01,0xFF,0xFE,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x07,0xFF,
  98. 0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,
  99. 0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x7F,0xFF,0xFF,
  100. 0xFF,0xFF,0xFF,0xFC,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,
  101. 0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0xFF,0xFF,
  102. 0xFF,0xFF,0xFF,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x03,
  103. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,
  104. 0xFF,0xF0,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  105. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  106. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  107. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  108. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  109. };
  110. static const unsigned char PROGMEM duoyun[] =
  111. {
  112. //多,云
  113. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  114. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x00,0x00,
  115. 0x00,0x00,0x00,0x00,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xC0,0x00,
  116. 0x00,0x00,0x00,0x1F,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xF8,0x00,
  117. 0x00,0x00,0x00,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFC,0x00,
  118. 0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFE,0x00,
  119. 0x00,0x03,0x83,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x0F,0xE3,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x1F,0xFB,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,
  120. 0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,
  121. 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,
  122. 0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,
  123. 0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,
  124. 0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,
  125. 0x03,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  126. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  127. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  128. };
  129. static const unsigned char PROGMEM xiaoyu[] =
  130. {
  131. //小,雨
  132. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  133. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  134. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFC,0x00,0x00,
  135. 0x00,0x00,0x00,0x07,0xFF,0xFE,0x00,0x00,0x00,0x00,0xF0,0x0F,0xFF,0xFF,0x00,0x00,0x00,0x03,0xFE,0x1F,0xFF,0xFF,0x80,0x00,0x00,0x0F,0xFF,0x1F,0xFF,0xFF,0xC0,0x00,
  136. 0x00,0x1F,0xFF,0xBF,0xFF,0xFF,0xC0,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,
  137. 0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,
  138. 0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,
  139. 0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,
  140. 0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,
  141. 0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  142. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  143. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,
  144. 0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,
  145. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  146. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  147. };
  148. static const unsigned char PROGMEM zhongyu[] =
  149. {
  150. //中,雨
  151. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  152. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  153. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xE0,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xF8,0x00,0x00,
  154. 0x00,0x00,0x00,0x03,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0x00,0x00,0x00,0x01,0xF8,0x0F,0xFF,0xFF,0x80,0x00,0x00,0x07,0xFC,0x1F,0xFF,0xFF,0x80,0x00,
  155. 0x00,0x1F,0xFF,0x1F,0xFF,0xFF,0xC0,0x00,0x00,0x1F,0xFF,0xBF,0xFF,0xFF,0xC0,0x00,0x00,0x3F,0xFF,0xBF,0xFF,0xFF,0xE0,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,
  156. 0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,
  157. 0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,
  158. 0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,
  159. 0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,
  160. 0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  161. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  162. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  163. 0x00,0x00,0x00,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x01,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x01,0xE1,0xE0,0x00,0x00,0x00,
  164. 0x00,0x00,0x01,0xE1,0xE0,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  165. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  166. };
  167. static const unsigned char PROGMEM dayu[] =
  168. {
  169. //大,雨
  170. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  171. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xC0,0x00,0x00,
  172. 0x00,0x00,0x00,0x0F,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xF8,0x00,0x00,0x00,0x01,0xC0,0x3F,0xFF,0xFC,0x00,0x00,0x00,0x0F,0xF8,0x7F,0xFF,0xFC,0x00,0x00,
  173. 0x00,0x3F,0xFC,0x7F,0xFF,0xFE,0x00,0x00,0x00,0x7F,0xFE,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x7F,0xFE,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,
  174. 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,
  175. 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,
  176. 0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,
  177. 0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,
  178. 0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  179. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  180. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x20,0x00,0x00,0x00,
  181. 0x00,0x00,0x0C,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x78,0x00,0x00,0x00,
  182. 0x00,0x00,0x1C,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,
  183. 0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  184. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  185. };
  186. static const unsigned char PROGMEM jintian[][32] =
  187. {
  188. //今,明,后,天
  189. {0x01,0x00,0x01,0x00,0x02,0x80,0x04,0x40,0x08,0x20,0x12,0x10,0x21,0x08,0xC1,0x06,0x00,0x00,0x1F,0xF0,0x00,0x10,0x00,0x20,0x00,0x20,0x00,0x40,0x00,0x80,0x01,0x00},//"今",
  190. {0x00,0x00,0x00,0xFC,0x7C,0x84,0x44,0x84,0x44,0x84,0x44,0xFC,0x7C,0x84,0x44,0x84,0x44,0x84,0x44,0xFC,0x7C,0x84,0x44,0x84,0x01,0x04,0x01,0x04,0x02,0x14,0x04,0x08},//"明",
  191. {0x00,0x10,0x00,0xF8,0x1F,0x00,0x10,0x00,0x10,0x00,0x1F,0xFE,0x10,0x00,0x10,0x00,0x10,0x00,0x17,0xF8,0x14,0x08,0x24,0x08,0x24,0x08,0x44,0x08,0x87,0xF8,0x04,0x08},//"后",
  192. {0x00,0x00,0x3F,0xF8,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x01,0x00,0x02,0x80,0x02,0x80,0x04,0x40,0x04,0x40,0x08,0x20,0x10,0x10,0x20,0x08,0xC0,0x06}//"天",
  193. };
  194. static const unsigned char PROGMEM shidu[][32] =
  195. {
  196. //湿,度
  197. {0x00,0x00,0x27,0xF8,0x14,0x08,0x14,0x08,0x87,0xF8,0x44,0x08,0x44,0x08,0x17,0xF8,0x11,0x20,0x21,0x20,0xE9,0x24,0x25,0x28,0x23,0x30,0x21,0x20,0x2F,0xFE,0x00,0x00},//"湿",
  198. {0x01,0x00,0x00,0x80,0x3F,0xFE,0x22,0x20,0x22,0x20,0x3F,0xFC,0x22,0x20,0x22,0x20,0x23,0xE0,0x20,0x00,0x2F,0xF0,0x24,0x10,0x42,0x20,0x41,0xC0,0x86,0x30,0x38,0x0E}//"度",
  199. };
  200. static const unsigned char PROGMEM tianqi[][32] =
  201. {
  202. //晴,阴,多,云,小,中,大,雨
  203. {0x00,0x20,0x00,0x20,0x7B,0xFE,0x48,0x20,0x49,0xFC,0x48,0x20,0x4B,0xFE,0x78,0x00,0x49,0xFC,0x49,0x04,0x49,0xFC,0x49,0x04,0x79,0xFC,0x49,0x04,0x01,0x14,0x01,0x08},//"晴",
  204. {0x00,0x00,0x7D,0xFC,0x45,0x04,0x49,0x04,0x49,0x04,0x51,0xFC,0x49,0x04,0x49,0x04,0x45,0x04,0x45,0xFC,0x45,0x04,0x69,0x04,0x52,0x04,0x42,0x04,0x44,0x14,0x48,0x08},//"阴",
  205. {0x02,0x00,0x02,0x00,0x07,0xF0,0x08,0x20,0x38,0x40,0x04,0x80,0x03,0x40,0x0C,0x80,0x71,0xF8,0x02,0x08,0x0C,0x10,0x32,0x20,0x01,0x40,0x01,0x80,0x0E,0x00,0x70,0x00},//"多",
  206. {0x00,0x00,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x02,0x00,0x04,0x00,0x04,0x00,0x08,0x40,0x10,0x20,0x20,0x10,0x7F,0xF8,0x20,0x08,0x00,0x08},//"云",
  207. {0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x11,0x10,0x11,0x08,0x11,0x04,0x21,0x04,0x21,0x02,0x41,0x02,0x81,0x02,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00},//"小",
  208. {0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00},//"中",
  209. {0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x01,0x00,0x01,0x00,0x02,0x80,0x02,0x80,0x04,0x40,0x04,0x40,0x08,0x20,0x10,0x10,0x20,0x08,0xC0,0x06},//*"大",
  210. {0x00,0x00,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x7F,0xFC,0x41,0x04,0x41,0x04,0x49,0x44,0x45,0x24,0x41,0x04,0x49,0x44,0x45,0x24,0x41,0x04,0x41,0x14,0x40,0x08}//*"雨",
  211. };
  212. static const unsigned char PROGMEM num[][16] =
  213. {
  214. // 0,1,2,3,4,5,6,7,8,9,-
  215. {0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00},//*"0",
  216. {0x00,0x00,0x00,0x08,0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00},//*"1",
  217. {0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x02,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00},//*"2",
  218. {0x00,0x00,0x00,0x3C,0x42,0x42,0x02,0x04,0x18,0x04,0x02,0x42,0x42,0x3C,0x00,0x00},//*"3",
  219. {0x00,0x00,0x00,0x04,0x0C,0x0C,0x14,0x24,0x24,0x44,0x7F,0x04,0x04,0x1F,0x00,0x00},//*"4",
  220. {0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x78,0x44,0x02,0x02,0x42,0x44,0x38,0x00,0x00},//*"5
  221. {0x00,0x00,0x00,0x18,0x24,0x40,0x40,0x5C,0x62,0x42,0x42,0x42,0x22,0x1C,0x00,0x00},//*"6",
  222. {0x00,0x00,0x00,0x7E,0x42,0x04,0x04,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x00,0x00},//*"7",
  223. {0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00},//*"8",
  224. {0x00,0x00,0x00,0x38,0x44,0x42,0x42,0x42,0x46,0x3A,0x02,0x02,0x24,0x18,0x00,0x00},//*"9",
  225. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00}//*-
  226. };
  227. static const unsigned char PROGMEM sheshidu[][32] =
  228. {
  229. // ℃,%
  230. {0x60,0x00,0x91,0xF4,0x96,0x0C,0x6C,0x04,0x08,0x04,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x08,0x00,0x0C,0x04,0x06,0x08,0x01,0xF0,0x00,0x00},
  231. {0x00,0x00,0x18,0x04,0x24,0x08,0x24,0x10,0x24,0x20,0x24,0x40,0x24,0x80,0x19,0x00,0x02,0x60,0x04,0x90,0x08,0x90,0x10,0x90,0x20,0x90,0x40,0x90,0x00,0x60,0x00,0x00},//*"%",
  232. };
  233. //====================================================数组END=======================================================================//
  234. void setup() {
  235.     Serial.begin(9600);
  236.     //检测OLED
  237.     if(!display.begin(SSD1306_SWITCHCAPVCC)) {
  238.         Serial.println(F("SSD1306 allocation failed"));//SSD1306分配失败
  239.         for(;;); // 不要继续,永远循环
  240.     }
  241.     // 在屏幕上显示初始显示缓冲区的内容-Adafruit库
  242.     display.display();//送显示
  243.     delay(1000);  // 等待1s
  244.     display.clearDisplay();//关闭显示
  245.     display.setTextColor(WHITE);//设置字体颜色
  246.     display.setTextSize(1);//设置字体大小
  247.     display.setCursor(0,0);//设置光标
  248.     display.printf("connecting to %s\n",ssid);//在OLED上打印信息
  249.     display.display();
  250.   
  251.     WiFi.mode(WIFI_STA);
  252.     WiFi.begin(ssid, password);
  253.   
  254.     while (WiFi.status() != WL_CONNECTED) //等待连接
  255.     {
  256.         delay(500);
  257.         display.print(".");
  258.         display.display();
  259.     }
  260.     display.println();
  261.     display.println("WiFi connected");
  262.     display.print("IP: ");
  263.     display.println(WiFi.localIP());
  264.     display.print("Please wait...");
  265.     display.display();
  266. }
  267. void loop()
  268. {
  269.     GET_Weather();  //获取天气
  270.     DateHandle();   //json处理
  271.     DisplayTime();  //显示时间
  272.     DisplayTianqi();//显示天气
  273. }
  274. /**************************************************
  275. * 函数名称:tianqi_dat
  276. * 函数功能:将最低温度,最高温度,湿度的个位 十位分离
  277. * 参数说明:dw 最低温,gw 最高温,sd 湿度
  278. **************************************************/
  279. void tianqi_dat(int dw,int gw,int sd)
  280. {
  281.       Nume.dws = dw/10;
  282.       Nume.dwg = dw%10;
  283.       Nume.gws = gw/10;
  284.       Nume.gwg = gw%10;
  285.       Nume.sds = sd/10;
  286.       Nume.sdg = sd%10;   
  287. }
  288. /*****************************************************
  289. * 函数名称:显示天气函数
  290. * 参数说明:
  291. * dday:第几天
  292. * tq:  天气
  293. * dw:  最低气温
  294. * gw:  最高气温
  295. * sd:  湿度
  296. ******************************************************/
  297. void display_tq(int dday,int tq,int dw,int gw,int sd)
  298. {
  299.     tianqi_dat(dw,gw,sd);
  300.     display.clearDisplay();
  301.     switch(dday)
  302.     {
  303.         case 0:display.drawBitmap(64,0,jintian[0],16,16,1);//今
  304.         break;  
  305.         case 1:display.drawBitmap(64,0,jintian[1],16,16,1);//
  306.         break;
  307.         case 2:display.drawBitmap(64,0,jintian[2],16,16,1);//
  308.         break;
  309.     }  
  310.     display.drawBitmap(80,0,jintian[3],16,16,1);//天
  311.     switch(tq)
  312.     {
  313.         case 0:display.drawBitmap(64,16,tianqi[0],16,16,1);//qin
  314.                display.drawBitmap(0,0,qintian,60,60,1);//图标
  315.         break;  
  316.         case 4:display.drawBitmap(64,16,tianqi[2],16,16,1);//dy
  317.                display.drawBitmap(80,16,tianqi[3],16,16,1);//
  318.                display.drawBitmap(0,0,duoyun,60,60,1);//图标
  319.         break;  
  320.         case 9:display.drawBitmap(64,16,tianqi[1],16,16,1);//yin
  321.                display.drawBitmap(0,0,yintian,60,60,1);//图标
  322.         break;
  323.         case 13:display.drawBitmap(64,16,tianqi[4],16,16,1);//x
  324.                display.drawBitmap(80,16,tianqi[7],16,16,1);//
  325.                display.drawBitmap(0,0,xiaoyu,60,60,1);//图标
  326.         break;  
  327.         case 14:display.drawBitmap(64,16,tianqi[5],16,16,1);//z
  328.                display.drawBitmap(80,16,tianqi[7],16,16,1);//
  329.                display.drawBitmap(0,0,zhongyu,60,60,1);//图标
  330.         break;  
  331.         case 15:display.drawBitmap(64,16,tianqi[6],16,16,1);//d
  332.                display.drawBitmap(80,16,tianqi[7],16,16,1);//
  333.                display.drawBitmap(0,0,dayu,60,60,1);//图标
  334.         break;  
  335.     }
  336.     display.drawBitmap(64,32,num[Nume.dws],8,16,1);//最低温
  337.     display.drawBitmap(72,32,num[Nume.dwg],8,16,1);//最低温
  338.    
  339.     display.drawBitmap(80,32,num[10],8,16,1);//-
  340.    
  341.     display.drawBitmap(88,32,num[Nume.gws],8,16,1);//最g温
  342.     display.drawBitmap(96,32,num[Nume.gwg],8,16,1);//最g温
  343.    
  344.     display.drawBitmap(108,32,sheshidu[0],16,16,1);//shehisdu
  345.     display.drawBitmap(64,48,shidu[0],16,16,1);//湿
  346.     display.drawBitmap(80,48,shidu[1],16,16,1);//度  
  347.    
  348.     display.drawBitmap(96,48,num[Nume.sds],8,16,1);//湿度
  349.     display.drawBitmap(104,48,num[Nume.sdg],8,16,1);//
  350.    
  351.     display.drawBitmap(112,48,sheshidu[1],16,16,1);//baifenhao
  352.     display.display();
  353. }
  354. /**************************************************
  355. * 函数名称:DisplayZZXS
  356. * 函数功能:传入第几天将天气数据存入
  357. * 参数说明:dday
  358. **************************************************/
  359. void DisplayZZXS(int dday)
  360. {
  361.     switch(dday)
  362.     {
  363.         case 0:display_tq(dday,day1.tianqitubiao,day1.zuidiwendu,day1.zuigaowendu,day1.shidu);
  364.         break;  
  365.         case 1:display_tq(dday,day2.tianqitubiao,day2.zuidiwendu,day2.zuigaowendu,day2.shidu);
  366.         break;  
  367.         case 2:display_tq(dday,day3.tianqitubiao,day3.zuidiwendu,day3.zuigaowendu,day3.shidu);
  368.         break;  
  369.     }
  370. }
  371. /**************************************************
  372. * 函数名称:DisplayTianqi
  373. * 函数功能:显示天气
  374. * 参数说明:无
  375. **************************************************/
  376. void DisplayTianqi()
  377. {
  378.    if(OnTime > 1)
  379.     {
  380.         DisplayZZXS(OnTime-2);
  381.         //Serial.println("打印天气中");  
  382.     }
  383. }
  384. /**************************************************
  385. * 函数名称:DisplayTime
  386. * 函数功能:显示时间
  387. * 参数说明:无
  388. **************************************************/
  389. void DisplayTime()
  390. {
  391.     if(OnTime ==0 or OnTime == 1)
  392.     {
  393.         display.clearDisplay();//清除缓冲区
  394.         display.setTextSize(2);//设置字体大小
  395.         display.setCursor(32,0);//设置光标
  396.         display.print("城市名称(拼音)");//显示地区
  397.         //display.setCursor(16,20);//设置光标
  398.         //display.printf("%d:%d:%d",dTime.Hour,dTime.Minute,dTime.Second);
  399.         display.setCursor(34,20);//设置光标
  400.         display.printf("%d:%d",dTime.Hour,dTime.Minute);//时间
  401.         display.setCursor(4,40);//设置光标
  402.         display.printf("%d.%d.%d",dTime.Year,dTime.Month,dTime.Day);//日期
  403.         display.display();
  404.     }
  405. }
  406. /**************************************************
  407. * 函数名称:GET_Weather
  408. * 函数功能:http访问获取天气数据
  409. * 参数说明:无
  410. **************************************************/
  411. void GET_Weather()
  412. {
  413.     if((millis() - getTime > 5000))//10s
  414.     {
  415.         getTime = millis();
  416.         //Serial.print("connecting to ");
  417.         if (!client.connect(host,port))
  418.         {
  419.             Serial.println("服务器连接失败");
  420.             return;
  421.         }   
  422.         //Serial.print("Requesting URL: ");
  423.         // 发送请求报文
  424.         client.print(String("GET ") + url + " HTTP/1.1\r\n" +  //请求行  请求方法 + 请求地址 + 协议版本
  425.                      "Host: " + host + "\r\n" +                //请求头部
  426.                      "Connection: close\r\n" +                //处理完成后断开连接
  427.                      "\r\n" +                                 //空行
  428.                      urlDat);                                 //请求数据            
  429.         delay(100);  
  430.         while(client.available()) //接收数据
  431.         {         
  432.             String line = client.readStringUntil('\r');
  433.             inputString += line;
  434.         }
  435.        // Serial.println(inputString);
  436.         client.stop();      //断开与服务器连接以节约资源
  437.         DatFlag = true;
  438.        // Serial.println(inputString);
  439.     }
  440. }
  441. /**************************************************
  442. * 函数名称:DateHandle
  443. * 函数功能:将获取到的数据进行处理
  444. * 参数说明:无
  445. **************************************************/
  446. void DateHandle()
  447. {
  448.     if(DatFlag)
  449.     {
  450.         DatFlag = false;
  451.         int t = inputString.indexOf("Date:");//找时间
  452.         int m = inputString.lastIndexOf("GMT");
  453.         String inputTime = inputString.substring(t, m + 1); //把含有时间的数据取出进行处理
  454.         int miao = inputTime.lastIndexOf(":");
  455.         hTime.Hour = (inputTime.substring(miao-5, miao-3)).toInt();
  456.         hTime.Minute = (inputTime.substring(miao-2, miao)).toInt();
  457.         hTime.Second = (inputTime.substring(miao+1, miao+3)).toInt();
  458.         //Serial.println(inputTime);
  459.         int jsonBeginAt = inputString.indexOf("{");   //判断json数据完整性
  460.         int jsonEndAt = inputString.lastIndexOf("}");
  461.         if (jsonBeginAt != -1 && jsonEndAt != -1)
  462.         {
  463.             //净化json数据
  464.             inputString = inputString.substring(jsonBeginAt, jsonEndAt + 1);//取得一个完整的JSON字符串
  465.             processMessage();//对数据进行处理
  466.             //Serial.println(inputString);
  467.             inputString="";
  468.         }
  469.     }  
  470. }
  471. /**************************************************
  472. * 函数名称:processMessage
  473. * 函数功能:将json数据取出
  474. * 参数说明:无
  475. **************************************************/
  476. void processMessage()
  477. {
  478.     const size_t capacity = JSON_ARRAY_SIZE(1) + JSON_ARRAY_SIZE(3) + JSON_OBJECT_SIZE(1) + JSON_OBJECT_SIZE(3) + JSON_OBJECT_SIZE(6) + 3*JSON_OBJECT_SIZE(13) + 760;
  479.     DynamicJsonDocument doc(capacity);
  480.     deserializeJson(doc, inputString);
  481.     JsonObject results_0 = doc["results"][0];
  482.     JsonObject results_0_location = results_0["location"];
  483.     const char* results_0_location_name = results_0_location["name"]; // "嘉兴"
  484.     JsonArray results_0_daily = results_0["daily"];
  485.     JsonObject results_0_daily_0 = results_0_daily[0];
  486.     const char* results_0_daily_0_date = results_0_daily_0["date"]; // "2019-12-21"==========================今天日期
  487.     const char* results_0_daily_0_text_day = results_0_daily_0["text_day"]; // "中雨"=========================白天天气
  488.     const char* results_0_daily_0_code_day = results_0_daily_0["code_day"]; // "14"==========================图标编号
  489.     const char* results_0_daily_0_text_night = results_0_daily_0["text_night"]; // "中雨"=====================晚上天气
  490.     const char* results_0_daily_0_code_night = results_0_daily_0["code_night"]; // "14"=======================图标编号
  491.     const char* results_0_daily_0_high = results_0_daily_0["high"]; // "11"===================================最高气温
  492.     const char* results_0_daily_0_low = results_0_daily_0["low"]; // "9"======================================最低气温
  493.     const char* results_0_daily_0_wind_direction = results_0_daily_0["wind_direction"]; // "东北"==============风向
  494.     const char* results_0_daily_0_wind_direction_degree = results_0_daily_0["wind_direction_degree"]; // "45"==度数
  495.     const char* results_0_daily_0_wind_speed = results_0_daily_0["wind_speed"]; // "25.20"=====================速度
  496.     const char* results_0_daily_0_wind_scale = results_0_daily_0["wind_scale"]; // "4"=========================风标
  497.     const char* results_0_daily_0_humidity = results_0_daily_0["humidity"]; // "94"============================湿度
  498.    
  499.     JsonObject results_0_daily_1 = results_0_daily[1];
  500.     const char* results_0_daily_1_date = results_0_daily_1["date"]; // "2019-12-22"
  501.     const char* results_0_daily_1_text_day = results_0_daily_1["text_day"]; // "小雨"
  502.     const char* results_0_daily_1_code_day = results_0_daily_1["code_day"]; // "13"
  503.     const char* results_0_daily_1_text_night = results_0_daily_1["text_night"]; // "阴"
  504.     const char* results_0_daily_1_code_night = results_0_daily_1["code_night"]; // "9"
  505.     const char* results_0_daily_1_high = results_0_daily_1["high"]; // "12"
  506.     const char* results_0_daily_1_low = results_0_daily_1["low"]; // "8"
  507.     const char* results_0_daily_1_precip = results_0_daily_1["precip"]; // ""
  508.     const char* results_0_daily_1_wind_direction = results_0_daily_1["wind_direction"]; // "西"
  509.     const char* results_0_daily_1_wind_direction_degree = results_0_daily_1["wind_direction_degree"]; // "270"
  510.     const char* results_0_daily_1_wind_speed = results_0_daily_1["wind_speed"]; // "25.20"
  511.     const char* results_0_daily_1_wind_scale = results_0_daily_1["wind_scale"]; // "4"
  512.     const char* results_0_daily_1_humidity = results_0_daily_1["humidity"]; // "91"
  513.    
  514.     JsonObject results_0_daily_2 = results_0_daily[2];
  515.     const char* results_0_daily_2_date = results_0_daily_2["date"]; // "2019-12-23"
  516.     const char* results_0_daily_2_text_day = results_0_daily_2["text_day"]; // "小雨"
  517.     const char* results_0_daily_2_code_day = results_0_daily_2["code_day"]; // "13"
  518.     const char* results_0_daily_2_text_night = results_0_daily_2["text_night"]; // "小雨"
  519.     const char* results_0_daily_2_code_night = results_0_daily_2["code_night"]; // "13"
  520.     const char* results_0_daily_2_high = results_0_daily_2["high"]; // "12"
  521.     const char* results_0_daily_2_low = results_0_daily_2["low"]; // "11"
  522.     const char* results_0_daily_2_precip = results_0_daily_2["precip"]; // ""
  523.     const char* results_0_daily_2_wind_direction = results_0_daily_2["wind_direction"]; // "东北"
  524.     const char* results_0_daily_2_wind_direction_degree = results_0_daily_2["wind_direction_degree"]; // "59"
  525.     const char* results_0_daily_2_wind_speed = results_0_daily_2["wind_speed"]; // "34.20"
  526.     const char* results_0_daily_2_wind_scale = results_0_daily_2["wind_scale"]; // "5"
  527.     const char* results_0_daily_2_humidity = results_0_daily_2["humidity"]; // "86"
  528.    
  529.     const char* results_0_last_update = results_0["last_update"]; // "2019-12-21T17:23:52+08:00"
  530.    
  531.     String riqi = results_0_last_update;  //将日期取出处理
  532.     int nian = riqi.lastIndexOf("T");
  533.     hTime.Year = (riqi.substring(nian-10, nian-6)).toInt();
  534.     hTime.Month = (riqi.substring(nian-5, nian-3)).toInt();
  535.     hTime.Day = (riqi.substring(nian-2, nian)).toInt();
  536.    
  537.     OnTime++;   //显示标志位 0,1,2显示时间 3显示今天天气 4显示明天天气 5显示后天天气
  538.     OnTime%=5;
  539.     dTime.Hour = hTime.Hour+8;   
  540.     dTime.Minute = hTime.Minute;
  541.     dTime.Second = hTime.Second;
  542.     dTime.Year = hTime.Year;
  543.     dTime.Month = hTime.Month;
  544.     dTime.Day = hTime.Day;
  545.     day1.tianqitubiao = atoi(results_0_daily_0_code_day);//获取今天天气信息
  546.     day1.zuigaowendu = atoi(results_0_daily_0_high);
  547.     day1.zuidiwendu = atoi(results_0_daily_0_low);
  548.     day1.shidu = atoi(results_0_daily_0_humidity);
  549.    
  550.     day2.tianqitubiao = atoi(results_0_daily_1_code_day);
  551.     day2.zuigaowendu = atoi(results_0_daily_1_high);
  552.     day2.zuidiwendu = atoi(results_0_daily_1_low);
  553.     day2.shidu = atoi(results_0_daily_1_humidity);   
  554.       
  555.     day3.tianqitubiao = atoi(results_0_daily_2_code_day);
  556.     day3.zuigaowendu = atoi(results_0_daily_2_high);
  557.     day3.zuidiwendu = atoi(results_0_daily_2_low);
  558.     day3.shidu = atoi(results_0_daily_2_humidity);
  559. }