TencentOS tiny危险气体探测仪产品级开发重磅高质量更新(Flash都快用完了!)

前面我开源发布了一个初级版本的开源TencentOS tiny危险气体探测仪的项目,受到开源社区不少小伙伴的好评和支持,总之正面的反馈很多,链接如下:

TencentOS tiny危险气体探测仪产品级开发

汪哥也在TencentOS tiny云+社区沙龙online的分享会上提到了我的开源项目:

完整视频回放如下:

俗话说得好:"拉屎不能拉一半!",既然大家都这么支持我,好的东西,那咱就得给它继续不断的完善,就得给它拉完。初级版本上虽然实现了很多产品应有的功能,但是想要达到一个真正产品都有的功能那还差得远,并且主页面切换图标时伴随着严重的刷屏现象(原来是一个BUG,睡了一觉后就被我解决了),本次基于上次的项目进行了大动作调整,在代码结构上也进行了进一步的升级迭代,那到底优化和改善了一些什么内容呢?让我们结合下面的框架图和视频一睹为快:

此次更新,最重要的就是把我们前两天公众号写的LCD软件框架给用起来了,这相当于就是一次实操:

在基于LCD驱动框架上,在整个项目上实现了对驱动和设备的隔离,也就是说,在用户APP层次,不会再直接去操作LCD驱动了,而是通过驱动框架去操作LCD驱动,文章链接如下:

自己动手撸个简单的LCD驱动框架吧!

1、项目更新列表

  • 采用表驱动方式管理LCD驱动里的指令

  • 函数拓展方法实现初始化和应用逻辑隔离

  • 重构LCD软件框架,实现高内聚、低耦合

  • 解决主页面切换严重刷屏现象的BUG

  • 增加wifi连接、服务器连接UI

  • 增加长时间不操作自动休眠模式

  • 修改工程配置页面菜单项

针对工程配置页面,主要修改和增加了以下项:

  • 系统参数(报警、数值、网络、灵敏度)

  • 时间设置(年、月、日、时、分、秒)

  • 密码设置

  • 仪器信息

关于系统参数,是将之前工程配置的一些功能做了一个大整合,将之前的一些参数放在一个页面里进行配置。

  • 增加了数据上传功能

1.1、采用表驱动的方式管理LCD驱动里的指令

这个技巧主要是之前学习AliOS things Development Kit开发平台的SDK里看到的,于是照葫芦画瓢我就给抄过来了,这种方法在Linux驱动代码编写里也是非常常见的,原厂的人貌似都爱这么写。

数据结构和相关宏定义如下:

在LCD驱动里定义一张配置表:

最后通过一个函数来执行它:

这样原来的LCD初始化函数看起来就显得非常简洁了,如下:

1.2、函数扩展方法实现初始化与应用逻辑隔离

这个方法之前在公众号是写过的,在学习RT-Thread操作系统的时候发现了这个优秀的技巧,于是我就给白嫖过来了,文章链接如下:

RT-Thread编程高阶用法-函数扩展之$Sub$$与$Super$$

在程序上我是这么来做的:

在main函数里实现如下:

这里直接就调用了OS初始化部分:

这样子,一堆CubeMX生成的乱糟糟的初始化程序就就没了,看起来心情瞬间都好了很多!在做这个步骤之前,我在CubeMX的工程上已经屏蔽了CubeMX生成main函数的方法,而是我自己去写所谓的main函数。

1.3、重构LCD软件框架,实现高内聚、低耦合

这部分主要是将原工程操作LCD的方法通过之前写的一个LCD驱动框架替代了,替换这个框架基本上对整个工程是一次大的修改,耗费了我不少时间和精力,因为这个项目最烦的最核心的就是UI界面逻辑了;

凡是应用与LCD打交道的部分,都通过LCD驱动框架进行管控,这样就实现了隔离,也就是说,后面我换一个同分辨率的RGB LCD,哪怕型号,操作方法都不一样,都只需要修改设备操作的接口即可,如下:

驱动对接的接口是一行都不需要修改的,也就是和应用打交道的部分,如下:

这样不费吹灰之力即可完成显示模组的更换。

1.4、解决主页面切换严重刷屏现象的BUG

主要是写的时候不小心手贱加多了这么一句,这句代码的含义是以一种颜色填充或者清空某个矩形区域,多了一段这样的代码,相当于增加了一个区域的刷屏步骤,所以时间也就增加了,进而看起来体验感就很不好;真正的产品,这种效果是绝对不允许在客户面前出现的,因为这样会显得你的产品非常low,将这句代码去掉后,刷屏现象解决。

1.5、增加wifi连接、服务器连接UI

增加这两个图标主要是后面无线数据上传功能的指示。

如下图所示:

在软件逻辑上,当wifi连接成功的时候,显示左边的wifi连接图标,当服务器连接成功的时候,显示右边服务器连接成功的图标。

1.6、增加长时间不操作自动休眠模式

原来休眠模式是通过在主页面长按左键实现的,但是在现实产品应用中,如果长时间不操作设备的话,我们应当让它进行休眠模式,来达到一个省电的功能,这里我只是做了关背光的操作:

这里的软件逻辑主要是通过在任务中变量的计数方式实现,精度并不是特别的准,但已经可以实现自动休眠功能了。

1.7、修改工程配置页面菜单项

原来的菜单是这样的:

现在的菜单是这样的:

新的菜单将阈值(灵敏度)、报警设置(报警)、调试模式(数值)整合到了系统参数这一项上,系统参数上还增加了网络开关,如下:

时间设置页面如下:

这里主要是设置年月日时分秒,但是小熊派上并没有给RTC带上纽扣电池,所以掉电的话这个RTC就失效了,但是这个功能我们还是要做上去,万一后面小熊派改版了呢?

密码设置页面如下:

关于密码设置,这里提供了一个4位密码设置的功能,默认密码是0000,该密码主要是用于从主页面进入工程配置的一个权限验证,因为我们的产品出去给客户使用的时候,有时候客户并不想别人随便设置他机器的参数,所以做一个权限验证就很有必要了,并且做了一个简单的加密、解密的功能,如下:

当然,如果你有这样的想法:直接把SD卡取下来改参数那就没办法了,但是如果咱们是做存储介质虚拟U盘的时候(除SD卡外),比如SPI FLASH、NAND FLASH,只需要将对应的PC往存储介质的写函数屏蔽即可,这部分后续有新项目的时候着重讲解一下,因为小熊派不支持,所以做不了,很抱歉!

在进入工程配置页面前,密码输入页面和密码设置页面显示是一样的,唯一的区别就是在密码输入页面输入出错的时候,界面上会提示密码错误,请重新输入,而密码设置是不管的,如下:

关于仪器信息,这部分和前面的一样,没有修改。

1.8、增加了数据上传功能

这个功能主要是实现了检测数据上传到OneNet平台,后续可以对接其它的IOT平台,这个之前写TencentOS tinyAT框架文章的时候就已经说过如何来实现了,文章连接如下:

还在用传统的方式驱动一个通信模组?不如一起来学习下TOS的AT模组框架吧!

唯一不同的是逻辑功能上,这里需要配合参数设置里网络的那一项,只要网络设置为开的情况下且当前设备报警了数据才会往云平台上传,如下:

以下是云平台上最新的展示效果:

WIFI SSIDWIFI密码以及服务器IP和端口号的存储是放在配置参数里的,如下,当然之前增加了一些选项也需要定义在配置表上,比如密码、网络标志等等;具体怎么实现的请读者自行研究,如果有不懂的地方欢迎与我一起讨论:

以下是默认的初始化参数表:

后续设置参数时需要调用各个参数的设置函数,即可以写入SD卡内的ini文件,下次开机时候就会以当前设置的参数加载了:

2、思考

还有没有别的方法继续改善这个项目呢?比如如何让代码体积变小?是否还存在产品开发上不合理的逻辑?是否还可以继续做到其它软件层次更加高内聚,低耦合?等等。。

欢迎留言区征集各位小伙伴的意见,我将会继续改善并维护这个开源项目。

本节代码已同步到码云的代码仓库中,获取方法如下:

1、新建一个文件夹

2、使用git clone远程获取该项目

项目开源仓库:

https://gitee.com/morixinguan/tencent-os-tiny-hazardous-gas-detector.git

我还将之前做的一些项目以及练习例程在近期内全部上传完毕,与大家一起分享交流:

3、2020研华工业物联网伙伴峰会报名

为了避免本公众号对物联网感兴趣的小伙伴错过这次峰会,我决定再发一次,这个是我上家入职单位研华科技发起的活动,含金量真的非常高,因为我本人曾经作为研华的一份子就有去听过类似的讲座;如果有兴趣可以扫一下二维码报名,报名成功的小伙伴可以获取2020物联网案例精选集电子书一份。

公众号粉丝福利时刻

这里我给大家申请到了福利,本公众号读者购买小熊派开发板可享受9折优惠,有需要购买小熊派以及腾讯物联网开发板的朋友,淘宝搜索即可,跟客服说你是公众号:嵌入式云IOT技术圈 的粉丝,立享9折优惠!

往期精彩

自己动手撸个简单的LCD驱动框架吧!

一口气搞懂「文件系统」,就靠这 25 张图了

做了这么久的技术自媒体,杨工,您有什么感想要分享的吗?

预见物联新未来  2020研华工业物联网伙伴峰会报名开启

入门干货!基于研华EPC-R5770边缘计算系统的语义分割网络实现

觉得本次分享的文章对您有帮助,随手点[在看]并转发分享,也是对我的支持。

Engineer-Bruce_Yang CSDN认证博客专家 嵌入式硬件 单片机 arm开发
本科毕业于华南理工大学,现美国卡罗尔工商管理硕士研究生在读,曾就职于世界名企伟易达、联发科技等,多年嵌入式产品开发经验,在智能玩具、安防产品、平板电脑、手机开发有丰富的实战开发经验,现任深圳市云之手科技有限公司副总经理、研发总工程师。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页