www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > 程序員小哈

目錄:

  • 調(diào)用天氣API接口獲取天氣信息

  • 解析天氣信息字符串

  • 測試結(jié)果

  • 資料獲取


后臺網(wǎng)友留言,說參考這個鏈接 天氣數(shù)據(jù)解析1--JSON格式數(shù)據(jù) 處理天氣API接口返回的數(shù)據(jù),中間遇到了點問題,里面涉及到的知識:串口通信、JSON字符串咱們之前都有介紹過,那我就借此機會,利用cJSON處理一下這個數(shù)據(jù)包吧。


調(diào)用天氣API接口獲取天氣信息


有時我們的應(yīng)用想要獲取天氣預(yù)報信息,網(wǎng)上有不少天氣預(yù)報API提供天氣數(shù)據(jù)服務(wù),我們以心知天氣提供的API為例,看看如何使用cJSON解析心知天氣API返回的數(shù)據(jù)包。


  • 心知天氣的官網(wǎng)

https://www.seniverse.com/


  • 申請注冊免費版,登陸之后,在控制臺-->產(chǎn)品管理下面的我的API項目中,可以查看自己的API密鑰的私鑰。



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


上面加粗的地方,key處替換為你自己的私鑰;dalian處替換為你要查詢的目標(biāo)城市;zh-Hans處替換為en就是英文的顯示方式了。


我們?yōu)榱薕LED顯示方便,先使用英文的顯示方式。


  • 瀏覽器中輸入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校驗格式化工具,格式化之后,得到如下格式:



解析天氣信息字符串

為了可以動態(tài)顯示天氣信息,我們使用串口發(fā)送數(shù)據(jù)至STM32,用來模擬網(wǎng)絡(luò)獲請求到的數(shù)據(jù),然后單片機解析完之后顯示到OLED屏上,顯示城市信息和天氣溫度。

以后會寫一個使用網(wǎng)絡(luò)模塊實時調(diào)用網(wǎng)絡(luò)上天氣信息的例程,敬請留意。


解析過程中出現(xiàn)的問題:


解決辦法:
將malloc.h文件中的宏定義更改如下:
原來#define MEM_MAX_SIZE 35*1024
改為#define MEM_MAX_SIZE 16*1024

  • 另外串口緩沖區(qū)要大一點,我串口接收緩沖區(qū)大小設(shè)置為500字節(jié)。

此參數(shù)的大小由返回的JSON數(shù)據(jù)包大小決定,緩沖區(qū)大小要比最大的包要大一些才可以。

測試結(jié)果

實現(xiàn)的功能:

  1. PC機的串口助手設(shè)置比特率為115200,拷貝心知天氣api返回的字符串直接串口發(fā)送;

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

  3. 解析之后的結(jié)果保存至結(jié)構(gòu)體中暫存;

  4. OLED顯示結(jié)構(gòu)體中天氣和溫度的值。



因為一個字符寬度為8px,所以一行可以顯示128px/8px=16個字符,使用OLED_ShowStr來顯示字符串的話,注意控制字符串長度,如果格式化之后超過16個字符,那么顯示會有串行的現(xiàn)象。



本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉