当前位置:首页 > 公众号精选 > 程序员小哈
[导读]目录: 调用天气API接口获取天气信息 解析天气信息字符串 测试结果 资料获取 后台网友留言,说参考这个链接 天气数据解析1--JSON格式数据 处理天气API接口返回的数据,中间遇到了点问题,里面涉及到的知识:串口通信、JSON字符串咱们之前都有介绍过,那我就借

目录:

  • 调用天气API接口获取天气信息

  • 解析天气信息字符串

  • 测试结果

  • 资料获取


后台网友留言,说参考这个链接 天气数据解析1--JSON格式数据 处理天气API接口返回的数据,中间遇到了点问题,里面涉及到的知识:串口通信、JSON字符串咱们之前都有介绍过,那我就借此机会,利用cJSON处理一下这个数据包吧。


调用天气API接口获取天气信息


有时我们的应用想要获取天气预报信息,网上有不少天气预报API提供天气数据服务,我们以心知天气提供的API为例,看看如何使用cJSON解析心知天气API返回的数据包。


  • 心知天气的官网

https://www.seniverse.com/


  • 申请注册免费版,登陆之后,在控制台-->产品管理下面的我的API项目中,可以查看自己的API密钥的私钥。



  • 心知天气api:https://api.seniverse.com/v3/weather/now.json?key=key&location=dalian&language=zh-Hans&unit=c


上面加粗的地方,key处替换为你自己的私钥;dalian处替换为你要查询的目标城市;zh-Hans处替换为en就是英文的显示方式了。


我们为了OLED显示方便,先使用英文的显示方式。


  • 浏览器中输入API信息得到如下字符串:



{"results":[{"location":{"id":"WWYMRT0VRMUG","name":"Dalian","country":"CN","path":"Dalian,Dalian,Liaoning,China","timezone":"Asia/Shanghai","timezone_offset":"+08:00"},"now":{"text":"Cloudy","code":"4","temperature":"14"},"last_update":"2020-05-22T13:10:00+08:00"}]}


使用在线JSON校验格式化工具,格式化之后,得到如下格式:



解析天气信息字符串

为了可以动态显示天气信息,我们使用串口发送数据至STM32,用来模拟网络获请求到的数据,然后单片机解析完之后显示到OLED屏上,显示城市信息和天气温度。

以后会写一个使用网络模块实时调用网络上天气信息的例程,敬请留意。


解析过程中出现的问题:

  • 由于STM32F103C8T6单片机的RAM比STM32F103RET6单片机的小,所以按照Keil环境下STM32工程加入cJSON这篇文章添加cJSON库的话,编译会出现如下错误:



解决办法:
将malloc.h文件中的宏定义更改如下:
原来#define MEM_MAX_SIZE 35*1024
改为#define MEM_MAX_SIZE 16*1024



  • 另外串口缓冲区要大一点,我串口接收缓冲区大小设置为500字节。

此参数的大小由返回的JSON数据包大小决定,缓冲区大小要比最大的包要大一些才可以。


测试结果

实现的功能:

  1. PC机的串口助手设置比特率为115200,拷贝心知天气api返回的字符串直接串口发送;

  2. STM32F103C8T6单片机的串口1接收上面的字符串,使用cJSON解析此字符串;

  3. 解析之后的结果保存至结构体中暂存;

  4. OLED显示结构体中天气和温度的值。



因为一个字符宽度为8px,所以一行可以显示128px/8px=16个字符,使用OLED_ShowStr来显示字符串的话,注意控制字符串长度,如果格式化之后超过16个字符,那么显示会有串行的现象。


资料获取

微信公众号后台回复“心知天气”,可以下载工程源码。




推荐阅读:

STM32F103 串口的使用方法

基于STM32固件库的MDK5工程建立

修改Keil工程名称并添加其他模块文件

Keil环境下STM32工程加入cJSON

利用STM32F103C8T6最小系统板点亮流水灯

STM32驱动0.96寸OLED液晶屏




六月份的“每月一练”活动已经开始投票了,六月份做什么,由你们决定。
感兴趣的进入下面链接投票哈。


2020.06 “每月一练”活动开始投票了

 

活动介绍及日程安排,详见公众号底部菜单栏“每月活动”。





免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

深圳市融聚汇信息科技有限公司(融聚汇)利用亚马逊云科技的技术和服务打造云原生一站式金融信息数据平台。借助亚马逊云科技,融聚汇构建了云原生一站式金融信息数据平台,快速处理来自多家主流交易所的行情、公告资讯等多元异构的海量数...

关键字: 亚马逊 SDK 数据包 MT

本篇主要讲了BLE的Link Layer,包括链路层定义的角色和状态,空中接口数据包的通信格式以及各个字段的含义,方便我们去分析LOG和定位问题。

关键字: BLE 链路层 数据包

印度班加罗尔2022年9月16日 /美通社/ -- 总部位于班加罗尔的公司Prodigy Technovations Pvt. Ltd推出了PGY-PCIeGen3/4-PA PCIe协议分析仪,支持2.5、5.0、8....

关键字: GEN PCIE 数据包 软件

事情从一个健身教练说起吧。李东,自称亚健康终结者,尝试使用互联网的模式拓展自己的业务。在某款新开发的聊天软件琛琛上发布广告。键盘说来就来。疯狂发送"李东",回车发送!,"亚健康终结者",再回车发送!还记得四层网络协议长什...

关键字: TCP UDP 数据包 应用层

以太网是应用最为广泛的网络传输方式,已经得到企业和用户的普遍认可,成为宽带接入的首选技术。计算机网络在传输数据时,为了保证所有共享网络资源的计算机都能公平、迅速地使用网络,通常把数据分割成若干小块作为传输单位进行发送,这...

关键字: 以太网 计算机 数据包

原文作者:dog250原文链接:https://blog.csdn.net/dog250/article/details/46666029线速问题很多人对这个线速概念存在误解。认为所谓线速能力就是路由器/交换机就像一根网...

关键字: Linux 数据包 CPU DMA

本文的目的是通过随机截取的一段网络数据包,然后根据协议类型来解析出这段内存。学习本文需要掌握的基础知识:网络协议C语言Linux操作抓包工具的使用其中抓包工具的安装和使用见下文:《一文包你学会网络数据抓包》一、截取一个网...

关键字: 代码 数据包 网络数据

本文的目的是通过随机截取的一段网络数据包,然后根据协议类型来解析出这段内存。学习本文需要掌握的基础知识:网络协议C语言Linux操作抓包工具的使用一、截取一个网络数据包通过抓包工具,随机抓取一个tcp数据包科莱抓包工具解...

关键字: 数据包 网络数据

是德科技凭借硬件架构优势转发各种大小数据包;Gigamon 则丢弃数据包为 512 字节或更小的流量

关键字: 是德科技 数据包 网络可视性

风向变送器有8方位风向和360度风向两种; 外壳分为铝合金和聚碳两种; 风向传感器/变速器测量方式分为: 模拟量(4-20mA/0-5V/0-10V) RS485 由于风速和风向变送器是分开的,所以我们选择了RS485总...

关键字: 变送器 数据包
关闭
关闭