Arduino ESP32通过心知天气获取城市三天的信息
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通过心知天气获取城市三天的信息相关推荐
- Android中基于心知天气API获取天气信息
Android中基于心知天气获取天气信息 JSON JSON简介 JSON对象 JSON数组 JSON解析 Android中获取天气 获取天气的流程 获取心知天气的API key 获取心知天气的API ...
- STM32使用ESP8266模块AT指令连接心知天气API获取天气信息
由于之前使用STM32单片机来开发一些物联网的小项目,接触到了WIFI模块ESP8266,所以写下来记录一下.本文主要介绍的是STM32通过发送AT指令集来控制ESP8266 WIFI模块连接WiFi ...
- stm32-FreeRTOS-ESP8266-OneNET物联网远程开关,心知天气网络时间,开源代码电路原理图altium-pcb
分享下自己基于OneNet物联网云平台的远程开关,可电脑 / 手机APP远程控制,亦可获取当前时间和近3日天气. 还有好多坑待填,开源仅作学习. 资源下载链接在文章末尾.stm32-FreeRTOS源 ...
- 利用Arduino Esp8266 心知天气API 获取天气预报信息(修改后可以DIY一个小型的桌面气象台)
前期准备: 注册心知天气,获取API密钥 https://www.seniverse.com 生成API请求地址,北京今天和未来4天的预报请求地址如下: https://api.seniverse. ...
- ESP32学习之JSON,和接入心知天气
注意:手机热点或者网络不能开5.0GHz频段和WIFI6,不然ESP32连不上 心知天气账号(免费版即可),网站:心知天气 - 高精度气象数据 - 天气数据API接口 - 行业气象解决方案 (seni ...
- 使用 Fiddler 调试 心知天气,stm32 esp8266获取天气api
心知天气 - 免费用户的功能: 国内 370 个主要城市 天气实况,包括天气现象文字.代码和气温 3 项数据 未来 3 天天气预报,包括白天天气现象文字及代码.晚间天气现象文字及代码.当天最高温度和最 ...
- ESP8266使用AT指令获取时间和心知天气
一.硬件:ESP8266,USB TO TTL模块,软件:串口调试助手 二.在心知官网注册账号:心知天气 - 高精度气象数据 - 天气数据API接口 - 行业气象解决方案 三.连接esp8266和us ...
- STM32使用CJSON获取心知天气
文章目录 1.程序配置 2.新建json数据 3.读取json数据 4.解析心知天气 5.ESP01S获取数据 6.STM32获取数据 本文是接着上一篇文章的后续来写,上一篇写的太长了后面太累了就没写 ...
- 电脑获取服务器IP,ping nslookup获取心知天气的IP地址,windows cmd命令行进行DNS域名解析解析
windows电脑,开始栏 - - 输入 " cmd " - - 命令提示符 输入 ping api.seniverse.com 或者 nslookup ...
- ESP8266AT固件获取时间和连接心知天气
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.获取时间 二.连接心知天气 总结 前言 通过AT指令获取时间和连接心知天气: 提示:以下是本篇文章正文内容,下面案 ...
最新文章
- 软件项目技术方案_榆林化学公司项目工艺包关键技术创新方案审查顺利完成
- colab中的变量怎么读取_Fizyr Retinanet在Colab中进行目标检测
- response设置content-type
- C++数据类型和变量类型。
- linux shell oracle脚本_领导:如何用shell脚本统计Oracle数据库进程明细和存储过程信息...
- 《多元统计分析》学习笔记之聚类分析
- 关于vue中sync修饰符的用法
- Apache服务器 403 Forbidden的几种错误原因小结!
- php社交项目源代码,PHP交友聊天源码,社交网络网站源代码,带即时聊天,带聊天室功能,带原生APP源码...
- php input type属性,input标签是什么?input标签属性有哪些
- 在Excel中插入项目符号的基本方法
- Prolog编程求解图搜索问题
- 电路设计软件系列教程(四),Protel DXP电路设计软件之创建PCB文件
- 本地差分隐私 随机响应_本地化差分隐私:如何面对非可信的世界
- 【教学类-07-04】20221113《破译电话号码-加减法版+自制(PDF打印)》(大班主题《我要上小学》)
- webpack性能优化全方案
- 【18-业务开发-基础业务-商品模块-分类管理-前后端管理系统的启动-为分类管理表增加数据-Json插件的下载-返回具有层级目录、父子关系结构的数据】
- 语音识别芯片的基本原理和工作流程
- If I Die Young
- pat 1124 Raffle for Weibo Followers(20 分)
热门文章
- 国企直招,内推! 科陆电子--嵌入式工程师/C# 工程师
- 安卓手机软件性能测试,四款安卓公交查询软件基本性能测试
- 【论文翻译】Multi-modal Knowledge Graphs for Recommender Systems
- IE浏览器被2345网址导航劫持
- 期货市场技术分析读后感
- C++关键字protected的作用详解
- 第一天 Java基础入门【悟空教程】
- 【多校联赛】The Crime-solving Plan of Groundhog
- Android Retrofit Put请求
- RabbitMQ消息队列(九):Publisher的消息确认机制