当前位置:首页 > 嵌入式 > 程序员小哈
[导读]目录: 调用天气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获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

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

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭