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

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

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

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

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

相關(guān)模塊簡(jiǎn)介

1、STM32L431RCT6

2、LiteOS

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


LiteOS源碼GitHub倉(cāng)庫(kù)鏈接:

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):


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


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

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

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

Profile即產(chǎn)品模型)是用來(lái)描述一款產(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)編解碼插件開(kāi)發(fā)

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


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

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

因?yàn)槭褂枚M(jìn)制流來(lái)表示的話傳輸?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)行云端編碼器插件的開(kāi)發(fā)。下面是設(shè)備數(shù)據(jù)上報(bào)的流程:

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

BH1750是一種用于兩線制串行總線接口的16位數(shù)字型光強(qiáng)度傳感器集成電路。利用它的高分辨率可以探測(cè)較大范圍的光強(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的控制一樣,通過(guò)一個(gè)GPIO來(lái)控制其亮、滅。


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

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

重要步驟解析

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

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


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

主題默認(rèn)是大家都喜歡的暗黑色,使用起來(lái)也比較簡(jiǎn)單,其用Makefile來(lái)管理工程,使用時(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)的代碼光看代碼是沒(méi)有多大意義的,只會(huì)越看越懵。

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

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

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

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


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


結(jié)果:


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

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)品了,其它幾種方式就更簡(jiǎn)單了。


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

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

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



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


(3)調(diào)測(cè)

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

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

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

3、設(shè)備端開(kāi)發(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ù)來(lái)進(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);
  }

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

除此之外,在對(duì)接云端之前,還需要一個(gè)可以聯(lián)網(wǎng)的媒介,這里我們選用的是ESP8266,使用AT設(shè)備框架來(lái)管理我們的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)用開(kāi)發(fā)

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

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

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


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


最終效果:

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

總結(jié)

以上就是本次分享的智慧農(nóng)業(yè)案例實(shí)驗(yàn),本次實(shí)驗(yàn)用了華為IOT平臺(tái),其實(shí)其它平臺(tái)用起來(lá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)試助手的簡(jiǎn)單使用

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

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

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


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



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

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(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)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉