标识符,本代码中为socket_fd。Bind函数为socket_fd绑定一个名字。第二个参数是协议地址结构的指针。第三个参数是地址的长度。
第四步:监听是否有客户端连接。 代码如下:
if( listen(socket_fd, 10) == -1){
printf(\
error: %s(errno: %d)\\n\ exit(0); }
socket
Listen函数用来监听是否有客户端发起了连接,当有客户端通过connect函数发起连接时,服务器就回接到这个请求。Listen函数原型为int listen(int sockfd, int backlog);该函数共有两个参数。函数返回一个Int型数据,返回值为1表示是已经立连接。第一个参数表示函数要监听的是哪一个socket。第二个参数是设置有多少个socket可以排队连接。本代码中将其设为10个。Connect函数用于客户端像服务器发起连接的,其原型为int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
第五步:接收连接请求。 代码如下:
if( (connect_fd = accept(socket_fd, (struct sockaddr*)NULL, NULL)) == -1){
printf(\
error: %s(errno: %d)\ continue; }
Accept函数用于接收客户端所发送的请求,本代码中将返回数据保存到connect_fd中。利用accept函数建立连接后便可以进行通信。Accept
函数原型为int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);有三个参数。第一个参数表示服务器的socket,第二个参数表示为返回给客户端的协议地址,而第三个参数表示协议地址的长度。Accept函数返回一个int类型的数据,表示建立连接后与之连接的客户端之间的连接。当本次通信结束了,connect_fd也会结束。
第六步:发送之前通过串口接收到的由心电模块传过来的心率数据。 代码如下:send(connect_fd, sd, i, 0);
Send函数用于将蓝牙接收到的心率数据发送到客户端,send函数有四个参数,第一个参数表示建立连接的socket;第二个参数是char类型指针,用于存放发送的字符;i表示要发送字符有i个;第四个参数一般设置为0。
第七部:关闭socket连接
代码如下:close(fd);关闭socket连接后将结束本次的socket通信。 3.4 本章小结
本章主要研究介绍系统软件设计与实现。蓝牙串口模块通过AT指令建立连接通路,设置主从模式、模块名称、传输波特率等,并且完成主从模块的正确配对连接。本章简要介绍了交叉编译工具链的建立,实现了通过串口将蓝牙从模块传输的心率数据采集到移动机器人本体处理器上。于此同时,介绍了socket通信的原理,简要的对socket中各函数进行了介绍,并且按照socket通信的步骤逐一分析,实现将心率数据发送到远程客户端。
第四章 测试实验与分析
4.1 测试实验
系统整体实现后,需要对系统的功能、传输速度等进行测试。以便在后续对系统进行改进。因为心电测试模块是购买已成型设备,心电采集模块AD8232芯片稳定性极佳,但是对于其内部精确度等的调节工作目前还无法完成。下面主要进行对蓝牙模块采集数据功能以及通过网络通信将心率数据发送到远程客户端进行测试实验。
(1)将蓝牙主模块接到PC机串口上,利用串口调试助手接收心率数据。心电数据格式为每帧有十个十六进制数据,其中帧头形式为EE,帧尾形式为FF,中间六位为心率数据。串口每次接收八位数据,数据类型为两个十六进制。接收到的数据如图5-1图。可以看到数据满足预先的分析结果,系统能够顺利采集到心率数据。
(2)对ARM处理器中程序进行测试。运行程序,ARM端发送数据如图5-2服务器发送数据图。远程客户端接收数据如图5-2客户端接收图所示。可以通过图片看到心率数据可以通过socket通信技术顺利发送到远程客户端。 4.2 分析
依据测试实验,系统已能完成其主要功能。能够顺利的完成蓝牙主从模块的配对,通过串口进行数据的收集,利用socket通信技术将心率数据发送到远程客户端。系统也存在一些不足之处。由于对医疗健康知识了解有所欠缺,对心电采集模块AD8232芯片本身无法进行进一步测试;系统
目前核心技术功能已经实现,但是距离投入生产服务于大众还有一段距离。由于本系统只是项目中的一部分,对数据的整理与分析,以及心图的绘制由项目组另一名成员完成。 4.3 本章小结
本章主要对系统整体功能进行现场测试实验,通过图片生动形象的显示给读者测试结果。并对系统整体进行分析,指明系统存在的一些问题等。为后续的系统各功能的完善工作指明了正确的方向。
总结
本文源于国家级大学生创新基金项目《基于MIF远程空巢老人服务型机器人》中的一部分。根据研究背景与国内外现状,研发专门服务于空巢老人的移动机器人。而本文主要研究通过心电手环采集老人的生理数据,并以移动机器人为平台将老人生理数据发送到子女客户端。
本文从第二章开始逐步介绍了系统的实现过程。首先是完成心电模块采集使用者的心率数据。首先是完成蓝牙主从模块的设置工作,然后分别连接到ARM处理器和心电手环上。通过两个蓝牙模块完成了心率数据由手环发送到移动机器人平台上,并编写ARM端串口接收程序顺利接收心率数据。第二步是将心率数据发送到子女客户端,在没有网卡驱动的条件下,完成了网卡驱动移植,实现了移动机器人无线网络的连接。在无线网络的基础上利用socket通信技术将心率数据发送到了远程子女客户端。 最终完成了生理数据的采集与传输功能,使客户端在远离使用者的情况下了解到使用者的身体健康状况,并可做进一步的处理。
本项目用到的核心技术包括嵌入式系统设计及框架的搭建、设备驱动分析与移植、蓝牙通信技术、蓝牙模块配置和连接、网络编程、串口通信技术等。