位置导航: 首页 / 物联网平台 / ESP8266心知天气应用 / 本页
本节课程里,我们将使用三段示例程序来向您演示如何使用ESP8266获取心知天气API数据。 以下是这三段示例程序的功能简介:
示例1. 获取实时天气信息(温度,天气)
示例2. 获取天气预报信息(温度,天气,降水概率,风力,风向,湿度)
示例3. 获取实时生活指数(穿衣,紫外线强度,洗车,旅游,感冒,运动)
我们编写了专门用于ESP8266利用心知天气API获取信息的的第三方库。通过该库,您可以使用很简单的几行代码就能实现本页代码的所有功能。如需了解更多信息,请点击这里进入ESP8266-心知天气库使用说明页面。
这三段示例程序都是基于零基础入门学用物联网 – 基础知识篇3-4-1 ESP8266网络客户端基本操作示例程序2所建立的。
这三段示例程序最大的区别是httpRequest函数中ESP8266所发送的http请求信息不同。建立这些HTTP请求信息的依据是心知天气API数据调用规范。假如您想了解具体内容,可参考心知天气API接口文档。
示例1. 获取实时天气信息(温度,天气)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
/********************************************************************** 项目名称/Project : 零基础入门学用物联网 程序名称/Program name : weather_now 团队/Team : 太极创客团队 / Taichi-Maker (www.taichi-maker.com) 作者/Author : CYNO朔 日期/Date(YYYYMMDD) : 20200602 程序目的/Purpose : 通过心知天气(www.seniverse.com)免费服务获取实时天气信息。 ----------------------------------------------------------------------- 其它说明 / Other Description 心知天气API文档说明: https://www.seniverse.com/docs 本程序为太极创客团队制作的免费视频教程《零基础入门学用物联网 》中一部分。该教程系统的 向您讲述ESP8266的物联网应用相关的软件和硬件知识。以下是该教程目录页: http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/ ***********************************************************************/ #include <ArduinoJson.h> #include <ESP8266WiFi.h> const char* ssid = "taichimaker"; // 连接WiFi名(此处使用taichi-maker为示例) // 请将您需要连接的WiFi名填入引号中 const char* password = "12345678"; // 连接WiFi密码(此处使用12345678为示例) // 请将您需要连接的WiFi密码填入引号中 const char* host = "api.seniverse.com"; // 将要连接的服务器地址 const int httpPort = 80; // 将要连接的服务器端口 // 心知天气HTTP请求所需信息 String reqUserKey = "XXXXXXXXXXXXXXXXX"; // 私钥 String reqLocation = "Beijing"; // 城市 String reqUnit = "c"; // 摄氏/华氏 void setup(){ Serial.begin(9600); Serial.println(""); // 连接WiFi connectWiFi(); } void loop(){ // 建立心知天气API当前天气请求资源地址 String reqRes = "/v3/weather/now.json?key=" + reqUserKey + + "&location=" + reqLocation + "&language=en&unit=" +reqUnit; // 向心知天气服务器服务器请求信息并对信息进行解析 httpRequest(reqRes); delay(3000); } // 向心知天气服务器服务器请求信息并对信息进行解析 void httpRequest(String reqRes){ WiFiClient client; // 建立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); Serial.println("Sending request: "); Serial.println(httpRequest); // 获取并显示服务器响应状态行 String status_response = client.readStringUntil('\n'); Serial.print("status_response: "); Serial.println(status_response); // 使用find跳过HTTP响应头 if (client.find("\r\n\r\n")) { Serial.println("Found Header End. Start Parsing."); } // 利用ArduinoJson库解析心知天气响应信息 parseInfo(client); } else { Serial.println(" connection failed!"); } //断开客户端与服务器连接工作 client.stop(); } // 连接WiFi void connectWiFi(){ WiFi.begin(ssid, password); // 启动网络连接 Serial.print("Connecting to "); // 串口监视器输出网络连接信息 Serial.print(ssid); Serial.println(" ..."); // 告知用户NodeMCU正在尝试WiFi连接 int i = 0; // 这一段程序语句用于检查WiFi是否连接成功 while (WiFi.status() != WL_CONNECTED) { // WiFi.status()函数的返回值是由NodeMCU的WiFi连接状态所决定的。 delay(1000); // 如果WiFi连接成功则返回值为WL_CONNECTED Serial.print(i++); Serial.print(' '); // 此处通过While循环让NodeMCU每隔一秒钟检查一次WiFi.status()函数返回值 } // 同时NodeMCU将通过串口监视器输出连接时长读秒。 // 这个读秒是通过变量i每隔一秒自加1来实现的。 Serial.println(""); // WiFi连接成功后 Serial.println("Connection established!"); // NodeMCU将通过串口监视器输出"连接成功"信息。 Serial.print("IP address: "); // 同时还将输出NodeMCU的IP地址。这一功能是通过调用 Serial.println(WiFi.localIP()); // WiFi.localIP()函数来实现的。该函数的返回值即NodeMCU的IP地址。 } // 利用ArduinoJson库解析心知天气响应信息 void parseInfo(WiFiClient client){ const size_t capacity = JSON_ARRAY_SIZE(1) + JSON_OBJECT_SIZE(1) + 2*JSON_OBJECT_SIZE(3) + JSON_OBJECT_SIZE(6) + 230; DynamicJsonDocument doc(capacity); deserializeJson(doc, client); JsonObject results_0 = doc["results"][0]; JsonObject results_0_now = results_0["now"]; const char* results_0_now_text = results_0_now["text"]; // "Sunny" const char* results_0_now_code = results_0_now["code"]; // "0" const char* results_0_now_temperature = results_0_now["temperature"]; // "32" const char* results_0_last_update = results_0["last_update"]; // "2020-06-02T14:40:00+08:00" // 通过串口监视器显示以上信息 String results_0_now_text_str = results_0_now["text"].as<String>(); int results_0_now_code_int = results_0_now["code"].as<int>(); int results_0_now_temperature_int = results_0_now["temperature"].as<int>(); String results_0_last_update_str = results_0["last_update"].as<String>(); Serial.println(F("======Weahter Now=======")); Serial.print(F("Weather Now: ")); Serial.print(results_0_now_text_str); Serial.print(F(" ")); Serial.println(results_0_now_code_int); Serial.print(F("Temperature: ")); Serial.println(results_0_now_temperature_int); Serial.print(F("Last Update: ")); Serial.println(results_0_last_update_str); Serial.println(F("========================")); } |
示例2. 获取天气预报信息(温度,天气,降水概率,风力,风向,湿度)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 |
/********************************************************************** 项目名称/Project : 零基础入门学用物联网 程序名称/Program name : weather_forecast 团队/Team : 太极创客团队 / Taichi-Maker (www.taichi-maker.com) 作者/Author : CYNO朔 日期/Date(YYYYMMDD) : 20200601 程序目的/Purpose : 通过心知天气(www.seniverse.com)免费服务获取天气预报信息(三日)。 ----------------------------------------------------------------------- 其它说明 / Other Description 心知天气API文档说明: https://www.seniverse.com/docs 本程序为太极创客团队制作的免费视频教程《零基础入门学用物联网 》中一部分。该教程系统的 向您讲述ESP8266的物联网应用相关的软件和硬件知识。以下是该教程目录页: http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/ ***********************************************************************/ #include <ArduinoJson.h> #include <ESP8266WiFi.h> const char* ssid = "taichimaker"; // 连接WiFi名(此处使用taichi-maker为示例) // 请将您需要连接的WiFi名填入引号中 const char* password = "12345678"; // 连接WiFi密码(此处使用12345678为示例) // 请将您需要连接的WiFi密码填入引号中 const char* host = "api.seniverse.com"; // 将要连接的服务器地址 const int httpPort = 80; // 将要连接的服务器端口 // 心知天气HTTP请求所需信息 String reqUserKey = "XXXXXXXXXXXXXXXXX"; // 私钥 String reqLocation = "beijing"; // 城市 String reqUnit = "c"; // 摄氏/华氏 void setup(){ Serial.begin(9600); Serial.println(""); // 连接WiFi connectWiFi(); } void loop(){ // 建立心知天气API当前天气请求资源地址 String reqRes = "/v3/weather/daily.json?key=" + reqUserKey + + "&location=" + reqLocation + "&language=en&unit=" + reqUnit + "&start=0&days=3"; // 向心知天气服务器服务器请求信息并对信息进行解析 httpRequest(reqRes); delay(3000); } // 向心知天气服务器服务器请求信息并对信息进行解析 void httpRequest(String reqRes){ WiFiClient client; // 建立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); Serial.println("Sending request: "); Serial.println(httpRequest); // 获取并显示服务器响应状态行 String status_response = client.readStringUntil('\n'); Serial.print("status_response: "); Serial.println(status_response); // 使用find跳过HTTP响应头 if (client.find("\r\n\r\n")) { Serial.println("Found Header End. Start Parsing."); } // 利用ArduinoJson库解析心知天气响应信息 parseInfo(client); } else { Serial.println(" connection failed!"); } //断开客户端与服务器连接工作 client.stop(); } // 连接WiFi void connectWiFi(){ WiFi.begin(ssid, password); // 启动网络连接 Serial.print("Connecting to "); // 串口监视器输出网络连接信息 Serial.print(ssid); Serial.println(" ..."); // 告知用户NodeMCU正在尝试WiFi连接 int i = 0; // 这一段程序语句用于检查WiFi是否连接成功 while (WiFi.status() != WL_CONNECTED) { // WiFi.status()函数的返回值是由NodeMCU的WiFi连接状态所决定的。 delay(1000); // 如果WiFi连接成功则返回值为WL_CONNECTED Serial.print(i++); Serial.print(' '); // 此处通过While循环让NodeMCU每隔一秒钟检查一次WiFi.status()函数返回值 } // 同时NodeMCU将通过串口监视器输出连接时长读秒。 // 这个读秒是通过变量i每隔一秒自加1来实现的。 Serial.println(""); // WiFi连接成功后 Serial.println("Connection established!"); // NodeMCU将通过串口监视器输出"连接成功"信息。 Serial.print("IP address: "); // 同时还将输出NodeMCU的IP地址。这一功能是通过调用 Serial.println(WiFi.localIP()); // WiFi.localIP()函数来实现的。该函数的返回值即NodeMCU的IP地址。 } // 利用ArduinoJson库解析心知天气响应信息 void parseInfo(WiFiClient client){ 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(14) + 860; DynamicJsonDocument doc(capacity); deserializeJson(doc, client); JsonObject results_0 = doc["results"][0]; JsonArray results_0_daily = results_0["daily"]; JsonObject results_0_daily_0 = results_0_daily[0]; const char* results_0_daily_0_date = results_0_daily_0["date"]; const char* results_0_daily_0_text_day = results_0_daily_0["text_day"]; const char* results_0_daily_0_code_day = results_0_daily_0["code_day"]; const char* results_0_daily_0_text_night = results_0_daily_0["text_night"]; const char* results_0_daily_0_code_night = results_0_daily_0["code_night"]; const char* results_0_daily_0_high = results_0_daily_0["high"]; const char* results_0_daily_0_low = results_0_daily_0["low"]; const char* results_0_daily_0_rainfall = results_0_daily_0["rainfall"]; const char* results_0_daily_0_precip = results_0_daily_0["precip"]; const char* results_0_daily_0_wind_direction = results_0_daily_0["wind_direction"]; const char* results_0_daily_0_wind_direction_degree = results_0_daily_0["wind_direction_degree"]; const char* results_0_daily_0_wind_speed = results_0_daily_0["wind_speed"]; const char* results_0_daily_0_wind_scale = results_0_daily_0["wind_scale"]; const char* results_0_daily_0_humidity = results_0_daily_0["humidity"]; JsonObject results_0_daily_1 = results_0_daily[1]; const char* results_0_daily_1_date = results_0_daily_1["date"]; const char* results_0_daily_1_text_day = results_0_daily_1["text_day"]; const char* results_0_daily_1_code_day = results_0_daily_1["code_day"]; const char* results_0_daily_1_text_night = results_0_daily_1["text_night"]; const char* results_0_daily_1_code_night = results_0_daily_1["code_night"]; const char* results_0_daily_1_high = results_0_daily_1["high"]; const char* results_0_daily_1_low = results_0_daily_1["low"]; const char* results_0_daily_1_rainfall = results_0_daily_1["rainfall"]; const char* results_0_daily_1_precip = results_0_daily_1["precip"]; const char* results_0_daily_1_wind_direction = results_0_daily_1["wind_direction"]; const char* results_0_daily_1_wind_direction_degree = results_0_daily_1["wind_direction_degree"]; const char* results_0_daily_1_wind_speed = results_0_daily_1["wind_speed"]; const char* results_0_daily_1_wind_scale = results_0_daily_1["wind_scale"]; const char* results_0_daily_1_humidity = results_0_daily_1["humidity"]; JsonObject results_0_daily_2 = results_0_daily[2]; const char* results_0_daily_2_date = results_0_daily_2["date"]; const char* results_0_daily_2_text_day = results_0_daily_2["text_day"]; const char* results_0_daily_2_code_day = results_0_daily_2["code_day"]; const char* results_0_daily_2_text_night = results_0_daily_2["text_night"]; const char* results_0_daily_2_code_night = results_0_daily_2["code_night"]; const char* results_0_daily_2_high = results_0_daily_2["high"]; const char* results_0_daily_2_low = results_0_daily_2["low"]; const char* results_0_daily_2_rainfall = results_0_daily_2["rainfall"]; const char* results_0_daily_2_precip = results_0_daily_2["precip"]; const char* results_0_daily_2_wind_direction = results_0_daily_2["wind_direction"]; const char* results_0_daily_2_wind_direction_degree = results_0_daily_2["wind_direction_degree"]; const char* results_0_daily_2_wind_speed = results_0_daily_2["wind_speed"]; const char* results_0_daily_2_wind_scale = results_0_daily_2["wind_scale"]; const char* results_0_daily_2_humidity = results_0_daily_2["humidity"]; const char* results_0_last_update = results_0["last_update"]; // 从以上信息中摘选几个通过串口监视器显示 String results_0_daily_0_date_str = results_0_daily_0["date"].as<String>(); String results_0_daily_0_text_day_str = results_0_daily_0["text_day"].as<String>(); int results_0_daily_0_code_day_int = results_0_daily_0["code_day"].as<int>(); String results_0_daily_0_text_night_str = results_0_daily_0["text_night"].as<String>(); int results_0_daily_0_code_night_int = results_0_daily_0["code_night"].as<int>(); int results_0_daily_0_high_int = results_0_daily_0["high"].as<int>(); int results_0_daily_0_low_int = results_0_daily_0["low"].as<int>(); String results_0_last_update_str = results_0["last_update"].as<String>(); Serial.println(F("======Today Weahter =======")); Serial.print(F("DATE: ")); Serial.println(results_0_daily_0_date_str); Serial.print(F("Day Weather: ")); Serial.print(results_0_daily_0_text_day_str); Serial.print(F(" ")); Serial.println(results_0_daily_0_code_day_int); Serial.print(F("Night Weather: ")); Serial.print(results_0_daily_0_text_night_str); Serial.print(F(" ")); Serial.println(results_0_daily_0_code_night_int); Serial.print(F("High: ")); Serial.println(results_0_daily_0_high_int); Serial.print(F("LOW: ")); Serial.println(results_0_daily_0_low_int); Serial.print(F("Last Update: ")); Serial.println(results_0_last_update_str); Serial.println(F("==============================")); } |
示例3. 获取实时生活指数(穿衣,紫外线强度,洗车,旅游,感冒,运动)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
/********************************************************************** 项目名称/Project : 零基础入门学用物联网 程序名称/Program name : life_info 团队/Team : 太极创客团队 / Taichi-Maker (www.taichi-maker.com) 作者/Author : CYNO朔 日期/Date(YYYYMMDD) : 20200602 程序目的/Purpose : 通过心知天气(www.seniverse.com)免费服务获取生活指数信息。 ----------------------------------------------------------------------- 其它说明 / Other Description 心知天气API文档说明: https://www.seniverse.com/docs 本程序为太极创客团队制作的免费视频教程《零基础入门学用物联网 》中一部分。该教程系统的 向您讲述ESP8266的物联网应用相关的软件和硬件知识。以下是该教程目录页: http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/ ***********************************************************************/ #include <ArduinoJson.h> #include <ESP8266WiFi.h> const char* ssid = "taichimaker"; // 连接WiFi名(此处使用taichi-maker为示例) // 请将您需要连接的WiFi名填入引号中 const char* password = "12345678"; // 连接WiFi密码(此处使用12345678为示例) // 请将您需要连接的WiFi密码填入引号中 const char* host = "api.seniverse.com"; // 将要连接的服务器地址 const int httpPort = 80; // 将要连接的服务器端口 // 心知天气HTTP请求所需信息 String reqUserKey = "XXXXXXXXXXXXXXXXX"; // 私钥 String reqLocation = "beijing"; // 城市 String reqUnit = "c"; // 摄氏/华氏 void setup(){ Serial.begin(9600); Serial.println(""); // 连接WiFi connectWiFi(); } void loop(){ // 建立心知天气API当前天气请求资源地址 String reqRes = "/v3/life/suggestion.json?key=" + reqUserKey + + "&location=" + reqLocation + "&language=en"; // 向心知天气服务器服务器请求信息并对信息进行解析 httpRequest(reqRes); delay(3000); } // 向心知天气服务器服务器请求信息并对信息进行解析 void httpRequest(String reqRes){ WiFiClient client; // 建立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); Serial.println("Sending request: "); Serial.println(httpRequest); // 获取并显示服务器响应状态行 String status_response = client.readStringUntil('\n'); Serial.print("status_response: "); Serial.println(status_response); // 使用find跳过HTTP响应头 if (client.find("\r\n\r\n")) { Serial.println("Found Header End. Start Parsing."); } // 利用ArduinoJson库解析心知天气响应信息 parseInfo(client); } else { Serial.println(" connection failed!"); } //断开客户端与服务器连接工作 client.stop(); } // 连接WiFi void connectWiFi(){ WiFi.begin(ssid, password); // 启动网络连接 Serial.print("Connecting to "); // 串口监视器输出网络连接信息 Serial.print(ssid); Serial.println(" ..."); // 告知用户NodeMCU正在尝试WiFi连接 int i = 0; // 这一段程序语句用于检查WiFi是否连接成功 while (WiFi.status() != WL_CONNECTED) { // WiFi.status()函数的返回值是由NodeMCU的WiFi连接状态所决定的。 delay(1000); // 如果WiFi连接成功则返回值为WL_CONNECTED Serial.print(i++); Serial.print(' '); // 此处通过While循环让NodeMCU每隔一秒钟检查一次WiFi.status()函数返回值 } // 同时NodeMCU将通过串口监视器输出连接时长读秒。 // 这个读秒是通过变量i每隔一秒自加1来实现的。 Serial.println(""); // WiFi连接成功后 Serial.println("Connection established!"); // NodeMCU将通过串口监视器输出"连接成功"信息。 Serial.print("IP address: "); // 同时还将输出NodeMCU的IP地址。这一功能是通过调用 Serial.println(WiFi.localIP()); // WiFi.localIP()函数来实现的。该函数的返回值即NodeMCU的IP地址。 } // 利用ArduinoJson库解析心知天气响应信息 void parseInfo(WiFiClient client){ const size_t capacity = JSON_ARRAY_SIZE(1) + JSON_OBJECT_SIZE(1) + 6*JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(3) + 2*JSON_OBJECT_SIZE(6) + 400; DynamicJsonDocument doc(capacity); deserializeJson(doc, client); JsonObject results_0 = doc["results"][0]; JsonObject results_0_suggestion = results_0["suggestion"]; const char* results_0_suggestion_car_washing_brief = results_0_suggestion["car_washing"]["brief"]; const char* results_0_suggestion_car_washing_details = results_0_suggestion["car_washing"]["details"]; const char* results_0_suggestion_dressing_brief = results_0_suggestion["dressing"]["brief"]; const char* results_0_suggestion_dressing_details = results_0_suggestion["dressing"]["details"]; const char* results_0_suggestion_flu_brief = results_0_suggestion["flu"]["brief"]; const char* results_0_suggestion_flu_details = results_0_suggestion["flu"]["details"]; const char* results_0_suggestion_sport_brief = results_0_suggestion["sport"]["brief"]; const char* results_0_suggestion_sport_details = results_0_suggestion["sport"]["details"]; const char* results_0_suggestion_travel_brief = results_0_suggestion["travel"]["brief"]; const char* results_0_suggestion_travel_details = results_0_suggestion["travel"]["details"]; const char* results_0_suggestion_uv_brief = results_0_suggestion["uv"]["brief"]; const char* results_0_suggestion_uv_details = results_0_suggestion["uv"]["details"]; const char* results_0_last_update = results_0["last_update"]; // 通过串口监视器显示以上信息 String results_0_suggestion_car_washing_brief_str = results_0_suggestion["car_washing"]["brief"]; String results_0_suggestion_dressing_brief_str = results_0_suggestion["dressing"]["brief"]; String results_0_suggestion_flu_brief_str = results_0_suggestion["flu"]["brief"]; String results_0_suggestion_sport_brief_str = results_0_suggestion["sport"]["brief"]; String results_0_suggestion_travel_brief_str = results_0_suggestion["travel"]["brief"]; String results_0_suggestion_uv_brief_str = results_0_suggestion["uv"]["brief"]; const char* results_0_last_update_str = results_0["last_update"]; Serial.println(F("======Life Info=======")); Serial.print(F("Car Washing: ")); Serial.println(results_0_suggestion_car_washing_brief_str); Serial.print(F("Dressing: ")); Serial.println(results_0_suggestion_dressing_brief_str); Serial.print(F("Flu: ")); Serial.println(results_0_suggestion_flu_brief_str); Serial.print(F("Sport: ")); Serial.println(results_0_suggestion_sport_brief_str); Serial.print(F("Travel: ")); Serial.println(results_0_suggestion_travel_brief_str); Serial.print(F("UV: ")); Serial.println(results_0_suggestion_uv_brief_str); Serial.print(F("Last Update: ")); Serial.println(results_0_last_update_str); Serial.println(F("======================")); } |