91视频免费?看_蜜芽MY188精品TV在线观看_国产免费无遮挡在线观看视频_深夜国产_亚洲精品欧洲精品_欧美黑人粗暴多交

程序員小哈
認(rèn)證:優(yōu)質(zhì)創(chuàng)作者
作者動(dòng)態(tài)
自動(dòng)洗碗機(jī)綜合實(shí)例第二講 - 最小系統(tǒng)核心板PCB繪制
2024-07-18 09:21
自動(dòng)洗碗機(jī)綜合實(shí)例第一講 - 最小系統(tǒng)核心板原理圖繪制
2024-07-16 09:40
線路板焊接的干貨都在這里呢
2024-07-14 12:08
基于單片機(jī)的智能風(fēng)扇DIY總結(jié)
2024-07-13 14:42
基于HAL庫(kù)實(shí)現(xiàn)按鍵(外部中斷)翻轉(zhuǎn)一個(gè)LED
2024-06-30 14:02

用cJSON解析心知天氣返回的數(shù)據(jù)包

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

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

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

  • 心知天氣的官網(wǎng)https://www.seniverse.com/
  • 申請(qǐng)注冊(cè)免費(fèi)版,登陸之后,在控制臺(tái)–>產(chǎn)品管理下面的我的API項(xiàng)目中,可以查看自己的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"}]}

解析天氣信息字符串

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

以后會(huì)寫(xiě)一個(gè)使用網(wǎng)絡(luò)模塊實(shí)時(shí)調(diào)用網(wǎng)絡(luò)上天氣信息的例程,敬請(qǐng)留意。

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

  • 由于STM32F103C8T6單片機(jī)的RAM比STM32F103RET6單片機(jī)的小,所以按照Keil環(huán)境下STM32工程加入cJSON這篇文章添加cJSON庫(kù)的話,編譯會(huì)出現(xiàn)如下錯(cuò)誤:

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

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

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

測(cè)試結(jié)果

實(shí)現(xiàn)的功能:

  1. PC機(jī)的串口助手設(shè)置比特率為115200,拷貝心知天氣api返回的字符串直接串口發(fā)送;
  2. STM32F103C8T6單片機(jī)的串口1接收上面的字符串,使用cJSON解析此字符串;
  3. 解析之后的結(jié)果保存至結(jié)構(gòu)體中暫存;
  4. OLED顯示結(jié)構(gòu)體中天氣和溫度的值。

因?yàn)橐粋€(gè)字符寬度為8px,所以一行可以顯示128px/8px=16個(gè)字符,使用OLED_ShowStr來(lái)顯示字符串的話,注意控制字符串長(zhǎng)度,如果格式化之后超過(guò)16個(gè)字符,那么顯示會(huì)有串行的現(xiàn)象。

歡迎關(guān)注

專(zhuān)注于嵌入式知識(shí)分享,讓你學(xué)習(xí)路上不迷路,更多技術(shù)干貨,請(qǐng)關(guān)注【嵌入式從0到1】。
聲明:本內(nèi)容為作者獨(dú)立觀點(diǎn),不代表電子星球立場(chǎng)。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請(qǐng)聯(lián)系:editor@netbroad.com
覺(jué)得內(nèi)容不錯(cuò)的朋友,別忘了一鍵三連哦!
贊 2
收藏 3
關(guān)注 69
成為作者 賺取收益
全部留言
0/200
成為第一個(gè)和作者交流的人吧
主站蜘蛛池模板: 库车县| 宁津县| 惠州市| 江川县| 鄂伦春自治旗| 聂拉木县| 莎车县| 枣阳市| 秦安县| 盐亭县| 武鸣县| 敖汉旗| 乌兰浩特市| 安国市| 宣威市| 尉氏县| 如皋市| 平利县| 寿阳县| 岳普湖县| 友谊县| 丹寨县| 宜君县| 奉贤区| 齐齐哈尔市| 通辽市| 康定县| 内江市| 承德县| 南宁市| 文成县| 含山县| 郎溪县| 吉安县| 耒阳市| 麻江县| 巴彦淖尔市| 睢宁县| 洛宁县| 福海县| 平凉市|