使用cJSON解析Xinzhiweather返回的数据包

内容:调用天气API接口以获取天气信息,分析天气信息字符串测试结果数据,并获取后端网民的评论,请参阅此链接。

天气数据分析1--JSON格式的数据处理由用户返回的数据。

天气API接口,中间还有一些问题,涉及的知识:之前已经介绍了串行通信和JSON字符串,因此,我将借此机会使用cJSON处理此数据包。

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

有时我们的应用程序想要获取天气预报信息。

互联网上有许多提供天气数据服务的天气预报API。

让我们以XinzhiWei提供的API为例,了解如何使用cJSON分析天气。

API返回的数据包。

Xinzhiweather官方网站https://www.seniverse.com/申请注册免费版本,登录后,您可以在控制台下的My API项目中查看API密钥的私钥。

产品管理 。

新芝天气api:https://api.seniverse.com/v3/weather/now.json?key=key&location=dalian&language=zh-Hans&amp=unit=c上面的粗体字,用您自己的私钥替换密钥;将大连替换为您要查询的目标城市;将en-替换为zh-Hans,这是英语显示模式。

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

在浏览器中输入API信息以获取以下字符串:{“结果”:[{“位置”:{“ id”:“ WWYMRT0VRMUG”,“名称”:“大连”,“国家” ;:“ CN”,“ path” :“大连,大连,中国辽宁”,“时区”:“亚洲/上海”,“ timezone_offset”:“ + 08:00”},“现在”:{“文本”:“ ;阴天”,“代码”:“ 4”,“温度”:“ 14”},“ last_update”:“ 2020-05-22T13:10:00 + 08:00”}]}使用在线JSON验证和格式化工具,格式化后,获得以下格式:解析天气信息字符串为了动态显示天气信息,我们使用串口将数据发送到STM32以模拟网络请求的数据,然后显示单片机解析后,将其显示在OLED屏幕上,显示城市信息和天气温度。

将来,我将编写一个例程,该例程使用网络模块实时调用网络上的天气信息,因此请继续关注。

解析过程中的问题:由于STM32F103C8T6微控制器的RAM小于STM32F103RET6微控制器的RAM,如果您在Keil环境下根据STM32项目添加cJSON库并将cJSON库添加到本文,则会导致编译出现以下错误:解决方案:放置malloc.h文件宏定义更改如下:将原始的#define MEM_MAX_SIZE 35 * 1024更改为#define MEM_MAX_SIZE 16 * 1024此外,串行端口缓冲区应该更大,并且我的串行端口接收缓冲区的大小设置为500字节。

此参数的大小由返回的JSON数据包的大小确定,并且缓冲区大小应大于最大的数据包。

测试结果实现的功能:PC机的串口助手将比特率设置为115200,并复制XinzhiWeather api返回的字符串,直接发送到串口; STM32F103C8T6微控制器的串口1接收上述字符串,并使用cJSON解析该字符串;解析后,结果将保存到结构中以进行临时存储; OLED在结构中显示天气和温度值。

因为字符的宽度是8px,所以一行可以显示128px / 8px = 16个字符。

如果使用OLED_ShowStr显示字符串,请注意控制字符串的长度。

如果格式化后超过16个字符,则显示将被序列化。

数据获取微信公众号后台回复“ Heart Know Weather”,您可以下载项目源代码。

推荐阅读:STM32F103串行端口的使用基于STM32固件库的MDK5项目。

修改Keil项目名称并添加其他模块文件。

在Keil环境中,将cJSON添加到STM32项目。

使用STM32F103C8T6最小系统板点亮水灯。

STM32在6月份驱动了0.96英寸OLED液晶显示屏。

投票赞成“每月练习”广告活动已经开始,您可以决定在6月该做什么。

感兴趣的人请输入下面的链接进行投票。

2020.06“每月培训”活动开始投票活动介绍和时间表,请参阅“每月活动”在官方帐户底部的菜单栏中。