基于窄带物联网的图书馆座位智能管理系统设计

2022-08-02 10:10戴晶华
电子制作 2022年13期
关键词:窄带串口座位

戴晶华

(内蒙古自治区法治培训中心,内蒙古呼和浩特,010070)

0 引言

长时间占用图书馆的座位,导致图书馆座位的使用效率降低,影响其他读者对公共资源的使用。虽然图书馆的管理员也在进行管理,但工作量很大,也存在监管不到位的情况。因此,开发一种可对图书馆座位进行远程实时管理的智能管理系统,以提高图书馆座位的利用效率。将基于窄带物联网这一具有覆盖广、连接多、成本低、功耗低等特点的新兴技术应用到图书馆座位智能管理系统中,具有极大的开发前景和极强的现实意义,可明显提高图书馆座位的使用效率。

1 系统研究方案

1.1 系统整体概述

本系统结构如图1所示,由以下三个部分构成:座位信息采集终端、云平台端及应用服务器端。座位信息采集端负责实时检测图书馆内各座位的使用情况,当检测到其状态发生变化时,通过窄带物联网模块将数据发送至云平台端。云平台端负责接收座位信息采集端上传的数据,将其解码后转发给后台应用服务器端。应用服务器端负责处理云平台及用户的请求,将云平台发送来的数据解析后存入数据库,当用户访问时,从数据库中取出数据,并将前端界面返回给用户。

图1 系统结构框图

1.2 硬件实现方案

1.2.1 座位信息采集端

座位信息采集端由多组座位信息采集终端构成。各终端主要由以下三部分构成:热释电红外传感器、Arduino微控制器、窄带物联网模块。

采用HC-SR501热释电红外传感器模块安装于桌下,每个座位所对应的位置上方。向下检测用户腿部的移动信号,当用户腿部发生移动时红外辐射温度发生变化,传感器内失去电荷平衡,向外释放电荷。通过该模块可将用户的移动信号转换为数字电信号,供后续电路处理。

采用Arduino Nano微控制器作为座位信息采集端的核心,处理分析热释电红外传感器的信号并通过窄带物联网模块发送数据。Arduino Nano是Arduino USB接口的微型版本,具有14路数字输入/输出口、一路串口,且其尺寸较小,在满足本系统设计的同时可最大程度上缩小座位信息采集终端,使其便于放置。

采用以具有高性能、低功耗等特点的移远BC95-B5无线通信芯片为核心的NB101窄带物联网模块来发送数据,其体积较小,在满足终端需求的同时,最大限度的减少了座位信息采集终端的体积。

综上所述,在各图书馆内,各桌下放置座位信息采集终端来采集各图书馆内各座位的使用情况,以构成座位信息采集端,完成采集图书馆内座位信息的要求。

1.2.2 云平台端

由于采用的窄带物联网模块的核心为BC95电信版本,遂采用中国电信物联网平台,作为云平台对数据进行解码等处理。该云平台可在线设置解码器及配置文件对数据进行预处理,以便后续数据转发及后端服务器处理。

1.2.3 应用服务器端

应用服务器端使用阿里云的云服务器ECS。方便部署操作系统,不需进行内网穿透等烦琐操作,且免费提供 DDoS 防护、木马查杀、防暴力破解等服务。

1.3 软件方案

1.3.1 座位信息采集端

使用Visual Studio Code及Arduino插件部署Arduino开发环境,使用C/C++编写库及主程序。通过AT指令控制窄带物联网模块发送数据。

1.3.2 云平台端

使用中国电信物联网平台提供的在线开发环境,设置部署解码器及配置文件。

1.3.3 应用服务器端

(1)后端

在阿里云服务器上部署Ubuntu 16.04操作系统,搭建Python 3.6运行环境,使用Nginx和uWSGI进行Django的生产环境部署。使用Mysql数据库存储图书馆内座位信息。

当客户端(用户浏览器、云平台)发起http/https请求时,首先到达Nginx,Nginx收到请求后进行解析处理(如果是静态请求,直接返回静态页面),然后将请求发送给uWSGI,uWSGI对Nginx的请求进行处理,将处理后的结果发送给Django应用,Django应用收到请求之后,对请求进行处理,从Mysql中读取或存储数据,将结果返回给uWSGI,uWSGI收到Django应用的处理结果后,对该结果进行处理打包,发送给Nginx,Nginx将收到的结果返回给客户端(用户浏览器)。

(2)前端

使用HTML+CSS+JavaScript编写前端界面,并安装Bootstrap前端开发框架和jQuery函数库。使用HTML设置网页的内容,使用CSS设置样式,使用JavaScript控制网页的行为。

2 系统设计实现

2.1 系统硬件设计

本系统硬件设计主要为座位信息采集终端的设计。各热释电红外传感器信号线依次连接Arduino的D2到D9引脚,Arduino的D10引脚连接LED;D11和D12在程序中设置为软串口用来输出调试信息,方便调试,不使用时可悬空;串口通过短路帽连接窄带物联网模块,当烧写程序时,需断开短路帽,防止出错。

图2 硬件连线图

2.2 系统软件设计

2.2.1 座位信息采集端

程序流程如图3所示,安装终端前需在各终端的Arduino程序上设置该终端所在图书馆编号,楼层,桌子编号。上电后首先点亮LED指示灯,初始化串口,设置波特率为9600,设置D11和D12为软串口作为调试串口,设置波特率为9600。然后初始化窄带物联网模块,依次向串口发送AT指令,并向调试串口输出日志,指令依次为AT,确保AT指令正常;AT+CFUN=1,开启射频;AT+NCDP=180.101.147.115,5683(第一个参数为中国电信物联网平台窄带物联网接入IP地址,第二个参数为非加密端口),配置电信平台的CDP服务器地址;AT+CGATT=1,激活网络;AT+NNMI=1,配置核心板将接收到的数据直接输出到串口。最后初始化各座位对象(设置D2到D9引脚的类型为输入)。关闭LED指示灯。

图3 座位信息采集端程序流程图

为避免用户暂时离开座位或较长时间未移动产生误报,使用以下算法:逐个检测各座位对象当前状态,获取当前该座位对象所对应的座位的使用情况,与该座位对象上一次的状态进行对比,当状态发生变化时,分析其变化:若状态从已使用变化为未占用则为该座位对象添加计数器标志,当下一次检测该座位时,如果状态未变化,则计数器加一,当计数器值达到15分钟时,确认该座位未被占用,可以发送数据,如果座位状态变化回已使用,则清零计数器,清除计数器标志,保持该座位为已使用状态;若状态从未占用变化为已占用,且没有计数器标志则确认该座位已被使用,可以发送数据。

2.2.2 云平台端

云平台端接入流程如图4所示。

图4 云平台接入流程图

首先通过“天翼物联产业联盟”微信公众号或“天翼物联产业联盟”网站填写开放平台测试账号申请,账号申请通过后,收到账号和初始密码。登录中国电信物联网开发中心。

点击创建项目,填写“项目名称”、“所属行业”、“描述”等项目信息后,点击“创建”。

点击新建产品,选择自定义产品,在设置产品信息中填入产品名称、型号、厂商ID、所属行业、设备类型、接入应用层协议类型、数据格式等信息,点击创建。产品是某一类具有相同能力或特征的设备的集合称,除了设备实体,产品还包含该类设备在物联网能力建设中产生的产品信息、产品模型(Profile)、插件、测试报告等资源。

然后创建产品模型(也称Profile)用于描述设备具备的能力和特性。通过定义Profile,在云平台构建一款设备的抽象模型,使云平台理解该款设备支持的服务、属性、命令等信息。设置服务名称为Seat,添加以下五个属性用于承载上报的数据。

(1)楼层编号:floor,数据类型为int,范围为1-10,必选且只读。

(2)桌子编号:table,数据类型为int,范围为1-50,必选且只读。

(3)座位编号:seat,数据类型为int,范围为1-8,必选且只读。

(4)座位状态:status,数据类型为int,范围为0-1,必选且只读。

(5)图书馆编号:library,数据类型为int,范围为1-10,必选且只读。

由于座位信息采集端发送的数据在中国电信物联网平台做协议解析时,会转换成统一的json格式,以方便Web服务器使用。最终与产品模型建立映射后按协议顺序转换成如下json格式数据{"libra ry":1,"floor":2,"table":3,"seat":7,"status":0}。当设置完产品模型及解码插件后,可接入设备进行测试。最后设置应用订阅,设置订阅设备数据变化接口及订阅地址。

2.2.3 应用服务器端

Django为重量级Web框架,为使业务逻辑、数据、界面开发分离,解除耦合。使用MTV的框架模式,其中视图Views响应用户http请求,进行逻辑处理,模型Models描述服务器储存的数据(数据库的表),模板templates用来生产HTML页面(返回给用户的HTML页面是由模型和模板渲染出来的)。

2.2.4 数据库端

通过models在数据库PW中创建三个数据表:

在sm_library中 设 置id( 主 键)、name及introduce字段,用于存储图书馆名称及简介。

在sm_seat中设置id(主键)、library、serialID 、floor_num、equipID、status字段,用于存储图书馆编号,座位号,楼层,桌子编号,座位状态。其中设置library外键约束为sm_library的主键,使其保持数据一致性,禁止出现sm_library存储以外的信息。

在sm_order中设置id(主键)、seat、user、start_time、end_time字段,用于储存座位,用户,预订开始时间,预订结束时间。其中设置seat外键约束为sm_seat的主键,防止对未知的座位进行操作,扰乱程序操作。

3 系统调试结果

座位采集终端的实物连接如图5所示。在Visual Studio Code中连接Arduino的硬件串口,出口的输出结果如图6所示。当完成初始化后,连接在D2端口上的热释电红外传感器检测到移动,通过AT指令发送数据。一号图书馆的一楼一号桌一号座位状态为已占用。

图5 座位采集终端实物连接图

图6 串口输出数据

将数据中的status改为1后,由postman模拟发送数据,整体用户测试界面如图7所示,可见对应座位样式发生变化。

4 总结

本设计针对图书馆座位利用效率较低这一问题展开研究,采用热释电传感器采集座位使用信息,Arduino微控制器处理数据,窄带物联网模块传输数据,中国电信物联网平台解码转发数据,阿里云云服务器搭建应用服务器接收数据,B/S模式展示数据的方式完成以下功能:

(1)非接触式,实时主动采集座位使用信息;

(2)人性化判断座位的使用情况,排除了一些干扰;

(3)低功耗数据传输,节约系统维护成本;

(4)各端数据可视,方便数据追踪;

(5)图书馆管理员远程管理,用户远程查看,预订座位;

(6)图书馆内座位使用情况图形化展示,使数据展示更加直观。

猜你喜欢
窄带串口座位
直扩系统中的窄带干扰抑制
直扩系统中的窄带干扰抑制
巴士上的座位
MCS—51单片机中的多串口通讯技术的应用
换座位
下棋
一种基于窄带信道的加密数据传输处理方法
全国计算机等级考试机房准备工作探讨
微机串口的测试诊断
基于VC串口通信的实现