Arduino ESP32通过心知天气获取城市三天的信息

// {//   "results": [
//     {//       "location": {//         "id": "C23NB62W20TF",
//         "name": "西雅图",
//         "country": "US",
//         "path": "西雅图,华盛顿州,美国",
//         "timezone": "America/Los_Angeles",
//         "timezone_offset": "-07:00"
//       },
//       "now": {//         "text": "多云", //天气现象文字
//         "code": "4", //天气现象代码
//         "temperature": "14", //温度,单位为c摄氏度或f华氏度
//         "feels_like": "14", //体感温度,单位为c摄氏度或f华氏度
//         "pressure": "1018", //气压,单位为mb百帕或in英寸
//         "humidity": "76", //相对湿度,0~100,单位为百分比
//         "visibility": "16.09", //能见度,单位为km公里或mi英里
//         "wind_direction": "西北", //风向文字
//         "wind_direction_degree": "340", //风向角度,范围0~360,0为正北,90为正东,180为正南,270为正西
//         "wind_speed": "8.05", //风速,单位为km/h公里每小时或mph英里每小时
//         "wind_scale": "2", //风力等级,请参考:http://baike.baidu.com/view/465076.htm
//         "clouds": "90", //云量,单位%,范围0~100,天空被云覆盖的百分比 #目前不支持中国城市#
//         "dew_point": "-12" //露点温度,请参考:http://baike.baidu.com/view/118348.htm #目前不支持中国城市#
//       },
//       "last_update": "2015-09-25T22:45:00-07:00" //数据更新时间(该城市的本地时间)
//     }
//   ]
// }#include <WiFi.h>
#include <ArduinoJson.h> //使用ArduinoJson库//wifi配置,以下变量均可通过蓝牙助手修改
char* ssid     = "*******";
char* password = "*******";
//天气API
const char* host = "api.seniverse.com";
//位置变量
String loaction ="******";
String SiYao ="*********";typedef struct weather_get
{const  char* Data;       //日期const  char* BTweather;  // 白天天气现象文字const  char* WSweather;  // 晚间天气现象文字const  char* wendu_H;    // 当天最高温度const  char* wendu_L;    // 当天最低温度const  char* FengXiang;  // 风向const  char* FengSu;     // 风速,单位km/h(当unit=c时)、mph(当unit=f时)const  char* FengLiDJ;   // 风力等级const  char* JiangSL;    //降水量,单位mmconst  char* ShiDu;      //相对湿度,0~100,单位为百分比
}Weather_get;void setup() {// SerialSerial.begin(115200);delay(10);// We start by connecting to a WiFi networkSerial.println();Serial.println();Serial.print("Connecting to WIFI");Serial.println(ssid);WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) {delay(1000);Serial.print(".");}Serial.println(""); //相当于换行Serial.println("WiFi connected Successful!");Serial.println("IP address: ");Serial.println(WiFi.localIP());
}void loop(){Serial.print("访问心知API");Serial.println(host);//port:所要连接的服务器端口号,允许使用int类型WiFiClient client;const int httpPort = 80;if (!client.connect(host, httpPort)) {Serial.println("connection failed");return;}  // We now create a URI for the requestString url = "/v3/weather/daily.json?key="+SiYao+"&location="+loaction+"&language=zh-Hans&unit=c&start=0&days=3";Serial.print("Requesting URL: ");Serial.println(url);// This will send the request to the serverclient.print(String("GET ") + url + " HTTP/1.1\r\n" +"Host: " + host + "\r\n" +"Connection: close\r\n\r\n");  delay(100);String weather_data;while (client.available()) {String line = client.readStringUntil('\r');weather_data += line;}//关闭连接client.stop();Serial.println();Serial.println("closing connection");    Serial.println();// 寻找 JSON 天气数据起始位置String json_weather_data;int jsonIndex;for (int i = 0; i < weather_data.length(); i++) {if (weather_data[i] == '{') {jsonIndex = i;break;}}// 获取天气数据json_weather_data = weather_data.substring(jsonIndex);//利用arduinoJson库解析心知返回的json天气数据//可以利用 https://arduinojson.org/v5/assistant/ Arduinojson助手生成相关json解析代码  很方便!!!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(12) + 700;DynamicJsonBuffer jsonBuffer(capacity);//获取城市名称 JsonObject& root = jsonBuffer.parseObject(json_weather_data);JsonObject& results_0 = root["results"][0];JsonObject& results_0_location = results_0["location"];const char* city = results_0_location["name"];//获取天气信息Weather_get day[3];JsonArray& results_0_daily = results_0["daily"];JsonObject& Day0 = results_0_daily[0];            //返回指定days天数的结果day[0].Data=Day0["date"];day[0].BTweather=Day0["text_day"];day[0].WSweather=Day0["text_night"];day[0].wendu_H=Day0["high"];day[0].wendu_L=Day0["low"];day[0].FengXiang=Day0["wind_direction"];day[0].FengSu=Day0["wind_speed"];day[0].FengLiDJ=Day0["wind_scale"];day[0].JiangSL=Day0["rainfall"];day[0].ShiDu=Day0["humidity"];JsonObject& Day1 = results_0_daily[1];            //返回指定days天数的结果day[1].Data=Day1["date"];day[1].BTweather=Day1["text_day"];day[1].WSweather=Day1["text_night"];day[1].wendu_H=Day1["high"];day[1].wendu_L=Day1["low"];day[1].FengXiang=Day1["wind_direction"];day[1].FengSu=Day1["wind_speed"];day[1].FengLiDJ=Day1["wind_scale"];day[1].JiangSL=Day1["rainfall"];day[1].ShiDu=Day1["humidity"];JsonObject& Day2 = results_0_daily[2];            //返回指定days天数的结果day[2].Data=Day2["date"];day[2].BTweather=Day2["text_day"];day[2].WSweather=Day2["text_night"];day[2].wendu_H=Day2["high"];day[2].wendu_L=Day2["low"];day[2].FengXiang=Day2["wind_direction"];day[2].FengSu=Day2["wind_speed"];day[2].FengLiDJ=Day2["wind_scale"];day[2].JiangSL=Day2["rainfall"];day[2].ShiDu=Day2["humidity"];if (!root.success()) {Serial.println("parseObject() failed");return;}Serial.println();Serial.print(city);Serial.print("今天天气:");Serial.println(day[0].Data);Serial.println(day[0].BTweather);Serial.println(day[0].wendu_H);Serial.println(day[0].wendu_L);Serial.println(day[0].FengXiang);Serial.println(day[0].FengSu);Serial.println(day[0].FengLiDJ);Serial.println(day[0].JiangSL);Serial.println(day[0].ShiDu);Serial.println();Serial.print(city);Serial.print("明天天气:");Serial.println(day[1].Data);Serial.println(day[1].BTweather);Serial.println(day[1].wendu_H);Serial.println(day[1].wendu_L);Serial.println(day[1].FengXiang);Serial.println(day[1].FengSu);Serial.println(day[1].FengLiDJ);Serial.println(day[1].JiangSL);Serial.println(day[1].ShiDu);Serial.println();Serial.print(city);Serial.print("后天天气:");Serial.println(day[2].Data);Serial.println(day[2].BTweather);Serial.println(day[2].wendu_H);Serial.println(day[2].wendu_L);Serial.println(day[2].FengXiang);Serial.println(day[2].FengSu);Serial.println(day[2].FengLiDJ);Serial.println(day[2].JiangSL);Serial.println(day[2].ShiDu);delay(3000);
}

Arduino ESP32通过心知天气获取城市三天的信息相关推荐

  1. Android中基于心知天气API获取天气信息

    Android中基于心知天气获取天气信息 JSON JSON简介 JSON对象 JSON数组 JSON解析 Android中获取天气 获取天气的流程 获取心知天气的API key 获取心知天气的API ...

  2. STM32使用ESP8266模块AT指令连接心知天气API获取天气信息

    由于之前使用STM32单片机来开发一些物联网的小项目,接触到了WIFI模块ESP8266,所以写下来记录一下.本文主要介绍的是STM32通过发送AT指令集来控制ESP8266 WIFI模块连接WiFi ...

  3. stm32-FreeRTOS-ESP8266-OneNET物联网远程开关,心知天气网络时间,开源代码电路原理图altium-pcb

    分享下自己基于OneNet物联网云平台的远程开关,可电脑 / 手机APP远程控制,亦可获取当前时间和近3日天气. 还有好多坑待填,开源仅作学习. 资源下载链接在文章末尾.stm32-FreeRTOS源 ...

  4. 利用Arduino Esp8266 心知天气API 获取天气预报信息(修改后可以DIY一个小型的桌面气象台)

    前期准备: 注册心知天气,获取API密钥  https://www.seniverse.com 生成API请求地址,北京今天和未来4天的预报请求地址如下: https://api.seniverse. ...

  5. ESP32学习之JSON,和接入心知天气

    注意:手机热点或者网络不能开5.0GHz频段和WIFI6,不然ESP32连不上 心知天气账号(免费版即可),网站:心知天气 - 高精度气象数据 - 天气数据API接口 - 行业气象解决方案 (seni ...

  6. 使用 Fiddler 调试 心知天气,stm32 esp8266获取天气api

    心知天气 - 免费用户的功能: 国内 370 个主要城市 天气实况,包括天气现象文字.代码和气温 3 项数据 未来 3 天天气预报,包括白天天气现象文字及代码.晚间天气现象文字及代码.当天最高温度和最 ...

  7. ESP8266使用AT指令获取时间和心知天气

    一.硬件:ESP8266,USB TO TTL模块,软件:串口调试助手 二.在心知官网注册账号:心知天气 - 高精度气象数据 - 天气数据API接口 - 行业气象解决方案 三.连接esp8266和us ...

  8. STM32使用CJSON获取心知天气

    文章目录 1.程序配置 2.新建json数据 3.读取json数据 4.解析心知天气 5.ESP01S获取数据 6.STM32获取数据 本文是接着上一篇文章的后续来写,上一篇写的太长了后面太累了就没写 ...

  9. 电脑获取服务器IP,ping nslookup获取心知天气的IP地址,windows cmd命令行进行DNS域名解析解析

    windows电脑,开始栏    - -   输入 " cmd "    - -    命令提示符 输入  ping api.seniverse.com  或者  nslookup ...

  10. ESP8266AT固件获取时间和连接心知天气

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.获取时间 二.连接心知天气 总结 前言 通过AT指令获取时间和连接心知天气: 提示:以下是本篇文章正文内容,下面案 ...

最新文章

  1. 软件项目技术方案_榆林化学公司项目工艺包关键技术创新方案审查顺利完成
  2. colab中的变量怎么读取_Fizyr Retinanet在Colab中进行目标检测
  3. response设置content-type
  4. C++数据类型和变量类型。
  5. linux shell oracle脚本_领导:如何用shell脚本统计Oracle数据库进程明细和存储过程信息...
  6. 《多元统计分析》学习笔记之聚类分析
  7. 关于vue中sync修饰符的用法
  8. Apache服务器 403 Forbidden的几种错误原因小结!
  9. php社交项目源代码,PHP交友聊天源码,社交网络网站源代码,带即时聊天,带聊天室功能,带原生APP源码...
  10. php input type属性,input标签是什么?input标签属性有哪些
  11. 在Excel中插入项目符号的基本方法
  12. Prolog编程求解图搜索问题
  13. 电路设计软件系列教程(四),Protel DXP电路设计软件之创建PCB文件
  14. 本地差分隐私 随机响应_本地化差分隐私:如何面对非可信的世界
  15. 【教学类-07-04】20221113《破译电话号码-加减法版+自制(PDF打印)》(大班主题《我要上小学》)
  16. webpack性能优化全方案
  17. 【18-业务开发-基础业务-商品模块-分类管理-前后端管理系统的启动-为分类管理表增加数据-Json插件的下载-返回具有层级目录、父子关系结构的数据】
  18. 语音识别芯片的基本原理和工作流程
  19. If I Die Young
  20. pat 1124 Raffle for Weibo Followers(20 分)

热门文章

  1. 国企直招,内推! 科陆电子--嵌入式工程师/C# 工程师
  2. 安卓手机软件性能测试,四款安卓公交查询软件基本性能测试
  3. 【论文翻译】Multi-modal Knowledge Graphs for Recommender Systems
  4. IE浏览器被2345网址导航劫持
  5. 期货市场技术分析读后感
  6. C++关键字protected的作用详解
  7. 第一天 Java基础入门【悟空教程】
  8. 【多校联赛】The Crime-solving Plan of Groundhog
  9. Android Retrofit Put请求
  10. RabbitMQ消息队列(九):Publisher的消息确认机制