搜索
bottom↓
回复: 5

基于8266实现无线获取天气预报

[复制链接]

出0入234汤圆

发表于 2022-5-11 15:20:52 | 显示全部楼层 |阅读模式
以下文章来源于:公众号:开源电子网,读取更多技术文章,请扫码关注
讨论发帖图.png



基于8266实现无线获取天气预报


       使用ESP8266或者其他网络模块获取网络数据(天气,时间等),还是挺简单的,下面我们两个部分来讲解无线以及有线网络如何获取天气预报信息。
     01. 查找目标服务器

       首先找到一个服务器,该服务器具备获取天气预报等相关接口,例如:
       心知天气:https://www.seniverse.com/login
       丫丫天气:http://www.yytianqi.com/
       等服务器,这里我们就以丫丫天气为例来制作本次的实验。

     02. 配置服务器
      打开丫丫天气服务器网页,该网页地址为http://www.yytianqi.com/,打开之后点击右上角注册账号,如下图所示:

1.png



       点击注册之后,我们必须填写邮箱,密码以及手机号码相关信息,如下图所示:

2.png


       注册完毕之后,登录账号,如下图所示:

3.png



       上图中的key密钥是我们所需要的,我们先把密钥拷贝到记事本中。

     03. 丫丫天气服务器相关接口信息

       打开上方的API介绍我们就知道如何获取服务器的相关信息了,如下图所示:


4.png


       上图中,API通用格式http://api.yytianqi.com/接口名称?city=城市ID&key=用户key就是我们使用无线或者有线网络所发送的数据包,而这个数据包的接口名称是下方的字符串,如下图所示:

5.png



        API通用格式的城市是根据该页面下方的图来获取,每一个城市都一样的ID,如下图所示:


6.png


      最后我们讲解一下该服务器的请求模式以及返回结果,如下图所示:

7.png


       从上图可知:我们可以请求三种模式,第一种使用程序的ID获取,第二种使用城市的IP获取,第三种是获取城市的经纬度信息。本次的实验我们使用第一种获取方式。
       上图的下面的内容就是服务器返回的结果,所以我们的代码必须移植JSON包来解析,根据返回的字符串来获取数据包的信息。

04. ESP8266配置TCPClient客户端流程

        ESP8266配置TCPClient流程如下图所示:

8.png



       上述就是MCU发送到ESP8266的AT指令,这里我们无需过多的讲解,下面我们讲解如何使用串口发送指令或者数据到ESP8266相关函数:
       TCPClient配置源码编写:

9.png



       上述的源码主要配置ESP8266为TCPClient客户端以及连接WIFI,最后开启透传模式,注意:我们连接的服务器地址为api.yytianqi.com,而端口号为80。
       检测应答函数编写:

10.png



       上的源码就是检查发送ESP8266指令是否成功,这里我们使用串口3发送。
       发送指令函数编写:

11.png


       上述函数是发送ESP8266指令函数,如果返回“OK“,则发送成功。
       发送数据函数的编写:

13.png



       上述的源码是发送数据的函数,我们可以定时发送HTTPS数据包到丫丫天气服务器中获取相关的信息。

05. 网络调式助手模拟实验


       首先在百度搜索“域名解析”,我们把api.yytianqi.com域名解析成IP地址,如下图所示:

14.png



      打开网络调式助手以TCPClient方式连接服务器,如下图所示:

16.png



       根据上图所示,我们发送给HTTPGET请求,该数据包为GEThttp://api.yytianqi.com/observe?city=CH010100&key=xxx
       注意:xxx为平台注册的密钥。点击发送该数据包就获取到相应的信息,如下图所示:


17.png


      根据上图的返回信息,我们可以对比官方提供的返回结果数据包对比,如下所示:
  1. <font size="2">{
  2. "code":1,
  3. "msg":"Sucess",
  4. "counts":2362, //访问的剩余次数。
  5. "data":{
  6. "cityId":"CH010100", //城市id
  7. "cityName":"北京", //城市名称
  8. "lastUpdate":"2016-03-0917:10:00", //实况更新时间
  9. "tq":"多云", //天气现象
  10. "numtq":"01", //天气现象编码
  11. "qw":"5.0", //当前气温
  12. "fl":"微风", //当前风力
  13. "numfl":"0", //当前风力编码
  14. "fx":"无持续风向", //当前风向
  15. "numfx":"0", //当前风向编码
  16. "sd":"10.0" //相对湿度,直接在此数值后添加%即可
  17. }
  18. }</font>
复制代码
      根据上述的源码和上图对比,我们就知道各个字符串代表什么内容。
      在我们编写之前,我们必须移植cjSON库,我们可以调用这个库提供的函数获取数据包的信息,如下所示:
      定义一个接收数据的结构体:

18.png


      根据字符串解析数据包的内容:

19.png


      此函数的第一个形参是接收丫丫天气服务器的数据包,而第二个形参表示我们存储数据包解析的内容,比如我们调用函数:
numtq=cJSON_GetObjectItem(data,"numtq")解析数据包的"numtq"字符串的内容,numtq变量就会保存天气现象的编码的数据,其他类似操作。

      对数据包解析的内容存储在结构体:
20.png


      注意事项:发送一次HTTPGET请求时,服务器返回相应的内容并断开连接,所以我们不断请求获取必须重新连接并发送数据。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2022-5-11 19:45:33 | 显示全部楼层
标记一下,说不定那天用上..多谢

出0入0汤圆

发表于 2022-5-11 20:03:54 | 显示全部楼层
学习一下

出0入0汤圆

发表于 2022-5-11 21:19:18 来自手机 | 显示全部楼层
学习一下     

出0入36汤圆

发表于 2022-5-11 21:21:34 | 显示全部楼层
原子为啥不做NB IOT模组呢?

出0入4汤圆

发表于 2022-5-11 23:24:26 | 显示全部楼层
请教一下,是否可以按json格式,自己写个函数去搜索关键字,并提取信息,不要移植现成的cjson?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 03:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表