0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于MVC模式+狀態(tài)設(shè)計(jì)模式的物聯(lián)網(wǎng)氣體檢測(cè)開(kāi)源項(xiàng)目

嵌入式應(yīng)用研究院 ? 來(lái)源:嵌入式應(yīng)用研究院 ? 作者:嵌入式應(yīng)用研究院 ? 2022-11-21 09:34 ? 次閱讀

上節(jié)我們分享了MVC框架、狀態(tài)模式組合在實(shí)際開(kāi)發(fā)中的應(yīng)用,它能夠讓我們的軟件設(shè)計(jì)流程更加的清晰、易于維護(hù):

嵌入式軟件設(shè)計(jì)之美-以實(shí)際項(xiàng)目應(yīng)用MVC框架與狀態(tài)模式(上)

那么這一節(jié)我們就直接開(kāi)門見(jiàn)山,從接下來(lái)的這個(gè)開(kāi)源項(xiàng)目分享開(kāi)始:

項(xiàng)目開(kāi)源倉(cāng)庫(kù):

https://github.com/Yangyuanxin/IotSensorDetect

項(xiàng)目獲取方法:

gitclosehttps://github.com/Yangyuanxin/IotSensorDetect

該項(xiàng)目會(huì)不斷的添加新的示例來(lái)持續(xù)完善。

這是一個(gè)基于MVC模式+狀態(tài)設(shè)計(jì)模式的物聯(lián)網(wǎng)氣體檢測(cè)開(kāi)源項(xiàng)目,目前的整體軟件通信框架圖(后續(xù)會(huì)根據(jù)繼續(xù)拓展)如下所示:

727a7028-68e6-11ed-8abf-dac502259ad0.png

如上軟件通信框架圖所示,騰訊連連小程序 & 騰訊云IoT Explorer物聯(lián)網(wǎng)平臺(tái)相對(duì)于設(shè)備端來(lái)說(shuō)是上位機(jī),而下位機(jī)部分則是由四個(gè)主要的任務(wù)來(lái)協(xié)作完成的,分別是ControllerTask、IotRecvTask、ModelHnadlerControolerTask以及ModelSensorHandlerTask,而Task與Task之間的通信方式是基于消息隊(duì)列的形式來(lái)實(shí)現(xiàn)的。采用消息隊(duì)列通訊是一種軟件設(shè)計(jì)解耦的實(shí)現(xiàn)方式,線程與線程之間通過(guò)消息隊(duì)列通信,能夠?qū)崿F(xiàn)業(yè)務(wù)隔離,讓整個(gè)系統(tǒng)的可拓展性大大提高。除此之外,采用消息隊(duì)列的好處是能夠攜帶數(shù)據(jù)載體,數(shù)據(jù)格式也可以由用戶自定義。例如本開(kāi)源項(xiàng)目的自定義消息結(jié)構(gòu)體如下:

structMsg_t
{
uint8_tType;//消息類型
uint32_tSensorValue;//傳感器數(shù)值
charData[MSG_LEN];//其它可能的數(shù)據(jù)承載
};

其中,軟件通信時(shí)序分為兩種模式:

1、Ctrl Mode

該模式由APP端發(fā)起,對(duì)于APP端來(lái)說(shuō),APP端可以下發(fā)三種命令,分別是檢測(cè)、停止、返回,如下圖所示:

72a560da-68e6-11ed-8abf-dac502259ad0.png

當(dāng)用戶在APP端按下檢測(cè)時(shí),APP端會(huì)下發(fā)START命令,當(dāng)Controller接收到Iot端下發(fā)的指令時(shí)會(huì)將其轉(zhuǎn)發(fā)給Model模塊來(lái)控制傳感器進(jìn)行檢測(cè),期間檢測(cè)過(guò)程中的設(shè)備狀態(tài)以及傳感器數(shù)值會(huì)進(jìn)行更新,檢測(cè)過(guò)程也可以通過(guò)下發(fā)停止來(lái)打斷;而返回則是根據(jù)當(dāng)前的設(shè)備狀態(tài)來(lái)返回到上一個(gè)檢測(cè)狀態(tài);這一切是通過(guò)狀態(tài)模式來(lái)維護(hù)的,其狀態(tài)流程圖如下:

72ca3b44-68e6-11ed-8abf-dac502259ad0.png

在程序中,該狀態(tài)流程圖是通過(guò)一個(gè)結(jié)構(gòu)體數(shù)組來(lái)定義的:

SensorStateItem_tSensorStateTable[]=
{
{IDLE,START,CALI},//IDLE->START->CALI
{CALI,NEXT,DETECT},//CALI->NEXT->DETECT
{CALI,STOP,IDLE},//CALI->STOP->IDLE
{DETECT,NEXT,RESULT},//DETECT->NEXT->RESULT
{DETECT,PREV,CALI},//DETECT->PREV->CALI
{DETECT,STOP,IDLE},//DETECT->STOP->IDLE
{RESULT,PREV,DETECT},//RESULT->PREV->DETECT
{RESULT,STOP,IDLE},//RESULT->STOP->IDLE
};

切換狀態(tài)的過(guò)程是由DoSensorStatus來(lái)實(shí)現(xiàn)的:

__IOSensorState_tCurState=IDLE;//當(dāng)前狀態(tài)
__IOSensorState_tPrevState=IDLE;//上一個(gè)狀態(tài)

SensorStateItem_t*FindCurStateAndEvent(SensorState_tCurState,SensorEvent_tEvent)
{
intIndex=0;
//查狀態(tài)表
for(Index=0;IndexNextSate;
returnRet;
};

2、Auto Report Mode

該模式是由設(shè)備端主動(dòng)定時(shí)上報(bào)給到APP端,如下圖所示:

72dfdc42-68e6-11ed-8abf-dac502259ad0.png

檢測(cè)設(shè)備在沒(méi)有啟動(dòng)檢測(cè)功能時(shí),設(shè)備端也會(huì)定時(shí)上報(bào)傳感器數(shù)值以及設(shè)備狀態(tài);因此,Iot端能夠定時(shí)看到數(shù)據(jù)在不斷發(fā)生變化。

以上便是MCV框架與狀態(tài)模式最簡(jiǎn)單的應(yīng)用了。當(dāng)然,從上節(jié)我們就已經(jīng)知道,對(duì)于Controller和View而言,它的體現(xiàn)形式可以有很多種,它不局限于僅僅是Iot的形式,它也可以是由其它模塊來(lái)構(gòu)成;這部分待后續(xù)項(xiàng)目更新后上傳。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5046

    文章

    18817

    瀏覽量

    298548
  • 物聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    2894

    文章

    43313

    瀏覽量

    366429
  • MVC
    MVC
    +關(guān)注

    關(guān)注

    0

    文章

    73

    瀏覽量

    13823

原文標(biāo)題:嵌入式軟件設(shè)計(jì)之美-以實(shí)際項(xiàng)目應(yīng)用MVC框架與狀態(tài)模式(下)

文章出處:【微信號(hào):嵌入式應(yīng)用研究院,微信公眾號(hào):嵌入式應(yīng)用研究院】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    氣體檢測(cè)儀常用的傳感器

    濕度影響大,檢測(cè)氣體種類有限,目前最主要應(yīng)用于甲烷、二氧化碳、一氧化碳、六氟化硫、二氧化硫、碳?xì)涞?b class='flag-5'>氣體?! 《?、氣體檢測(cè)儀之半導(dǎo)體原理  原理:半導(dǎo)體式
    發(fā)表于 12-02 15:09

    基于MVC模式的WEB應(yīng)用框架

    MVC模式是目前WEB應(yīng)用系統(tǒng)設(shè)計(jì)中較為流行的一種,它在J2EE應(yīng)用平臺(tái)上的表現(xiàn)使其成為眾多設(shè)計(jì)者的首選。其中,基于MVC模式的Struts框架使用最為廣泛,論文首先討論了它的內(nèi)部實(shí)
    發(fā)表于 12-29 17:13 ?12次下載

    MVC模式在教學(xué)考評(píng)系統(tǒng)中的應(yīng)用

    通過(guò)對(duì)MVC 設(shè)計(jì)模式進(jìn)行的分析,探索了基于MVC 模式開(kāi)發(fā)Web 應(yīng)用程序的優(yōu)缺點(diǎn),提出基于MVC
    發(fā)表于 10-14 16:10 ?0次下載

    污染氣體檢測(cè)電路

    污染氣體檢測(cè)電路
    發(fā)表于 02-12 07:52 ?664次閱讀
    污染<b class='flag-5'>氣體檢測(cè)</b>電路

    基于遙測(cè)的移動(dòng)艙室內(nèi)氣體檢測(cè)方法

    基于遙測(cè)的移動(dòng)艙室內(nèi)氣體檢測(cè)方法 在各種密閉的移動(dòng)艙室環(huán)境中,存在犬量氣體狀態(tài)污染,這些氣體污染
    發(fā)表于 11-16 10:11 ?1113次閱讀
    基于遙測(cè)的移動(dòng)艙室內(nèi)<b class='flag-5'>氣體檢測(cè)</b>方法

    基于MVC模式的地圖控件的設(shè)計(jì)

    MVC模式增加了程序的可維護(hù)性、可擴(kuò)展性。文中在研究、分析MVC設(shè)計(jì)模式思想的基礎(chǔ)上,應(yīng)用MVC設(shè)計(jì)模式
    發(fā)表于 02-22 11:08 ?23次下載
    基于<b class='flag-5'>MVC</b><b class='flag-5'>模式</b>的地圖控件的設(shè)計(jì)

    氣體檢測(cè)方法和氣體檢測(cè)器設(shè)備

    氣體檢測(cè)方法和氣體檢測(cè)器設(shè)備,下來(lái)看看。
    發(fā)表于 12-17 15:26 ?13次下載

    02_MVC設(shè)計(jì)模式_上課源碼

    jsp-mvc設(shè)計(jì)模式
    發(fā)表于 07-10 11:02 ?0次下載

    mvc模式的優(yōu)缺點(diǎn)

    MVC模式的優(yōu)點(diǎn):各施其職,互不干涉在MVC模式中,三個(gè)層各施其職,所以如果一旦哪一層的需求發(fā)生了變化,就只需要更改相應(yīng)的層中的代碼而不會(huì)影響到其它層中的代碼。
    發(fā)表于 11-17 16:42 ?3866次閱讀
    <b class='flag-5'>mvc</b><b class='flag-5'>模式</b>的優(yōu)缺點(diǎn)

    NDIR氣體檢測(cè)器解決方案和PID氣體檢測(cè)器解決方案

    這是 ADI 公司關(guān)于氣體檢測(cè)器的第二篇文章,包含 NDIR(非色散紅外)氣體檢測(cè)器解決方案和 PID(光離子)氣體檢測(cè)器解決方案。第一篇文章介紹基于電化學(xué)傳感器的微功耗有毒氣體檢測(cè)
    發(fā)表于 12-29 18:39 ?35次下載
    NDIR<b class='flag-5'>氣體檢測(cè)</b>器解決方案和PID<b class='flag-5'>氣體檢測(cè)</b>器解決方案

    可燃氣體檢測(cè)儀和有毒氣體檢測(cè)儀的區(qū)別

    氣體檢測(cè)儀在我國(guó)工業(yè)領(lǐng)域中的應(yīng)用范圍很廣,應(yīng)用價(jià)值也越來(lái)越被人們所重視與關(guān)注。我們知道在氣體檢測(cè)儀的分類中有:有毒氣體檢測(cè)儀、可燃氣體檢測(cè)儀、便攜式
    發(fā)表于 04-15 10:01 ?1701次閱讀

    什么是氣體檢測(cè)儀,它的作用是什么

    什么是氣體檢測(cè)儀,武漢聚舟科技帶你了解什么是氣體檢測(cè)儀,氣體檢測(cè)儀是一種可以檢測(cè)氣體的儀器,氣體檢測(cè)
    發(fā)表于 06-07 17:11 ?3422次閱讀

    氣體檢測(cè)儀必備的七大功能

    氣體檢測(cè)儀的設(shè)計(jì)目的是幫助您更容易地做出安全決定。新的“智能”功能不僅能夠提供清晰的氣體檢測(cè)狀態(tài)和傳感器信息,而且能夠提醒報(bào)警后該做些什么。這樣您無(wú)需為解讀氣體檢測(cè)儀報(bào)警讀數(shù)而費(fèi)神。
    發(fā)表于 07-29 09:52 ?1231次閱讀

    氣體檢測(cè)儀的分類有哪些?

    氣體檢測(cè)儀是一種氣體泄露濃度檢測(cè)的儀器儀表工具,氣體檢測(cè)儀可檢測(cè)硫化氫,一氧化碳,氧氣,二氧化硫,磷化氫,氨氣,二氧化氮,氰化氫,氯氣,二氧
    發(fā)表于 09-16 10:56 ?3886次閱讀

    氣體檢測(cè)裝置開(kāi)源分享

    電子發(fā)燒友網(wǎng)站提供《氣體檢測(cè)裝置開(kāi)源分享.zip》資料免費(fèi)下載
    發(fā)表于 11-24 10:03 ?2次下載
    <b class='flag-5'>氣體檢測(cè)</b>裝置<b class='flag-5'>開(kāi)源</b>分享