基于云服务器与微信平台的水表系统设计

2018-10-15 06:08:24
单片机与嵌入式系统应用 2018年10期
关键词:水表二维码客户端

(南京理工大学 机械工程学院,南京 210094)

引 言

目前医院使用的大多是IC卡水表(热水),需要用水必须要有IC卡。显然这种用水方式并不适宜流动性极大的病人及其家属们,而且办卡手续繁琐,充值麻烦。近年来微信支付逐渐成为流行的支付手段,无现金支付极大便利了人们的生活,也使IC卡水表被替代成为可能。本文基于此种情况设计了一种可以使用微信支付的水表,用户只需关注公众号并注册充值,使用手机微信扫描水表上的二维码,即可用水。

1 系统总体方案设计

微信水表系统的整体结构如图1所示。

图1 系统总体框图

该系统分为两个部分:水表控制终端以及搭建在微信平台和腾讯云服务器上的服务系统。水表控制终端主要功能是通过以太网络与云服务器连接并进行数据传输,根据云端传来的信息完成相应的操作,并在用水结束后将用户的使用信息及时反馈给云端。云服务器接收终端数据并存储,借助微信公众平台与手机端微信实现信息交互。用户利用手机微信扫描水表终端的二维码,云服务器解析扫码信息后通知对应设备开阀放水。

2 水表终端的软硬件设计

水表终端由主控芯片、阀门控制电路、LCD显示电路、水温测量电路、网络通信电路5部分构成。

2.1 主控芯片的选择

考虑到功耗以及性能问题,水表终端选用TI公司研发的芯片MSP430F149。该芯片是一种采用低功耗技术的混合信号处理器,其内配置有大量的外围模块且支持JTAG,调试方便,易于开发。它具有5种低功耗模式,工作状态下电流也仅为250 μA/MIPS[1],且具有快速唤醒的功能,仅需6 μs就可以将它从待机状态转换为工作状态[1]。利用该特性,水表终端在非使用状态时,将芯片切换到低功耗模式能够降低整个系统的耗能。

2.2 阀门控制电路

图2 阀门控制电路

图2是阀门控制电路图。该电路由复合晶体管阵列ULN2003、继电器和电磁阀构成。因为MSP430F149引脚的输出电流最大为6 mA,而要使继电器能够工作,电流至少要达到50 mA,所以在其中加上了ULN2003芯片,ULN2003是一个七通道非门电路,其驱动电流最大可达500 mA,能够满足驱动要求。当P5.5引脚输出为低电平时,ULN2003输出高电平驱动继电器开始工作,继电器线圈通电吸引开关闭合,电磁阀打开,水管出水。用户接完水按下关闭按钮,引脚P5.5变为高电平,继电器断电,电磁阀线圈也断电,电磁阀阀门关闭,水就会停止流出。

2.3 网络通信电路

要完成与云服务器的通信,必须要使水表能够接入网络,因此本设备选用了W5500以太网模块。W5500芯片整合了物理层、数据链路层、网络层和传输层,并在内部利用硬件实现了TCP/IP协议栈,是一款全硬件TCP/IP嵌入式以太网控制器。它只需要对Socket进行编程就能够实现网络数据传输,而不需要像传统的以太网芯片一样还需要在微控制器内嵌入TCP/IP 协议,这可以大幅降低系统开发时间。W5500与主芯片通过SPI接口连接,连接情况如图3所示。

图3 网络模块电路

W5500支持TCP、UDP、ARP等协议,基于稳定性考虑,本设计采用TCP方式通信。水表终端处于客户端模式,在初始化过程中,除了要配置自身的网关、子网掩码,物理地址和IP地址,还需要设置服务器的IP地址。

2.4 其他电路

图4 温度测量电路

水温测量模块本文选用的是高温型DS18B20防水型数字温度传感器水温探头,其感温范围为-55~125 ℃,单总线接口,3~5 V电压供电,精度高,抗干扰能力强。连接电路如图4所示。在水表进入工作模式后,CPU每分钟都会读一次温度数据并显示。水表的显示模块选用的是LCD12864,在此不再赘述。

2.5 水表终端软件设计

水表终端的控制流程如图5所示,当系统上电并初始化完成后,系统进入低功耗状态,直到按键中断将其唤醒。

图5 终端软件流程图

进入工作模式后,终端向云服务器发送连接请求,与云服务器经过三次握手后建立稳定连接[2]。用户利用手机微信扫描终端的二维码,服务器解析二维码中蕴含的设备号后,通知对应设备开启。云服务器能够同时接入的终端数目有限,因此在用户用水完成后,水表会主动断开与服务器的连接,从而减轻服务器的负担,同时水表也进入休眠模式,降低功耗。

3 服务器端的软件设计

考虑到要与微信平台对接,本系统选用的是腾讯云服务器。服务器上主要实现两个功能,一是与水表终端连接,从而实现对终端的控制以及数据传输功能,二是与微信平台对接,从而使用户可以利用手机微信打开设备、查阅信息以及缴费等。

3.1 服务器与终端的通信

云服务器与终端利用TCP方式通信,两者之间的连接由终端主动发起,因此服务器创建serversocket之后需要先调用accept函数监听指定端口。因为服务器要与不止一个终端相连,而服务端对客户端连接请求的处理是同步进行的,也就是说如果服务器端已与某个客户端建立连接,即使监听到来自新的客户端的连接请求也不能立即回应,必须要先跟当前的客户端通信完之后才能处理新的连接请求。因此服务器程序设置为在主线程循环监听客户端的连接,每接收到一个Socket请求就新建一个工作线程来处理它,如此便能流畅地与多个客户端连接[3]。工作线程流程如图6所示,其中deviceID是全局变量,默认值为0。用户扫码之后,二维码中的设备号被解析后发给云服务器,将此值赋给deviceID。

图6 工作线程流程图

3.2 云服务器与微信平台的连接

云服务器能够与微信平台进行数据交互,除了需要微信公众号处于开发模式外,还必须要保证云服务器上的应用程序与微信平台的接口相连,确保云服务器收到的请求来自微信平台,因此服务器上需要添加请求校验程序,其校验流程如下:

① 接收到校验请求后,提取signature、nonce、timestamp以及echostr四个参数。

② 将token、nonce、timestamp三个参数按字典序排序并拼接成字符串。

③ 对字符串进行sha1加密,与signature比对,如果两者相等,则表明所用的服务器与微信服务器成功对接,此时返回参数echostr;如果不相等,则表明对接失败,检查配置程序并修改后重新尝试对接。

云平台和微信平台成功连接后,用户就可以在手机微信端完成充值、查询用水记录等操作。

手机端与云服务器之间的信息交互实际上是以微信平台作为中转站的。三者之间的通信流程描述如下:

① 用户利用微信客户端做出某种操作(比如扫码),该操作的信息首先会被微信平台接收到[4]。

② 微信平台收到消息后,将此消息通过HTTP POST方式传到腾讯云服务器(本系统使用的云服务器)[4]。

③ 云服务器收到消息后进行处理,然后将结果返回给微信平台。

④ 微信平台将处理结果发送给手机微信客户端。

3.3 微信二维码生成

每台水表终端都有唯一的设备号,基于此服务器才能准确找到对应的设备。因此如何将这个设备号传递给云服务器,让云端知道该通知哪台水表开阀放水是个重要问题。本系统采用二维码来区分不同设备。

二维码通过黑白相间的图案来记录信息,近年来,其作为一种优秀的信息存储手段,已经被广泛使用。因为本系统使用的是微信服务,而且其公众号开发模式可以提供生成带参数二维码的接口,所以本系统选用的是微信二维码。

用户使用手机微信扫描水表上的二维码,解析出设备号之后发送到云端,从而完成对应设备的开启。

4 系统测试

在实际测试中,扫描水表二维码后,水表阀门顺利打开,手机微信端的返回信息正确,如图7所示。点击微信公众号上的“消费记录“可看到自己的账户余额和花费,如图8所示。微信水表系统预期的功能基本实现,通信正常。

图7 测试结果一

图8 测试结果二

结 语

猜你喜欢
水表二维码客户端
可以吃的二维码
二维码
童话世界(2020年32期)2020-12-18 18:15:41
水表普查与水表挂接子系统建设
供水技术(2020年6期)2020-03-17 08:18:34
水表检定装置不确定度分析计算的相关思考
防冻水表
县级台在突发事件报道中如何应用手机客户端
传媒评论(2018年4期)2018-06-27 08:20:24
孵化垂直频道:新闻客户端新策略
传媒评论(2018年4期)2018-06-27 08:20:16
基于Vanconnect的智能家居瘦客户端的设计与实现
电子测试(2018年10期)2018-06-26 05:53:34
让严肃的二维码呆萌起来
学生天地(2017年10期)2017-05-17 05:50:46
二维码,别想一扫了之