HTTP是一个基于 TCP/IP 通信协议来传递数据的(HTML文件、图片文件、查询结果等),本文将使用NA111或者其他支持TCP/IP协议的网络联网模块(比如EC04系列、EC03系列、4G-05等),本文主要通过TCP客户端模式进行HTTP请求,有时也会使用HTTPC模式进行HTTPC请求(前提时HTTP服务器支持该模式请求报文)。首先需要找到可以请求的天气查询服务器,这里介绍两个免费接口,需要注册使用:丫丫天气:http://www.yytianqi.com/心知天气:https://www.seniverse.com/还有很多类似的API接口,他们在使用方式上差异不大。丫丫天气查询1.打开天气服务器网址http://www.yytianqi.com/点击右上方注册按钮,如图片所示:提供邮箱和手机号进行注册,如图所示:2.注册完成后登录,第一次注册赠送9天高级会员,可以查询更多的天气数据,在会员管理中查看用户密钥(key),此密钥在请求数据中作为用户有效性判断(判断会员等级,非会员服务器拒绝请求),因此必须注册使用,并使用邮箱激活账号;免费会员有请求限制比如心知天气的每分钟最多20次,丫丫天气的每小时30次,不同服务器限制不同需要通过平台查询请求限制。3.点击API介绍详细介绍了API的使用方式,通过GET方式请求:地址:api.yytianqi.com:80,URL:/接口名称?请求数据:city=城市ID&key=用户key组合成为请求数据:这里我采用城市ID的方式进行请求,点击丫丫天气城市ID编码列表:以查询“成都”城市编码为例,打开网站后使用“Ctrl+F”搜索成都,编码为:CH270101,如图所示:丫丫天气的API接口是基于HTTP1.0协议开发,因此串口服务器无法通过HTTP客户端模式实现天气请求,只能利用TCP客户端结合短连接实现;串口服务器配置为动态IP与随机端口,工作模式为TCP客户端,并使能短连接(非必要,建议使能),配置目标IP与端口(api.yytianqi.com:80),详细配置如下图所示:4.打开串口调试助手XCOM,发送GET请求包“GET http://api.yytianqi.com/observe?city=CH010100&key=ixxxxxxxxxxxxxxh HTTP/1.0\r\n\r\n”(\r\n\r\n指代两个换行符):心知天气查询1.心知天气与丫丫天气在账户认证上基本相同,但心知天气支持更安全的签名认证,首先注册账号获取密钥,如下图所示:登录后还需开通“天气服务”,如下图所示:2.在申请完成后系统会自动生成API密钥,如图所示:3.心知天气的请求分为两种方式:私钥认证https://api.seniverse.com/v3/weather/now.json?key=your_private_key&location=beijing&language=zh-Hans&unit=c签名认证方式https://api.seniverse.com/v3/weather/now.json? location=beijing&language=zh-Hans&unit=c&ts=1443079775&ttl=300&uid=your_public_key(1)私钥认证与丫丫天气基本相同,见请求包的key=your_private_key,替换为你的私钥,如图:心知天气也采用HTTP1.0协议,也不能使用串口服务器的HTTP客户端模式,串口服务器配置如下图所示:使用串口调试助手发用请求包:GET https://api.seniverse.com/v3/weather/now.json?key=x&location=chengdu&language=en&unit=clocation=chengdu(支持城市ID、拼音、IP、GPS、城市中文名);language=en(支持zh-Hans、en等);unit=c(单位,c和f);(2)签名认证“公钥 + 私钥” 验证方式更加安全。请求地址中只包含你的“公钥”以及用你的“私钥”制作的签名,因此不会在请求地址中泄露你的私钥。签名指的是通过 HMAC-SHA1,对请求参数加密后得到的签名字串进行身份验证,避免了将“私钥”明文包含在请求中而造成泄露。HMAC-SHA1在线加密网站:https://1024tools.com/hmac请求示例:GET https://api.seniverse.com/v3/weather/now.json?location=beijing&language=en&unit=c&ts=1652095247&ttl=86400&uid=PlhQcyak4-TF5G0UU&sig=58QAjUWFAMpl7374DUVIiplsPqw%3dlocation=beijing&language=en&unit=c不需要使用HMAC-SHA1进行加密,只需要对ts=1652095247&ttl=1800(非必要,不填默认为1800)&uid=PlhQcyak4-TF5G0UU参数进行加密,如下图所示:签名:BlEgDUcNlP3Yhn7QvuGSWS15wqc=,“=”在HTTP中不能直接使用,需要转移为%3d,转换后BlEgDUcNlP3Yhn7QvuGSWS15wqc%3d最终请求数据为:GET https://api.seniverse.com/v3/weather/now.json?location=beijing&language=en&unit=c&ts=1652682517&ttl=86400&uid=PlhQcyak4-TF5G0UU&sig=BlEgDUcNlP3Yhn7QvuGSWS15wqc%3d串口服务器配置与私钥相同,通过串口调试助手发送数据:通过编写MCGS串口数据解析脚本可以实现如下效果:
本文出自快速备案,转载时请注明出处及相应链接。