當(dāng)前位置:首頁 > 公眾號(hào)精選 > 嵌入式大雜燴
[導(dǎo)讀]最近在指導(dǎo)一位讀者朋友做畢業(yè)設(shè)計(jì),該畢設(shè)是關(guān)于端云互通的,基于小熊派+LiteOS+華為云。 在指導(dǎo)他的過程中我也學(xué)到了不少東西,這里通過一個(gè)案例實(shí)驗(yàn)(智慧農(nóng)業(yè))給大家分享一些知識(shí)。 實(shí)驗(yàn)框圖 相關(guān)模塊簡介 1、STM32L431RCT6 2、LiteOS LiteOS是華為開發(fā)

最近在指導(dǎo)一位讀者朋友做畢業(yè)設(shè)計(jì),該畢設(shè)是關(guān)于端云互通的,基于小熊派+LiteOS+華為云。

在指導(dǎo)他的過程中我也學(xué)到了不少東西,這里通過一個(gè)案例實(shí)驗(yàn)(智慧農(nóng)業(yè))給大家分享一些知識(shí)。

實(shí)驗(yàn)框圖

相關(guān)模塊簡介

1、STM32L431RCT6

2、LiteOS

LiteOS是華為開發(fā)的輕量級(jí)實(shí)時(shí)操作系統(tǒng):


LiteOS源碼GitHub倉庫鏈接:

https://github.com/LiteOS/LiteOS

其源碼一級(jí)目錄結(jié)構(gòu)如下:


其內(nèi)核包括任務(wù)管理、內(nèi)存管理、時(shí)間管理、通信機(jī)制、中斷管理、隊(duì)列管理、事件管理、定時(shí)器等操作系統(tǒng)基礎(chǔ)組件,可以單獨(dú)運(yùn)行。

Huawei LiteOS是一個(gè)支持多任務(wù)的操作系統(tǒng)。在Huawei LiteOS中,一個(gè)任務(wù)表示一個(gè)線程。 其任務(wù)是搶占式調(diào)度機(jī)制,同時(shí)支持時(shí)間片輪轉(zhuǎn)調(diào)度方式。

高優(yōu)先級(jí)的任務(wù)可打斷低優(yōu)先級(jí)任務(wù),低優(yōu)先級(jí)任務(wù)必須在高優(yōu)先級(jí)任務(wù)阻塞或結(jié)束后才能得到調(diào)度。

創(chuàng)建任務(wù)示例:

左右滑動(dòng)查看全部代碼>>>

UINT32 creat_test_task(VOID)
{
  UINT32 uwRet = LOS_OK;
  TSK_INIT_PARAM_S task_init_param;
  UINT32 TskHandle;

  task_init_param.usTaskPrio = TASK_PRIO; /* 任務(wù)優(yōu)先級(jí) */
  task_init_param.pcName = "test_task"/* 任務(wù)名稱 */
  task_init_param.pfnTaskEntry = (TSK_ENTRY_FUNC)test_task; /* 任務(wù)入口函數(shù) */
  task_init_param.uwStackSize = STACK_SIZE; /* 任務(wù)棧大小 */

  /* 任務(wù)創(chuàng)建 */
  uwRet = LOS_TaskCreate(&TskHandle, &task_init_param);
  if(LOS_OK != uwRet)
  {
      return uwRet;
  }
  return uwRet;
}

3、華為云平臺(tái)

本次實(shí)驗(yàn)的云平臺(tái)為華為的OceanConnect物聯(lián)網(wǎng)平臺(tái):


其云端開發(fā)框圖如下:


我們主要是用來做實(shí)驗(yàn),著重關(guān)注紅框里的內(nèi)容。

下面簡單介紹一下Profile文件編解碼器插件這兩塊大家可能比較陌生的部分:

(1)Profile文件開發(fā)

Profile即產(chǎn)品模型)是用來描述一款產(chǎn)品中的設(shè)備“是什么”、“能做什么”以及“如何控制該設(shè)備”的文件。

在物聯(lián)網(wǎng)平臺(tái)集成對(duì)接中需要先創(chuàng)建Profile,因?yàn)镻rofile里面定義了設(shè)備上報(bào)的數(shù)據(jù)和應(yīng)用服務(wù)器下發(fā)的命令包含了哪些字段。

定義Profile,即在物聯(lián)網(wǎng)平臺(tái)構(gòu)建一款設(shè)備的抽象模型,使平臺(tái)理解該款設(shè)備支持的服務(wù)、屬性、命令、升級(jí)能力等信息。

Profile主要包含產(chǎn)品信息、服務(wù)能力和維護(hù)能力三部分:


本次實(shí)驗(yàn)我們主要關(guān)注紅框部分,其具體表現(xiàn)如:


(2)編解碼插件開發(fā)

一款產(chǎn)品的設(shè)備上報(bào)數(shù)據(jù)時(shí),如果“數(shù)據(jù)格式”為二進(jìn)制碼流,則該產(chǎn)品需要進(jìn)行編解碼插件開發(fā);如果“數(shù)據(jù)格式”為JSON,則該產(chǎn)品下不需要進(jìn)行編解碼插件開發(fā)。兩種數(shù)據(jù)舉例:


作為物聯(lián)網(wǎng)的終端設(shè)備,比較講究的就是功耗問題了,這個(gè)問題也關(guān)乎到通信傳輸?shù)臄?shù)據(jù)量的問題。

上圖舉例的兩種數(shù)據(jù)格式其實(shí)代表著同樣的信息,雖然對(duì)于我們程序員而言,我們更容易讀懂JSON格式的數(shù)據(jù)包含的信息;但是對(duì)于設(shè)備而言,其更喜歡二進(jìn)制流格式的數(shù)據(jù)了。

因?yàn)槭褂枚M(jìn)制流來表示的話傳輸?shù)臄?shù)據(jù)量就會(huì)小很多,進(jìn)而可以降低功耗。其實(shí)這個(gè)二進(jìn)制流格式也很好理解,是按照特定格式的,比如:


本次實(shí)驗(yàn)我們?cè)O(shè)備端發(fā)送與接收的數(shù)據(jù)均為二進(jìn)制流格式數(shù)據(jù),因此需要進(jìn)行云端編碼器插件的開發(fā)。下面是設(shè)備數(shù)據(jù)上報(bào)的流程:

4、BH1750光強(qiáng)度傳感器

BH1750是一種用于兩線制串行總線接口的16位數(shù)字型光強(qiáng)度傳感器集成電路。利用它的高分辨率可以探測較大范圍的光強(qiáng)度變化。(1lx~65535lx)。


主要特性:

  • 支持 IIC BUS 接口
  • 光源依賴性弱
  • 有兩種可選的 IIC slave 地址
  • 最小誤差變動(dòng)在±20%

5、SHT30溫濕度模塊

溫濕度傳感器 SHT30的溫度范圍為-40℃~125℃ ,濕度范圍0%RH~100%RH。

主要特性:

  • 完全校準(zhǔn)的線性化,溫度補(bǔ)償式的數(shù)字輸出
  • 電壓范圍 2.4V-5.5V
  • 通信速度高達(dá) 1MHz 的 IIC 接口,兩個(gè)可選的用戶地址
  • 相對(duì)濕度誤差± 2%RH
  • 溫度誤差± 0.3%

6、補(bǔ)光燈模塊

與普通的LED的控制一樣,通過一個(gè)GPIO來控制其亮、滅。


7、直流電機(jī)模塊

通過一個(gè)GPIO來控制其轉(zhuǎn)、停。

重要步驟解析

我們可以用Keil MDK來編寫、編譯代碼,也可以使用LiteOS Studio來編寫、編譯代碼。

在解析重要步驟之前有必要介紹一下LiteOS Studio


LiteOS Studio是LiteOS集成開發(fā)環(huán)境,一站式開發(fā)工具,支持C、C++、匯編等語言,讓您快速,高效的進(jìn)行物聯(lián)網(wǎng)開發(fā)。

主題默認(rèn)是大家都喜歡的暗黑色,使用起來也比較簡單,其用Makefile來管理工程,使用時(shí)添加新的源文件需要同步更新Makefile文件:

1、讀取傳感器數(shù)據(jù)并顯示至LCD

準(zhǔn)備BH1750SHT30傳感器驅(qū)動(dòng)。這里跟初學(xué)者分享一點(diǎn)經(jīng)驗(yàn),看這些傳感器驅(qū)動(dòng)代碼的時(shí)候不要只看代碼。

這種與實(shí)際硬件(芯片)密切相關(guān)的代碼光看代碼是沒有多大意義的,只會(huì)越看越懵。

因此正確姿勢應(yīng)該是對(duì)照著datasheet一起看,需要寫出這些代碼得好好研讀datasheet

一般比較成熟的傳感器驅(qū)動(dòng)網(wǎng)上都有很多現(xiàn)成的可以直接用的,多數(shù)情況下我們很少去親自寫這個(gè)。

特別是工作之后,能copy的代碼堅(jiān)決不自己寫,老板可不看你代碼寫得多秀,只看你任務(wù)完成得怎么樣。

但是還是有必要了解一下這些驅(qū)動(dòng)代碼怎么寫出來的方法,萬一某天需要我們自己寫呢。下面我們從例程代碼中扣出一些核心代碼:


我們最終要用到的就是最后一個(gè)函數(shù)來讀取傳感器數(shù)據(jù),然后顯示在LCD上,核心代碼:


結(jié)果:


這個(gè)結(jié)果多了一個(gè)煙感數(shù)據(jù)。這里簡單說明一下:寫這篇筆記時(shí)用的是智慧農(nóng)業(yè)的模塊。后來才加了一個(gè)煙感模塊,改起來比較麻煩就沒去改了,所以上面的一些圖的說明沒有煙感模塊。

2、云端配置

在設(shè)備端接入云端之前,遇到對(duì)云端進(jìn)行相應(yīng)的配置。這里也是抽取出重要的步驟,具體的步驟可以查看華為云上相關(guān)的文檔,很詳細(xì):

文檔鏈接:

https://support.huaweicloud.com/devg-IoT/iot_02_9994.html

(1)創(chuàng)建產(chǎn)品:


有幾種方式創(chuàng)建產(chǎn)品,這里我們選擇自定義的方式,學(xué)會(huì)了自定義的方式創(chuàng)建產(chǎn)品了,其它幾種方式就更簡單了。


(2)Profile、編解碼器插件開發(fā)

接著進(jìn)行產(chǎn)品開發(fā),主要是進(jìn)行Profile文件與編解碼器插件的開發(fā)。

Profile文件有兩種開發(fā)方式:離線的方式與在線的方式。我們使用在線的方式創(chuàng)建,創(chuàng)建的Profile文件如下:



編解碼器插件的開發(fā)依賴與Profile文件,我們創(chuàng)建的編解碼器插件如下:


(3)調(diào)測

接著驗(yàn)證我們的Profile文件與編解碼器插件,這里有兩種方法驗(yàn)證.

一是創(chuàng)建真實(shí)的設(shè)備,這個(gè)需要我們真實(shí)的設(shè)備端進(jìn)行連接測試,下面我們?cè)僮鲞@一步;

二是使用虛擬的設(shè)備。這里我們使用虛擬的設(shè)備進(jìn)行驗(yàn)證:

3、設(shè)備端開發(fā)

設(shè)備端我們使用LiteOS SDK端云互通組件agent tiny對(duì)接IoT平臺(tái)。

借助這個(gè)組件我們只需要調(diào)用幾個(gè)API函數(shù)就可以很方便地連接華為IOT平臺(tái),其重要接口函數(shù)如下:

左右滑動(dòng)查看全部代碼>>>

/* LiteOS SDK端云互通組件的初始化接口 */
int atiny_init(atiny_param_t* atiny_params, void** phandle);
/* LiteOS SDK端云互通組件的主函數(shù)體 */
int atiny_bind(atiny_device_info_t* device_info, void* phandle);
/* LwM2M標(biāo)準(zhǔn)對(duì)象向設(shè)備下發(fā)命令的統(tǒng)一入口 */
int atiny_cmd_ioctl(atiny_cmd_e cmd, char* arg, int len);
/* LiteOS SDK端云互通組件數(shù)據(jù)上報(bào)接口 */
int atiny_data_report(void* phandle, data_report_t* report_data);

設(shè)備對(duì)接IOT平臺(tái)的流程示意圖:


其實(shí)本云端互通實(shí)驗(yàn)主要圍繞的就是一個(gè)agent_tiny任務(wù),其任務(wù)入口函數(shù)就是這個(gè)流程圖上的agent_tiny_entry函數(shù)。

這個(gè)入口函數(shù)里面主要做的內(nèi)容是:atiny的初始化、對(duì)于入?yún)tiny_params的設(shè)定(要根據(jù)具體的業(yè)務(wù)來進(jìn)行)。

還有創(chuàng)建一些子任務(wù)(數(shù)據(jù)采集任務(wù)、數(shù)據(jù)上報(bào)任務(wù)、下發(fā)命令的應(yīng)答任務(wù)),最后進(jìn)行到。

核心代碼如端云互通組件的主函數(shù)體,具體核心代碼如:

左右滑動(dòng)查看全部代碼>>>

void agent_tiny_entry(void)
{
  UINT32 uwRet = LOS_OK;
  atiny_param_t *atiny_params;
  atiny_security_param_t  *iot_security_param = NULL;
  atiny_security_param_t  *bs_security_param = NULL;

  atiny_device_info_t *device_info = &g_device_info;

  //  省略部分內(nèi)容。。。。。。。。。。。。
  device_info->endpoint_name = g_endpoint_name;
  atiny_params = &g_atiny_params;
  atiny_params->server_params.binding = "UQ";
  //  省略部分內(nèi)容。。。。。。。。。。。。

  /* LiteOS SDK端云互通組件的初始化接口 */
  if(ATINY_OK != atiny_init(atiny_params, &g_phandle))
  {
      return;
  }

  /* 創(chuàng)建數(shù)據(jù)采集任務(wù) */
  uwRet = creat_collection_task();
  if (uwRet != LOS_OK)
  {
      return ;
  }

  /* 創(chuàng)建數(shù)據(jù)上報(bào)任務(wù) */
  uwRet = creat_report_task();
  if(LOS_OK != uwRet)
  {
      return;
  }

  /* 創(chuàng)建一個(gè)信號(hào)量 */
  uwRet = LOS_SemCreate(0,&reply_sem);
  if (uwRet != LOS_OK)
  {
  return ;
  }

  /* 創(chuàng)建下發(fā)命令的應(yīng)答任務(wù) */
  uwRet = creat_reply_report_task();
  if (uwRet != LOS_OK)
  {
      return ;
  }

  /* LiteOS SDK端云互通組件的主函數(shù)體 */
  (void)atiny_bind(device_info, g_phandle);
  }

更具體的代碼就不展開了,篇幅好像有點(diǎn)長了。。。

除此之外,在對(duì)接云端之前,還需要一個(gè)可以聯(lián)網(wǎng)的媒介,這里我們選用的是ESP8266,使用AT設(shè)備框架來管理我們的ESP8266設(shè)備:


現(xiàn)在,我們就可以使用真實(shí)的設(shè)備對(duì)接云端了,對(duì)接云端需要一個(gè)設(shè)備標(biāo)識(shí)碼,用ESP8266模塊時(shí)需要我們自己創(chuàng)建一個(gè)標(biāo)識(shí)碼。

用其它聯(lián)網(wǎng)模塊如NB-IOT模塊則只需使用模塊出廠自帶的設(shè)備碼即可。這里我們創(chuàng)建的設(shè)備標(biāo)識(shí)碼為:

這個(gè)標(biāo)識(shí)碼其實(shí)就是在我們上面的agent_tiny_entry函數(shù)中有配置給device_info設(shè)備結(jié)構(gòu)體了。然后使用這個(gè)標(biāo)識(shí)碼在云端創(chuàng)建設(shè)備:

4、web應(yīng)用開發(fā)

上面在調(diào)試階段已經(jīng)可以上傳云端到IOT平臺(tái)了,也可以看到數(shù)據(jù)了。但是那些數(shù)據(jù)對(duì)于用戶來說總歸是看不習(xí)慣吧,我們開發(fā)產(chǎn)品就是為了給用戶使用、給用戶看的。

所以最終體現(xiàn)出來給用戶的不應(yīng)該是一堆數(shù)據(jù),而是一個(gè)對(duì)用戶較友好的可視化界面。

華為物聯(lián)網(wǎng)開發(fā)平臺(tái)也給我們提供了web應(yīng)用開發(fā)的環(huán)境:


這里的應(yīng)用開發(fā)也比較簡單,通過拖拽一些空間,簡單修改一下控件的一些屬性即可:


最終效果:

實(shí)驗(yàn)結(jié)果演示視頻

總結(jié)

以上就是本次分享的智慧農(nóng)業(yè)案例實(shí)驗(yàn),本次實(shí)驗(yàn)用了華為IOT平臺(tái),其實(shí)其它平臺(tái)用起來也是類似的,之后有時(shí)間再分享其它云平臺(tái)的案例實(shí)驗(yàn)。

上面分享的很多步驟其實(shí)不算詳細(xì),關(guān)于這個(gè)實(shí)驗(yàn)更詳細(xì)的步驟內(nèi)容可以聯(lián)系我獲取相關(guān)文檔資料、包括代碼

原創(chuàng)不易,感謝閱讀,期待在看、分享~


猜你喜歡:

RTOS入門干貨

網(wǎng)絡(luò)調(diào)試助手的簡單使用

【Linux筆記】LED驅(qū)動(dòng)程序

軟件分層、分離、抽象思想

AT指令測試ESP8266通信模組并獲取天氣數(shù)據(jù)


后臺(tái)回復(fù):加群。添加小編,加入技術(shù)交流群



點(diǎn)個(gè)贊,證明你還愛我

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場,如有問題,請(qǐng)聯(lián)系我們,謝謝!

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

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉