0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于MVC模式+状态设计模式的物联网气体检测开源项目

嵌入式应用研究院 来源:嵌入式应用研究院 作者:嵌入式应用研究院 2022-11-21 09:34 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

上节我们分享了MVC框架、状态模式组合在实际开发中的应用,它能够让我们的软件设计流程更加的清晰、易于维护:

嵌入式软件设计之美-以实际项目应用MVC框架与状态模式(上)

那么这一节我们就直接开门见山,从接下来的这个开源项目分享开始:

项目开源仓库:

https://github.com/Yangyuanxin/IotSensorDetect

项目获取方法:

gitclosehttps://github.com/Yangyuanxin/IotSensorDetect

该项目会不断的添加新的示例来持续完善。

这是一个基于MVC模式+状态设计模式的物联网气体检测开源项目,目前的整体软件通信框架图(后续会根据继续拓展)如下所示:

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

如上软件通信框架图所示,腾讯连连小程序 & 腾讯云IoT Explorer物联网平台相对于设备端来说是上位机,而下位机部分则是由四个主要的任务来协作完成的,分别是ControllerTask、IotRecvTask、ModelHnadlerControolerTask以及ModelSensorHandlerTask,而Task与Task之间的通信方式是基于消息队列的形式来实现的。采用消息队列通讯是一种软件设计解耦的实现方式,线程与线程之间通过消息队列通信,能够实现业务隔离,让整个系统的可拓展性大大提高。除此之外,采用消息队列的好处是能够携带数据载体,数据格式也可以由用户自定义。例如本开源项目的自定义消息结构体如下:

structMsg_t
{
uint8_tType;//消息类型
uint32_tSensorValue;//传感器数值
charData[MSG_LEN];//其它可能的数据承载
};

其中,软件通信时序分为两种模式:

1、Ctrl Mode

该模式由APP端发起,对于APP端来说,APP端可以下发三种命令,分别是检测、停止、返回,如下图所示:

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

当用户在APP端按下检测时,APP端会下发START命令,当Controller接收到Iot端下发的指令时会将其转发给Model模块来控制传感器进行检测,期间检测过程中的设备状态以及传感器数值会进行更新,检测过程也可以通过下发停止来打断;而返回则是根据当前的设备状态来返回到上一个检测状态;这一切是通过状态模式来维护的,其状态流程图如下:

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

在程序中,该状态流程图是通过一个结构体数组来定义的:

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
};

切换状态的过程是由DoSensorStatus来实现的:

__IOSensorState_tCurState=IDLE;//当前状态
__IOSensorState_tPrevState=IDLE;//上一个状态

SensorStateItem_t*FindCurStateAndEvent(SensorState_tCurState,SensorEvent_tEvent)
{
intIndex=0;
//查状态表
for(Index=0;Index< NR_MODEL(SensorStateTable); Index++)
    {
        if(SensorStateTable[Index].CurState == CurState 
                && SensorStateTable[Index].Event == Event)  
            return &SensorStateTable[Index];
    }

    return NULL;
}
//执行状态机
int DoSensorStatus(SensorEvent_t Event)
{
    int Ret = 1;
    SensorStateItem_t *Item;
    //根据当前的状态、事件找到状态表中的那一项,取到那一项的地址
    Item = FindCurStateAndEvent(CurState, Event);

    if (!Item)
        return 0;
    //保存上一个状态
    PrevState = CurState;
    //切换到下一个状态
    CurState = Item->NextSate;
returnRet;
};

2、Auto Report Mode

该模式是由设备端主动定时上报给到APP端,如下图所示:

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

检测设备在没有启动检测功能时,设备端也会定时上报传感器数值以及设备状态;因此,Iot端能够定时看到数据在不断发生变化。

以上便是MCV框架与状态模式最简单的应用了。当然,从上节我们就已经知道,对于Controller和View而言,它的体现形式可以有很多种,它不局限于仅仅是Iot的形式,它也可以是由其它模块来构成;这部分待后续项目更新后上传。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5186

    文章

    20143

    浏览量

    328644
  • 物联网
    +关注

    关注

    2939

    文章

    47312

    浏览量

    407573
  • MVC
    MVC
    +关注

    关注

    0

    文章

    73

    浏览量

    14340

原文标题:嵌入式软件设计之美-以实际项目应用MVC框架与状态模式(下)

文章出处:【微信号:嵌入式应用研究院,微信公众号:嵌入式应用研究院】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    气体检测仪常用的传感器

    湿度影响大,检测气体种类有限,目前最主要应用于甲烷、二氧化碳、一氧化碳、六氟化硫、二氧化硫、碳氢等气体。  二、气体检测仪之半导体原理  原理:半导体式
    发表于 12-02 15:09

    基于MVC模式的WEB应用框架

    MVC模式是目前WEB应用系统设计中较为流行的一种,它在J2EE应用平台上的表现使其成为众多设计者的首选。其中,基于MVC模式的Struts框架使用最为广泛,论文首先讨论了它的内部实
    发表于 12-29 17:13 12次下载

    MVC模式在教学考评系统中的应用

    通过对MVC 设计模式进行的分析,探索了基于MVC 模式开发Web 应用程序的优缺点,提出基于MVC
    发表于 10-14 16:10 0次下载

    污染气体检测电路

    污染气体检测电路
    发表于 02-12 07:52 797次阅读
    污染<b class='flag-5'>气体检测</b>电路

    基于遥测的移动舱室内气体检测方法

    基于遥测的移动舱室内气体检测方法 在各种密闭的移动舱室环境中,存在犬量气体状态污染,这些气体污染
    发表于 11-16 10:11 1420次阅读
    基于遥测的移动舱室内<b class='flag-5'>气体检测</b>方法

    基于MVC模式的地图控件的设计

    MVC模式增加了程序的可维护性、可扩展性。文中在研究、分析MVC设计模式思想的基础上,应用MVC设计模式
    发表于 02-22 11:08 23次下载
    基于<b class='flag-5'>MVC</b><b class='flag-5'>模式</b>的地图控件的设计

    气体检测方法和气体检测器设备

    气体检测方法和气体检测器设备,下来看看。
    发表于 12-17 15:26 13次下载

    02_MVC设计模式_上课源码

    jsp-mvc设计模式
    发表于 07-10 11:02 0次下载

    mvc模式的优缺点

    MVC模式的优点:各施其职,互不干涉在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其它层中的代码。
    发表于 11-17 16:42 4239次阅读
    <b class='flag-5'>mvc</b><b class='flag-5'>模式</b>的优缺点

    NDIR气体检测器解决方案和PID气体检测器解决方案

    这是 ADI 公司关于气体检测器的第二篇文章,包含 NDIR(非色散红外)气体检测器解决方案和 PID(光离子)气体检测器解决方案。第一篇文章介绍基于电化学传感器的微功耗有毒气体检测
    发表于 12-29 18:39 38次下载
    NDIR<b class='flag-5'>气体检测</b>器解决方案和PID<b class='flag-5'>气体检测</b>器解决方案

    可燃气体检测仪和有毒气体检测仪的区别

    气体检测仪在我国工业领域中的应用范围很广,应用价值也越来越被人们所重视与关注。我们知道在气体检测仪的分类中有:有毒气体检测仪、可燃气体检测仪、便携式
    发表于 04-15 10:01 2078次阅读

    什么是气体检测仪,它的作用是什么

    什么是气体检测仪,武汉聚舟科技带你了解什么是气体检测仪,气体检测仪是一种可以检测气体的仪器,气体检测
    发表于 06-07 17:11 4024次阅读

    气体检测仪必备的七大功能

    气体检测仪的设计目的是帮助您更容易地做出安全决定。新的“智能”功能不仅能够提供清晰的气体检测状态和传感器信息,而且能够提醒报警后该做些什么。这样您无需为解读气体检测仪报警读数而费神。
    发表于 07-29 09:52 1865次阅读

    气体检测仪的分类有哪些?

    气体检测仪是一种气体泄露浓度检测的仪器仪表工具,气体检测仪可检测硫化氢,一氧化碳,氧气,二氧化硫,磷化氢,氨气,二氧化氮,氰化氢,氯气,二氧
    发表于 09-16 10:56 5798次阅读

    气体检测装置开源分享

    电子发烧友网站提供《气体检测装置开源分享.zip》资料免费下载
    发表于 11-24 10:03 2次下载
    <b class='flag-5'>气体检测</b>装置<b class='flag-5'>开源</b>分享