基于API技术的嵌入式天气预报设计
刘孝赵;王成
【摘 要】在现实生活中,天气预报对人们的生活非常重要,很多人一天的计划和行动都会根据天气预报进行决定.文章的设计基于将STM32 F103微控制器与天气数据API互连的设备,经过单片机处理把天气信息应用在各种显示设备,既节省了传感器硬件资源,又能实时播报各个区域的天气预报,这种设备移动便携,可以安放在不同场景.
【期刊名称】《无线互联科技》
【年(卷),期】2018(015)023
【总页数】3页(P126-127,132)
【关键词】天气预报;API;单片机;数据
【作 者】刘孝赵;王成
【作者单位】苏州经贸职业技术学院 机电与信息技术学院,江苏 苏州 215000;苏州经贸职业技术学院 机电与信息技术学院,江苏 苏州 215000
【正文语种】中 文
传统的气象显示系统主要由温度、湿度等传感器采集数据,再通过接收模块将采集到的数据发送给单片机。这样各传感器在焊接时可能会有不同程度的损坏,有时候可能某个引脚接触不良,调试时就会出现各种各样的问题,而且不易查。本设计在硬件上省去了各传感器,通过WiFi模块连接路由器或手机上的热点,利用JSONP的方法跨域获取天气数据。利用专业的商业气象数据网站心知天气,此网站免费提供API接口,不仅稳定还实时更新,可以达到每小时400次刷新,能提供国内200多个城市的天气实况,6项生活指数,预测未来3天的天气,使用者也可以随时切换城市,不受地域限制。
1 天气API介绍
在网上有很多天气API,本系统使用的是商业气象网站心知天气API。此天气API是面向开发者,可以提供丰富稳定的天气数据服务。通过心知天气API,可以轻松地把心知天气的数据
整合进手机应用、桌面应用、网站,甚至嵌入式操作系统里。心知天气提供了全球多达2.4万个城市的天气数据。而且它还可以支持多达13种语言。心知天气API不仅可以返回天气的数据,还可以对气象灾害进行预警,查看当前空气质量的实况,逐小时潮汐等数据[1]。
每个API里面会设有很多参数。例如location后面是城市名称或者城市代码,language后面是返回数据的语言种类,unit后边为温度单位,c代表的是摄氏度。
当我们请求API时,服务器将以jason的形式返回天气数据。
"results": [{ “location”: { “id”:“C23NB62W20TF”, “name”: “西雅图”, “country”:“US”, “timezone”: “America/Los_Angeles”,“timezone_offset”: “-07:00” },
这个是返回的一部分jason数据。id后面代表的是城市ID,name后面代表的是城市名称,country后面代表的是城市所在的国家。
2 系统设计
2.1 系统结构
本设计的整个系统由STM32F103单片机、ESP8226 WiFi模块和显示屏幕组成。同样的也需要一个能够连接互联网的WiFi路由设备。STM32F103的MCU通过串口连接到ESP8226 WiFi模块,显示屏通过SPI协议进行通信,ESP8226 WiFi模块通过Internet与天气服务器通信。整体的结构如图1所示。STM32 F103首先通过串口向ESP8226 WiFi模块发送命令,允许ESP8226 WiFi模块连接到Internet,然后,通过请求API数据,获得天气服务器上的天气数据,最后通过解析获得天气数据,把天气信息显示在液晶显示屏上[2]。
图1 整体框图
2.2 WiFi电路设计
ESP8226 WiFi模块的原理如图2所示。模块可以为其他设备联网,也可以自己单独作为控制器,因为它接受标准的联网协议。在作为一个WiFi模块时,既能单独存在,也能嵌入其他设备当中。内部包含了ROM和SRAM存储寄存器,MCU可以通过不同的接口访问寄存器,当搭载在其他主机中运行时,其内部的高速存储寄存器能够在减少内存方面作出很大的贡献,提高系统整体的性能。ESP8266在承担适配器的任务时,能通过SPI接口或IIC接口将其加入其他微控制器中,而且连接方法很简单。该模块强大的存储和处理能力体现在通过GPIO端
口集成传感器和其他设备的能力,以最大限度地减少开发和运营过程中的资源,整个模块在设计上以最低的价格发挥了最优的实用性[3]。
图2 WiFi模块原理
2.3 显示电路设计
本设计采用液晶屏作为显示模块,这是一款通用式电阻式触摸屏,LCD模块外加玻璃钢化屏,外部排针是黄全铜镀金,不仅美观还耐用。采用ILI9341驱动IIC,可以与CPU接口直接连接。这里所用的液晶屏是16位并口驱动模式,其中利用DB1至DB8和DB10至DB17这16个引脚,让它们与MCU的D0至D15口连接,实现液晶屏与开发板的通信。需要特别指出的是这个液晶屏模块采用双电源来供电,主电源和背光供电引脚都需要接上才能正常显示。
3 系统软件设计
3.1 主程序设计
系统软件由3部分组成:天气预报、客户端和天气服务器,天气预报总结了客户需求的基本
数据。其中天气预报结论提供客户需求的基础数据,客户端的设计重点是地图浏览,以及把用户访问请求(漫游、放大、缩小等)发送给服务器,心知天气服务器则负责处理用户的访问请求。
软件在设计的过程中主要通过串口给WiFi模块发送指令,与WiFi模块通信,解析天气数据,以及驱动液晶显示屏的操作。单片机首先做一些初始化工作,比如时钟初始化,WiFi初始化,液晶屏幕初始化,使能RTC时钟,然后先获取一次天气信息。最后等待,一直等待到整点的时候,再更新一次天气信息。每到一次整点的时候,都会重新获取一次天气信息,并且把它显示到液晶屏幕上[4]。
3.2 初始化地图元素
要显示地图,使用者需要使用天气服务器API提供的类和方法创建天气预报的基本地图信息。在心知天气服务器的相关地图服务中创建一个地图,并定义一个中心点坐标,将某个城市定义为地图中心坐标,并设置地图显示级别,一般城市级别设置为10,县级别设置为14。部分代码如下:
var map = new Map.Map(“dituContent”); var point =new Map.Point(102.55,24.AndZoom(point,10
3.3 查询天气
获取到城市名称后,就可以直接让ESP8226 WiFi模块连接到互联网,然后再通过请求API数据获取到心知天气服务器上的天气数据,最后解析得到的天气数据,把天气信息显示在液晶显示屏上。
3.4 获取城市码数据库文件
数据库文件存储了中国许多省市的数量,天气主要通过使用城市代码获得,如果系统是第一次运行,系统将从心知天气服务器API端口获取城市名代码,然后将其解析,创建数据库,再将数据填入数据库对应的表中,如果不是第一次运行,系统就直接访问数据得到城市代码[5]。
3.5 界面显示调试
为了获得更好的界面显示效果,对系统的界面进行调试,屏幕上显示天气的状况需要用到天气图标,这个图标可以自己在网站中查,然后将输出灰度选为单,这样的好处是得到最小的取模数据。在调试的时候尝试调出两种不同的效果,如图3—4所示。
图3 实际调试
图4 彩调试
4 结语
此次实时天气系统的设计采用keil5作为调试软件进行总程序的调试,设计中主要涉及对stm32系列的MCU研究。总体上想要完成本设计,需要熟练掌握SPI通信和SPI FLASH存储,JSONP跨域获取天气数据,还有ESP8266无线模块配置模式等,设计将单片机与互联网技术联系起来,有一定的技术基础。主要实现的功能是对当天天气情况进行实时更新,也能对未来3天天气情况进行预报,还能随时改变显示城市,有一定的实用性。
[参考文献]
【相关文献】
[1]李泽椿,毕宝贵,金荣花,等.近10年中国现代天气预报的发展与应用[J].气象学报,2014(6):1069-1078.
[2]余卫东,张广周,张弘.河南省农用天气预报业务系统的设计与应用[J].气象与环境科学,2011(3):79-82.api设计
[3]谭晓光,罗兵.天气预报分析型数据模型及生成[J].应用气象学报,2014(1):120-128.
[4]吴亚林.浅析基于Android的天气预报系统设计与实现[J].山东工业技术,2015(24):123.