今日头条
1 前言
近些年来,随着科技的更新迭代,IoT行业迎来了一个快速膨胀发展的窗口期,我们随之可见的是,越来越多的智能化产品进入到了我们的日常生活中,包括发展比较早的智能家居类产品、
智能家电
类产品,还有近些年非常火热的智能
穿戴
类产品,这些都得到了市场很好的反馈。
科技不仅能给人们带来幸福感的提升,而且随着智能设备越来越发达,在某些特定的场景下,它往往还能救人于危难之时。
本文要讲述的正是这样一套智能的IoT系统在家庭环境下的部署应用,它能够帮助人们解决一些危险难题。
2 项目简介2.1 项目名称
基于N32G457和RT-Thread全新打造的私有化定制家用式智能告警系统
2.2 设计思路
主体思路采用 N32G457
芯片
作为终端侧的主控MCU,搭载国产实时
操作系统
RT-Thread,外接 ESP8266 Wi-Fi 模块,以及若干用于检测的
传感器
,比如烟雾传感器、酒精传感器、天然气传感器、空气质量传感器等,将检测的信息转换成可能产生的告警数字信号,通过板载告警
指示灯
和告警
警报器
本地输出告警信息,同时通过Wi-Fi的网络能力,将告警信息透过网络直接推送到关注告警信息的相关人员,实现相对实时的安全解决方案。
2.3 主要解决的问题
主要的解决的问题场景是普通家用环境下的危险因素告警检测,这其中包含最基本的烟雾检测(对应明火燃烧)、酒精检测(对应易燃液体)、天然气泄漏检测(对应易燃易爆)、空气质量检测(对应不明物品烧焦产生有害的气体充斥在家庭环境中)。
还有一个家庭环境中,上述的危险因素会成倍
放大
的场景是,家中只有独居老人的时候。比如,我的家人就很经常做饭忘了关天然气,但是我们年轻人会经常发现并及时提醒他们,才不至于酿成悲剧。但是,独居老人就是很大的问题,因老人们年纪上来了,嗅觉、味觉、听觉、视力等多项身体机能指标都下降得很厉害,面对上述场景,也难快速地发现危险并做出有效的解决措施,那么这就需要一套更加智能的解决方案及时发现这些危险,以最现眼最宏观的方式告知独居老人,及时接触风险。
我这个智能解决方案能够很好地解决这个场景问题,一方面它自带了多种探测传感器,能够及时发现危险;同时当危险发生时,通过告警指示灯闪烁和警报器盛宴告警,最大程序地提醒独居老人,危险已经发生,应尽快解除危险;另一方面,这个智能系统支持独居老人的子女订阅关注告警系统推送的危险信息,通过 微信 的及时性,直接传达到子女手中,这也能够保证危险发生的第一时间能够得到子女的关注和提醒,得以顺利协助老人解除危险。
2.4 项目创新点
3 系统架构介绍3.1 系统核心架构图
整个系统的核心架构图如下所示:
从上面这个核心架构图中,我们可以看到整个IoT系统组成,包括智能设备终端侧、WEB配置前端侧、智能IoT系统平台后端侧,同时还有
手机
移动端。下面就整个系统的几大重要组件,我会一一进行简要讲解。
3.2 终端侧
终端侧主要承载的是现场环境要素的检测,同时做一些边缘侧的应用逻辑处理,还需要具备对外网络的通讯能力,能在第一时间把紧要消息通过网络通道
传输
出去。
终端侧包括的核心组件有:国民技术的 N32G457,搭载的是国产实时操作系统 RT-Thread,同时外设板载有 ESP8266 Wi-Fi通讯模组、告警指示灯、声音告警器、烟雾传感器、酒精传感器、天然气传感器、空气质量传感器、若干按键等等。
终端侧不仅包含设备硬件,还需要对应的固件软件,两者相辅相成,共同完成终端侧的功能逻辑。
3.3 后端侧
这里的后端侧,从细分来看,总有4部分:
3.4 前端侧
前端侧包括的是开源智能家居系统 Domoticz 的配置前端,通过这个前端页面,可以快速地创建虚拟的智能产品,通过对接数据协议,实现对智能设备的管理和展示。
同时这个前端页面可以 兼容 到PC端浏览器和移动端浏览器,带有用户登陆管控功能,有利于维护数据和产品的安全。
当它在移动端使用时,可以实现无APP,直接使用手机浏览器就够了,不会过多地消耗手机的存储空间,很轻量化,依赖相对较少。
它与后端的 Domoticz 是典型的 B/S网络架构模型,与之相对应的有 C/S网络架构模型。
B/S网络架构,指的是 Browser/Server(浏览器/服务器) 架构,就是只需要安装维护一个服务器,而客户端采用浏览器的方式来运行软件。它是随着Internet技术而兴起的,是对C/S结构的一种变化和改进。主要利用了WWW浏览器技术,结合多种Script语言和新技术,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。它是一种全新的软件系统构造技术,它只需要安装一个浏览器和数据库,就可以让浏览器通过Web Server同数据库进行数据交互。
C/S网络架构,它是一种网络体系结构,其中客户端是用户运行应用程序的PC端或者工作站,客户端要依靠服务器来获取资源。C/S架构是通过提供查询响应而不是总文件传输来减少了网络流量。它允许多用户通过GUI前端更新到共享数据库,在客户端和服务器之间
通信
一般采用远程调用(RPC)或标准查询语言(SQL)语句。
B/S网络架构的基本特征:
B / S架构的优点:
(1)该架构不需要安装客户端,可以直接运行在Web浏览器中;
(2)B/S架构可以直接放在Internet网络上,从而达到通过某些特权来控制多客户端访问的目的以及交互方式;
(3)B/S架构由于不需要安装客户端,因此不存在更新多个客户端以及升级服务器等问题。
B / S架构的缺点:
(1)在跨浏览器中,B/S架构不是令人最满意的架构,时常容易出现页面兼容显示的问题;
(2)在速度和安全性方面,仍然需要花费巨大的设计成本,这是B/S架构中最大的问题;
(3)客户端服务器交互是请求响应模式,通常需要刷新页面,这是不愿意看到客户的。但是这个缺点在Ajax受欢迎之后该问题得到了一定程度的缓解。
网络C/S架构的基本特征:
(1)客户端进程包含特定于解决方案的逻辑,并提供用户与应用程序系统其余部分之间的
接口
。服务器进程充当管理共享资源(如数据库,
打印机
,调制解调器或高性能处理器)的软件引擎。
(2)前端任务和后端任务对计算资源有着根本不同的要求,例如处理器速度,内存,磁盘速度和容量以及输入/ 输出设备。
(3)客户端和服务器的硬件平台和操作系统通常不相同。客户端和服务器进程通过一组明确定义的标准应用程序接口(API)和RPC进行通信。
(4)C/S架构的一个重要特征是可扩展性,它们可以水平或垂直缩放。水平扩展意味着添加或删除客户端,工作站只会对性能产生轻微影响。垂直扩展意味着迁移到更大更快的服务器
计算机
或多服务器中。
WEB端的显示配图如下所示:
3.5 移动端侧
这个移动端侧,包括两个部分,一个是前面已经提及的 Domoticz 在手机移动端浏览器依然可以保持很好的显示兼容性,也能够完成PC浏览器一模一样的功能;但能放在移动端,它的便捷性就一下子提升了一个级别,并且无APP模式,大大提高了客户使用的意愿。
另一个部分就是我们的 国民APP微信,微信凭借着 10 亿月活、8 亿日活的运营数据牢牢控制住社交APP的头把交椅,几乎可以说是人人离不开微信,它确确实实地人们的生活带来了便利。
通过对Domoticz系统的改装,使得它在原本的事件通知上也支持推送消息到微信客户端,这也将大大提升系统产品的易用性和可落地性。
4 系统设计说明
下面就系统的各个组件的设计,做简要的说明。
4.1 硬件部分
硬件部分主要分为四大部分:MCU主控、Wi-Fi模组、各类传感器、输出设备。
4.2 软件部分
软件部分主要分为两部分:终端固件部分和Domoticz消息推送定制部分。
4.2.1 终端固件开发
终端固件主要包括四大部分:N32G457的原厂BSP、RT-Thread实时操作系统、ESP8266相关的配置代码使能、个性化的应用逻辑代码。
其中N32G457的原厂BSP基本不动,原厂和相关开发者已经适配好了;通用的RT-Thread操作系统的代码也不在此处的修改中,直接复用已有的代码,这里使用的版本是 4.0.2 。
ESP8266相关的AT、网络组件代码也是现成的,使能配置之后就可以直接用了,还是非常的方便。不过这里其实我也是踩坑了,下面的项目复盘会讲到。
所以这里重点讲一下,应用逻辑的代码:主要包括几个传感器的检测驱动、告警指示灯的控制逻辑、音频播放模块的驱动、按键触发功能的处理等。
整个应用软件部分的程序框架如下图所示:
其中:
Main-Thread :执行整个应用的初始化,负责管理各个子线程的同步和衔接,比如告警信号产生时,触发告警信号的对外上报,正是由Main-Thread来执行的。
System-Config :用于完成整个系统相关的属性配置,比如传感器探测的周期设定、传感器接入的GPIO设定、UART口的分配、EMQ后端定制的配置、Domticz后端传感器编号的配置等等;这里的配置项都是全局生效的。
MQTT-Thread :承载整个应用对外发送和对内接收的网络数据通道,告警信息的上报和传感器数据的上报,都深度依赖这个线程。
WiFi-Thread :本线程主要用于定时探测Wi-Fi网络的有效性,通过对网络设备节点的判断,为应用的其他逻辑功能提供一定的参考。
Sensors-Thread : 由于所选用的几种传感器都是同一类传感器,且都是IO类的传感器,所以通过列表的形式把他们定义在一起,方便轮询管理;主要的工作就是定时采集数据,判断是否有对应的传感器触发了告警。
Alert-
LED
-Thread :本线程要做的是事情就是在Sensors-Thread产生某一种或某几种告警信号后,里面通过LED的闪烁,达到以视觉冲击的告警目的。
Alert-Sound-Thread :本线程与Alert-LED-Thread线程类似,同样都是处理告警信号的对外传递,只不过它用的是声音的听觉冲击来达到告警的目的。它与Sensors模块通过邮箱来传递播报哪一条报警信息,这与Domoticz后端绑定的通知信息是对等的。
Key-Scan-Thread :这个线程需要做的事情,主要是当产生告警信号后,灯亮铃响时,可以通过按键来消除LED告警和声音告警,使得系统检测恢复到初始状态。
在软件设计过程中,所有涉及到线程间同步的机制,均采用信号量和消息队列来实现,主线程在这其中起到承上启下的作用。
总结一下,本次在使用RT-Thread操作系统的时候,使用到了其 串口设备驱动、GPIO设备驱动、AT组件、SAL 套接字抽象层、信号量、邮箱 等核心模块,整体使用上还是挺顺手的。
基本代码示意图如下所示:
4.2.2 Domoticz推送定制
这里主要的软件实现就是,就是将原本Domoticz中需要通过Email推送出去的消息,转到通过HTTP接口推送到微信中,从而关注了对应微信的人员就可以收到对应的告警信息推送。这里用到了一个python脚本实现HTTP接口,然后POST消息到微信中。
基础的改动代码正如下图所示:
4.3 私有化部署的 IoT 系统
这里提及的私有化部署,主要是将IoT后端系统部署在个人云服务器上,以便于通过公网快速访问;同时,由于是私有化部署,不受限于任何的IoT云平台,这对比外面普通对接阿里云平台、涂鸦云平台、微信云平台、小米云平台、百度云平台等等,是有一个的优势的;至少在个人家庭数据的沉淀和数据安全上,没有那么地担心。
这里的系统部署,包括几个部分:
5 项目实施过程
主要实施过程如下所示:
1)搭建后端系统,先把EMQ这个MQTT broker搭建起来,使得终端和后端的数据通道得以建立起来;
2)部署安装Domoticz,可选用zip包解压安装或源码编译安装,但由于要定制化告警消息推送到微信,这里强烈建议使用源码级编译安装;当Domoticz安装运行起来后,其对应的SQLite数据库也是同步在工作的;这时WEB端的访问服务也是同步开启了;
3)通过Domoticz的WEB端配置,建立MQTT类型传感器,同时在平台建立与终端一一对应的虚拟传感器;这一步完成之后,便可以使用MQTT.fx等MQTT调试工具模拟对Domoticz上的虚拟设备进行状态推送,看其对应的状态是否会发生改变;
4)搭建企业微信的环境,包括创建一个企业微信账号,再在企业微信下创建一个应用,取得企业ID、应用ID和应用私钥;有这个要素之后,就可以使用微信推送的HTTP接口做消息推送的模拟
测试;
5)再在Domoticz源码上集成应用HTTP接口推送(告警)消息到微信客户端的功能代码;
6)开发终端的固件,调试Wi-Fi通讯,MQTT上下行,以及各个传感器的工作;
7)需要关注微信推送消息的人员扫码 关注 企业微信中对应的应用,同时打开微信客户端的通知显示权限,这样当新的消息通过企业微信应用推送下来时,手机端就会弹窗提示;
8)终端工作起来,尝试触发一些告警状态,观察终端的处理逻辑和状态上报到Domoticz的数据更新,同时观察告警消息往微信客户端的推送情况。
通过上述一系列的实施之后,整个私有化部署的家用式智能告警系统就跑起来了,enjoy it !
6 项目效果显示
相关的展示图片和演示视频,见下文:
【项目展示图片】
【项目演示视频】见 B站视频。
【项目开源代码】n32g457_esp8266_smart_home
7 项目复盘7.1 项目踩的那些坑
7.2 项目带来的启发
7.3 未来的一些想法和规划
全部0条评论
快来发表一下你的评论吧 !