【NodeMCU实时天气时钟温湿度项目 5】获取关于城市天气实况和天气预报的JSON信息(心知天气版)

|        今天是第五专题内容,主要是介绍如何从心知天气官网,获取包含当前天气实况和未来 3 天天气预报的JSON数据信息。
        在学习获取及显示天气信息前,我们务必要对JSON数据格式有个深入的了解。

        如您需要了解其它专题的内容,请点击下面的链接。
        第一专题内容,请参考:连接点亮SPI-TFT屏幕和UI布局设计
        第二专题内容,请参考:WIFI模式设置及连接
        第三专题内容,请参考:连接SHT30传感器,获取并显示当前环境温湿度数据(I2C)
        第四专题内容,请参考:通过NTPClient库获取实时网络时间并显示在TFT屏幕上

一、什么是JSON?

        JSON,是JavaScript Object Notation单词首字母的缩写,是一种轻量级的数据交换格式。它以易于阅读和编写的文本格式来存储和表示数据,通常用于在不同的系统之间进行数据交换。JSON数据以键值对或名值对的形式出现,可以包含对象、数组、字符串、数字等基本数据类型。它经常在Web开发、API通信等领域被广泛使用。
        通过NodeMCU的WiFi模块,我们可以很容易地从【心知天气】网站获取气象信息,包括天气实况和天气预报等各类数据,这些天气数据是未经压缩的JSON格式数据。关于JSON格式数据,网上有大量文章对其作用、语法规则和应用场景进行详细介绍,请大家自行查询了解。比如,JSON 基本使用_json怎么用-CSDN博客。

二、天气实况数据

       1. 天气实况。获取指定城市的天气实况,付费用户可获取全部数据,免费用户只返回天气现象文字、天气现象代码和气温 3 项数据。数据更新频率,国内城市在 15 分钟左右,国际城市在 20 分钟左右。

        2. 接口地址

https://api.seniverse.com/v3/weather/now.json?key=your_api_key&location=beijing&language=zh-Hans&unit=c

        3. 请求参数说明

        4. 返回结果示例 (免费用户仅返回 ”now" 的前三项数值)

{"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" //数据更新时间(该城市的本地时间)}]
}

三、未来15天逐日天气预报

        1. 天气预报。获取指定城市未来最多 15 天每天的白天和夜间预报。一般每天更新 3-4 次。付费用户可获取全部数据,免费用户只返回 3 天天气预报。降水预报目前只支持国内城市。

        2. 接口地址及示例:北京今天和未来 4 天的预报。

https://api.seniverse.com/v3/weather/daily.json?key=your_api_key&location=beijing&language=zh-Hans&unit=c&start=0&days=5

        3. 请求参数说明

        4. 返回结果示例

{"results": [{"location": {"id": "WX4FBXXFKE4F","name": "北京","country": "CN","path": "北京,北京,中国","timezone": "Asia/Shanghai","timezone_offset": "+08:00"},"daily": [{                          //返回指定days天数的结果"date": "2015-09-20",              //日期(该城市的本地时间)"text_day": "多云",                //白天天气现象文字"code_day": "4",                  //白天天气现象代码"text_night": "晴",               //晚间天气现象文字"code_night": "0",                //晚间天气现象代码"high": "26",                     //当天最高温度"low": "17",                      //当天最低温度"precip": "0",                    //降水概率,范围0~1,单位百分比(目前仅支持国外城市)"wind_direction": "",             //风向文字"wind_direction_degree": "255",   //风向角度,范围0~360"wind_speed": "9.66",             //风速,单位km/h(当unit=c时)、mph(当unit=f时)"wind_scale": "",                 //风力等级"rainfall": "0.0",                //降水量,单位mm"humidity": "76"                  //相对湿度,0~100,单位为百分比}, {"date": "2015-09-21","text_day": "晴","code_day": "0","text_night": "晴","code_night": "0","high": "27","low": "17","precip": "0","wind_direction": "","wind_direction_degree": "157","wind_speed": "17.7","wind_scale": "3","rainfall": "0.0","humidity": "76"}, {...                               //更多返回结果}],"last_update": "2015-09-20T18:00:00+08:00" //数据更新时间(该城市的本地时间)}]
}

四、编程实现获取天气实况和未来 3 天天气预报信息

        【编程环境】VSCode + PlatformIO,Platforms:Espressif 8266,Framework: Arduino
        以下是具体实现代码,可以复制到 main.cpp 中,修改个别信息后,直接编译上传即可。需要修改的项目,在第五部分详细说明。

#include <ESP8266WiFi.h>const char* host = "api.seniverse.com"; // 心知天气 API 接口地址
const int httpPort = 80;              // http端口80// 设置wifi接入信息(请根据您的WiFi信息进行修改)
const char* ssid = "xcb940";
const char* password = "87589940abc";void wifiClientRequest();void setup() {//初始化串口设置Serial.begin(9600);Serial.println("");//设置ESP8266工作模式为无线终端模式WiFi.mode(WIFI_STA);//开始连接wifiWiFi.begin(ssid, password);//等待WiFi连接,连接成功打印IPwhile (WiFi.status() != WL_CONNECTED) {delay(1000);Serial.print(".");}Serial.println("");Serial.println("WiFi Connected!");wifiClientRequest();  
}void loop(){}// 向服务器发送HTTP请求,在串口监视器打印 HTTP请示内容,HTTP响应头信息和请求的数据,包括天气实况和未来3天的天气预报(免费用户只返回3天的)
void wifiClientRequest(){// 建立WiFi客户端对象,对象名称clientWiFiClient client;    //以下代码,请求返回天气实况信息// 建立字符串,用于HTTP请求String httpRequest =  String("GET /v3/weather/now.json?key=your_api_key&location=beijing&language=zh-Hans&unit=c") + " HTTP/1.1\r\n" +"Host: " + host + "\r\n" +"Connection: close\r\n" +"\r\n";// 通过串口输出连接服务器名称以便查阅连接服务器的网址                      Serial.print("Connecting to "); Serial.print(host); // 连接网络服务器,请求并返回信息if (client.connect(host, httpPort)){ Serial.println(" Success!");        // 连接成功后串口输出“Success”信息    client.print(httpRequest);          // 向服务器发送HTTP请求Serial.println("Sending request: ");// 通过串口输出HTTP请求信息内容以便查阅Serial.println(httpRequest);     // 通过串口输出网络服务器响应信息Serial.println("Web Server Response:");        while (client.connected() || client.available()){ if (client.available()){String line = client.readStringUntil('\n');Serial.println(line);}}  client.stop();                      // 断开与服务器的连接Serial.print("Disconnected from "); // 并且通过串口输出断开连接信息Serial.print(host);} else{    // 如果连接不成功则通过串口输出“连接失败”信息Serial.println(" connection failed!");client.stop();}  Serial.println("");Serial.println("");//以下代码,请求返回未来3天天气预报(免费用户只返回3天的数据)// 建立字符串,用于HTTP请求 httpRequest =  String("GET /v3/weather/daily.json?key=your_api_key&location=beijing&language=zh-Hans&unit=c&start=0&days=3") + " HTTP/1.1\r\n" +"Host: " + host + "\r\n" +"Connection: close\r\n" +"\r\n";// 通过串口输出连接服务器名称以便查阅连接服务器的网址                      Serial.print("Connecting to "); Serial.print(host); // 连接网络服务器,if (client.connect(host, httpPort)){ Serial.println(" Success!");        // 连接成功后串口输出“Success”信息client.print(httpRequest);          // 向服务器发送HTTP请求Serial.println("Sending request: ");// 通过串口输出HTTP请求信息内容以便查阅Serial.println(httpRequest);     // 通过串口输出网络服务器响应信息Serial.println("Web Server Response:");        while (client.connected() || client.available()){ if (client.available()){String line = client.readStringUntil('\n');Serial.println(line);}}   client.stop();                      // 断开与服务器的连接Serial.print("Disconnected from "); // 并且通过串口输出断开连接信息Serial.print(host);} else{    // 如果连接不成功则通过串口输出“连接失败”信息Serial.println(" connection failed!");client.stop();}  
}

五、特别提醒需要修改的部分信息

        (1)修改WiFi连接信息

// 设置wifi接入信息(请根据您的WiFi信息进行修改)
const char* ssid = "xcb940";
const char* password = "87589940abc";

        (2)修改第 43 行http请求:“key = your_api_key”  ------->> 修改为您自己的密钥, “location = beijing”       ------->> 修改为您所希望的所在地区

//第43行
String httpRequest =  String("GET /v3/weather/now.json?key=your_api_key&location=beijing&language=zh-Hans&unit=c") + " HTTP/1.1\r\n" +

        (3)修改第 82行http请求:“key = your_api_key”------->> 修改为您自己的密钥, “location = beijing” ------->> 修改为您所希望的所在地区

//第 82行 
httpRequest =  String("GET /v3/weather/daily.json?key=your_api_keyu&location=beijing&language=zh-Hans&unit=c&start=0&days=3") + " HTTP/1.1\r\n" +

六、运行结果分析

       程序编译上传成功执行后,如果在串口监视器找到以下包含天气信息的两个JSON数据,一个是包含天气实况的信息,另一个是包含未来 3 天天气预报的信息。那么,恭喜您:现在可以正常从心知天气官网获取天气数据信息了。
        项目源代码下载:
        百度网盘:https://pan.baidu.com/s/11ggPQdj9rzYP3Av97Z85Kg?pwd=aira,提取码:aira

//以下返回的天气实况{"results":[{"location":{"id":"WX4FBXXFKE4F","name":"北京","country":"CN","path":"北京,北京,中国","timezone":"Asia/Shanghai","timezone_offset":"+08:00"},"now":{"text":"晴","code":"0","temperature":"29"},"last_update":"2024-05-08T15:44:15+08:00"}]}//以下返回的是未来 3 天的天气预报
{"results":[{"location":{"id":"WX4FBXXFKE4F","name":"北京","country":"CN","path":"北京,北京,中国","timezone":"Asia/Shanghai","timezone_offset":"+08:00"},"daily":[{"date":"2024-05-08","text_day":"晴","code_day":"0","text_night":"晴","code_night":"1","high":"30","low":"14","rainfall":"0.00","precip":"0.00","wind_direction":"西南","wind_direction_degree":"225","wind_speed":"23.4","wind_scale":"4","humidity":"56"},{"date":"2024-05-09","text_day":"晴","code_day":"0","text_night":"多云","code_night":"4","high":"30","low":"16","rainfall":"0.00","precip":"0.00","wind_direction":" 
南","wind_direction_degree":"180","wind_speed":"8.4","wind_scale":"2","humidity":"48"},{"date":"2024-05-10","text_day":"多云","code_day":"4","text_night":"多云","code_night":"4","high":"29","low":"17","rainfall":"0.00","precip":"0.00","wind_direction":"西南","wind_direction_degree":"225","wind_speed":"3.0","wind_scale":"1","humidity":"71"}],"last_update":"2024-05-07T08:00:00+08:00"}]}

        下一个专题,我们将解析从心知天气官网获取到的JSON数据,并把它们显示到 TFT 液晶显示屏上。敬请关注。

        参考文档
        1. JSON 基本使用_json怎么用-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/322089.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手撕多线程

用一个双线程轮流打印1-100 // 定义一个类&#xff0c;用于交替打印奇偶数 public class AlternatePrinting {// 当前待打印的数字&#xff0c;初始为1private int currentNumber 1;// 用作线程间同步的锁对象private final Object lock new Object();// 程序入口public sta…

【如此简单!数据库入门系列】之无序不代表混乱 -- 堆文件

文章目录 前言堆文件链表实现页目录实现总结系列文章 前言 还记得上次遗留的问题吗&#xff1f; 以什么组织方式将数据保存在磁盘中&#xff1f; 今天我们接着讨论这个问题。 首先想一个问题&#xff1a;有一天&#xff0c;你开着自己心爱的大型SUV去超市购物。在停车场入口看…

代码随想录Day 41|Leetcode|Python|198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III

198.打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个…

linux上go项目打包与部署

1.第一步把项目打包 1.确保本地goland的操作系统为linux go env找到GOOS如果为window就修改为Linux 修改命令为 go env -w GOOSlinux2.打包 在项目根目录下输入 go build main.go然后项目根目录下会出现一个mian的二进制文件 3.上传包 将 main 程序包放到服务的目录下&…

python与java用途区别有哪些

区别&#xff1a; 1.Python比Java简单&#xff0c;学习成本低&#xff0c;开发效率高。 2.Java运行效率高于Python&#xff0c;尤其是纯Python开发的程序&#xff0c;效率极低。 3.Java相关资料多&#xff0c;尤其是中文资料。 4.Java版本比较稳定&#xff0c;Python2和3不…

全双工音频对讲模块-支持空中升级、多级无线中继

SA618F30是一款高集成的大功率全双工无线音频模块&#xff0c;发射功率高达32dBm。该音频模块简化接口&#xff0c;只需外接音频功放或麦克风即可作为一个小型对讲机&#xff0c;方便快捷嵌入到各类手持设备中。支持多级无线中继&#xff0c;支持OTA空中升级。 SA618F30配备1W…

Flutter笔记:Widgets Easier组件库(11)- 使用提示吐丝(Tip Toasts)

Flutter笔记 Widgets Easier组件库&#xff08;11&#xff09;使用提示吐丝 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this …

LearnOpenGL(九)之材质

一、材质 在现实世界里&#xff0c;每个物体会对光产生不同的反应。比如&#xff0c;钢制物体看起来通常会比陶土花瓶更闪闪发光&#xff0c;一个木头箱子也不会与一个钢制箱子反射同样程度的光。在opengl中&#xff0c;我们可以针对每种表面定义不同的材质(Material)属性来模…

电子商务对应的职业有哪些?10年互联网人透底行业秘密!

电子商务对应的职业有哪些&#xff1f;10年互联网人透底行业秘密&#xff01; 事实说话&#xff0c;实事求是&#xff0c;不要再把美颜滤镜下的市场&#xff0c;传给新人小伙伴了&#xff01; 大家好&#xff0c;我是微三云胡佳东&#xff0c;一家软件公司负责人&#xff01; …

五一 作业

#include <iostream>using namespace std; class Num { private:int a; public:Num() {}Num(int a):a(a){}//设置a的值void set(int a){this->aa;}//1-a的和void Sum(){if(a<1){cout<<"a<1"<<endl;return;}int sum0;for(int i1;i<a;i)…

十分钟掌握Java集合之List接口

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

风格迁移——CAP-VSTNet训练自己数据集并推理测试(详细图文教程)

目录 一、CAP-VSTNet二、源码包准备三、环境准备四、数据集准备4.1 源码包中数据集4.2 动漫风格数据集4.3 MS_COCO数据集 五、训练5.1 训练配置参数修改5.2 开始训练5.2.1 训练真实感模型5.2.2 训练艺术感感模型 5.3 训练过程5.4 模型输出保存 六、测试6.1 单帧图片测试6.1.1 测…

Leetcode—163. 缺失的区间【简单】Plus

2024每日刷题&#xff08;126&#xff09; Leetcode—163. 缺失的区间 实现代码 class Solution { public:vector<vector<int>> findMissingRanges(vector<int>& nums, int lower, int upper) {int n nums.size();vector<vector<int>> an…

数字工厂管理系统如何实现生产过程透明化

随着科技的飞速发展&#xff0c;数字化转型已成为制造业不可逆转的趋势。数字工厂管理系统作为实现生产自动化、智能化的重要工具&#xff0c;其在提升生产效率、降低运营成本、优化资源配置等方面的作用日益凸显。其中&#xff0c;实现生产过程的透明化是数字工厂管理系统的重…

HTML Audio标签src使用base64字符

源码&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>Audio src base64</title> </head> <body><audio controls><source src"data:audio/mp3;base64,//OIxAAAAAAAAAA…

嵌入式linux学习第三天汇编语言点灯

嵌入式linux学习第三天汇编语言点灯 今天学习如何在linux板子上点灯。 I.MX6U GPIO 详解 我们发现I.MX6U GPIO是分为两类的&#xff0c;&#xff1a;SNVS 域的和通用的。在讨论i.MX6U或类似的复杂微处理器时&#xff0c;了解其GPIO&#xff08;通用输入输出&#xff09;引脚…

IoTDB 入门教程 基础篇③——基于Linux系统快速安装启动和上手

文章目录 一、前文二、下载三、解压四、上传五、启动六、执行七、停止八、参考 一、前文 IoTDB入门教程——导读 二、下载 下载二进制可运行程序&#xff1a;https://dlcdn.apache.org/iotdb/1.3.1/apache-iotdb-1.3.1-all-bin.zip 历史版本下载&#xff1a;https://archive.…

【软考高项】三十六、资源管理6个过程

一、规划资源管理 1、定义、作用 定义&#xff1a;定义如何估算、获取、管理和利用团队以及实物资源的过程作用&#xff1a;根据项目类型和复杂程度确定适用于项目资源的管理方法和管理程度 2、输入 项目管理计划 质量管理计划、范围基准项目章程 项目文件 需求文件…

ComStar系统架构介绍

中国外汇交易中心为适应市场需要&#xff0c;开发推出了ComStar外汇资金交易管理系统&#xff0c;该系统能够快速响应市场变化及监管机构的新要求&#xff0c;通过与交易中心银行间市场的外汇交易系统无缝连接&#xff0c;为市场成员提供了更为高效、便利、安全稳定的外汇资金业…

项目管理-项目绩效域2/2

项目管理&#xff1a;每天进步一点点~ 活到老&#xff0c;学到老 ヾ(◍∇◍)&#xff89;&#xff9e; 何时学习都不晚&#xff0c;加油 八大绩效域包括&#xff1a;“团干部 策划开公交” 团队、干系人、不确定性、测试、规划、开发方法与生命周期、项目工作、交付。 上节…