第30卷第4期 2013年4月 计算机应用与软件 Computer Applieations and Software V01.30 No.4 Apr.2013 基于Android的远程心电检测系统 孙 迎 宋 健 (上海理工大学医疗器械与食品学院上海200093) 摘要 目前,心血管疾病等重大慢性疾病以年均15%的速度上升为主要疾病,成为严重的社会问题。针’对市场对于移动化、便 携化、远程化心电监护系统的需要,开发基于Android系统的心电检测系统。Android手机作为网关,通过蓝牙接收心电数据并发送 至服务器,服务器HL7网关构造心电波形的HL7消息与医疗机构进行心电数据传输。结合医学信息传输标准HL7,探索Android手 机在移动医疗领域的应用。 关键词 Android蓝牙心电HL7 中图分类号TP311.11 文献标识码A DOI:10.3969/j.issn.1000-386x.2013.04.094 REMoTE ECG DETECTIoN SYSTEM BASED oN ANDRom Sun Ying Song Jian (Medical Instrument and Food Institute,University Shanghaifor Science and Technology,Shanghai 200093,China) Abstract China is in a rapid health transition stage,cardiovascular disease and other major chronic diseases as the major diseases rising by an average of 15%have become a serious social problem.For the market needs in mobile,portable and remote heart electric monitoring system,we develop an Android—based ECG system.Android mobile phone as a gateway receives ECG data via Bluetooth and sends data to the server,HL7 gateway of the server generates HL7 messages according to ECG waveform and transfers the messages to medical institutions. Combined with HL7,we explore the application of Android mobile phone in mobile medical field. Keywords Android Bluetooth ECG HL7 0 引 言 随着社会经济的发展和人们生活水平的提高,我国的疾病 谱和死因构成正在发生变化,以心血管疾病、恶性肿瘤、糖尿病 等为代表的慢性非传染性疾病正日益严重地威胁着我国人民的 健康,已成为重要的社会公共问题和医疗经济增长的主要原因。 如今,越来越多的人不再满足“无病”或“亚健康”状态,而是追 求更健康、更长寿的生活质量。移动医疗技术如何介入慢性病 防治管理成为亟须解决的问题。 本文研究基于Android系统的远程心电检测系统。远程心 电检测系统包括心电传感器,Android智能手机及远程医疗服务 器。心电传感器是便携式的,可以随身携带,监护设备可以随时 把病人的心电数据记录下来,通过蓝牙发送至手机,手机将患者 信息和心电数据再发送至远程服务器,服务器的HL7网关能构 造出心电波形的HL7消息,与其它医疗信息系统共享医疗 数据。 1系统结构设计 图1系统结构 系统分为三大模块,分别是心电传感器、Android客户端和 远程服务端。模块具体描述如下: 1)心电传感器 iBosen—ECG1.0是Intelligent Sense,Inc.推出的是一款便携 收稿日期:2012—05—31。孙迎,高工,主研领域:医学信息。宋健 Android系统的远程心电检测系统的总体结构如图1所示。 硕士生。
第4期 孙迎等:基于Android的远程心电检测系统 327 式心电监测模块,通过内部集成的精密运算放大器、l2位数模 转换器、高性能处理器以及蓝牙模块和sD卡,可在强噪声背 景、高输出阻抗环境中实现体表不同位置的心电信号检测。 2)Android客户端 Android客户端的作用相当于一个网关,一是通过蓝牙发送 请求数据的命令至传感器并接收数据,同时在界面上绘制心电 图;二是通过Wifi在后台将心电数据发送至服务器。包含以下 组件: ’ (1)蓝牙服务:负责与心电传感器建立蓝牙传输的串口信 道,收发数据。 (2)数据适配器:负责分析蓝牙数据流并提取心电数据并 保存。 ’ (3)绘图模块:实现与用户的交互功能,对采集数据进行实 时绘图,以供观察。 (4)网络服务:负责向服务器发出连接请求,将接收的数据 通过Wifi发送至服务器。 3)服务器端 服务器端对患者的基本信息和生理数据进行存储和管理, 医生通过调阅实时心电数据和电子病历,分析病情,作出诊断。 (1)网络服务:建立监听端口,接收客户端上传的心电 数据。 (2)HL7网关:建立HL7通信机制,生成、解析HL7消息, 建立电子健康档案跨机构共享机制。 2 HL7消息设计 HL7卫生信息交换标准(Health Level 7):标准化的卫生信 息传输协议,是医疗领域不同应用之间电子传输的协议。采用 HL7作为标准的卫生信息系统和医用仪器、设备可以完全做到 无缝联接以及医学数据信息的无障碍交换,为医院内部各子系 统之间、医院之间、医院与卫生行政部门之间的数据交换和资源 共享莫定了基础。 在HL7数据格式的定义中,消息(Message)是系统间传递 数据的最小数据单元。消息由一组消息段(Segment)组成,消息 段又是一系列字段(field)按一定顺序的逻辑组合,字段之间用 “f”分隔;字段可以进一步分解为组件(Component)和子组件 (SubComponent),它们之间分别用“ ’和“&”分隔。 HL7对波形数据的支持在于提供多种情况下波形数据的使 用,包括远程使用波形数据;研究、临床上决策的输入;还可获得 波形数据片段,完成波形数据集。在HL7框架中,ORU消息提 供患者的临床数据的传输,例如,心电图结果到医生工作站等。 ORU消息同时可以用于回传医嘱信息与临床检验的结果,如当 需要更新药物或设备时,可以使用ORU回传更新结果。当检验 系统作为主动更新方上传心电检测数据时,事件类型定义为 “W01”,所以本文中构造的HL7消息类型为“ORU W01”。 3 Android SDK对蓝牙的支持 3.1蓝牙通信技术 蓝牙通信技术是一种支持设备短距离通信(一般10m以 内)的无线电技术,能在包括移动电话、PDA、无线耳机、笔记本 电脑、相关外设等众多设备之间进行无线信息交换。利用蓝牙 技术,能够有效得简化移动通信终端设备之间的通信。 3.2 Android蓝牙APIs Android SDK2.0版本及以上包含了对蓝牙网络协议栈的支 持,这使得Android设备能够无线连接其它蓝牙设备交换数据。 Android的应用程序框架提供了访问蓝牙功能的APIs(应用程 序接口),这些APIs让应用程序能够无线连接其他蓝牙设备,实 现点对点,或点对多点的无线交互功能。使用蓝牙APIs,一个 Android应用程序能够实现下列功能:(1)扫描其它蓝牙设备; (2)查询本地蓝牙适配器用于配对蓝牙设备;(3)建立RF— COMM信道;(4)通过服务发现连接其它设备;(5)数据通信; (6)管理多个连接。 所有可用的蓝牙APIs都包含在android.bluetooth包里,以 下列举部分相关类: 1)BluetoothAdapter表示本地蓝牙适配器。BluetoothAdapt— er使应用程序能执行基本的蓝牙设置,如搜索设备列表,匹配启 动设备,使用一个已知的MAC地址实例化一个BluetoothDevice, 并创建一个BluetoothServerSocket来监听其他设备的连接请求。 2)BluetoothDevice表示远程蓝牙设备,使用BluetoothSocket 创建关于远程设备的连接,或者查询该远程设备的名字、地址、 类和连接状态。 3)BluetoothSocket表示双向连接的蓝牙端口套接字(类似 TCP套接字)。应用程序通过InputStream或者OutputStream与 其他蓝牙设备交换数据的连接点。蓝牙套接字最常见的协议是 RFCOMM协议,它是一个面向连接的流传输,也被称为串口规 范(SPP)。 4)BluetoothServerSocket表示一个开放的服务器套接字,监 听接入的连接请求(类似TCP套接字)。当一个远程蓝牙设备 发出一个连接请求并被接受时,BluetoothServerSocket将返回一 个已连接的BluetoothSocket。 4 系统实现 4.1 Android客户端设计 进行蓝牙通信需要完成以下四个步骤:(1)设置蓝牙适配 器;(2)发现已经配对或者可用的附近的蓝牙设备;(3)连接设 备;(4)在不同设备之间传输数据。 系统流程如图2所示。 图2系统流程图
328 计算机应用与软件 2013垒 具体实现步骤如下: 1)蓝牙权限声明 运用蓝牙APIs来执行蓝牙通信,应用程序必须声明BLUE— TOOTH许可,在文件AndroidManifest.xml中添加代码: 2)与心电传感器建立连接 从Android手机端的“本机蓝牙可见”打开蓝牙,再点击“搜 索设备”,MAC地址列表中选择“ECG V200:11:05:04:01:33”, 即建立与心电检测设备的连接。 (1)Android程序初始化函数void onCreate(Bundle saved. InstanceState)构造蓝牙适配器: BluetoothAdapterbtAdapt=Blueto0thAdapter.getDefauhAdapter(); (2)搜索设备btAdapt.startDiscovery(),并使用registerRe— ceiver注册BroadeastReceiver来获取搜索所得的蓝牙设备信息, 如名称,MAC地址00:11:05:04:01:33。 (3)通过设备的MAC地址来建立一个BluetoothDevice 对象。 在列表事件函数onhemClick(AdapterView>argO, View argl,int arg2,long arg3)中添加搜索到的设备MAC地址: btAdapt.getRem0teDevice(address) (4)通过BluetoothSocket的createRIcommSocketToService— Record()方法来选择连接的协议/服务,传人唯一的UUID,创 建BluetoothSocket对象,并通过connect方法建立连接,如果没 配对,则系统自动提示,使用BluetoothSocket的getInputStream() 和getOutputStream()方法来读写蓝牙设备。 (5)心电传感器请求数据命令为蓝牙协议[0x42,0x01, OxO1,0x01,0xO1],关闭设备命令为蓝牙协议[0x45,OxO1,0x01, 0x01,OxO1],用btSocket.getOutputStream(),write()发送实现对 传感器的控制。 3)提取心电数据、并绘制心电图 根据iBosenECG传感器的单片机驱动程序提取心电数据, 如图3所示。 模块发送的蓝牙数据以“##”为数据帧头,紧跟着 两位是心电数据。如图3所示,0x2323是数据帧头,0x07C0是 心电数据,通过16进制转换为1O进制操作,取得心电值,用bt- Socket.getlnputStream().read()读取蓝牙数据后,通过数据适配 器取值,再用canvas.drawLine()方法逐点绘制,在手机屏上显 示动态心电图,如图4所示。 / ≥ … …一…一……一… 一………一…… …一…一一一一 … , { ## } :0{ sE摊SB l££0; g嚣档: }张《;i l 0 #■ d 一一……一__…一 一一…~一一 ~ 一…一… …~ 一‘~一 ,/ 0 ≥ 4 《 8 A $ ●- 一 __ 一 露嚣 器器器-龟 - lllllllll I~嚣器嚣爨嚣器嚣器...器器.毒 . ..篓嚣 。肇C^啦 的柚。曹麓赫23∞∞艟鹅撼德ss雌协∞摊。9 站 ∞ 瓣,辨嚣静口l嚣艄。亭仃静靼辨23嚣张7l雌船摊 触嚣。。椰。孽酶疆嚣 坤 ∞8I姻∞锄粥姒鍪l埔髓辨鹳∞钟|1瓣'^∞协∞彗^ i ∞枞 跏嚣穹3∞∞∞ 口9孙钟I3锦 确∞el耨23∞啦瓣^2锵”∞Oj舯,c 啪蛳 嚣霹∞ a鲁稻 ‘B糖辩∞祜∞52鄂23 z3雠班∞辨og租o^钟 I啤婚∞铝ct∞站湃姒∞∞∞鑫毫瓣辨衅犍循掘 ∞∞雠 ∞鲥∞键 暂∞M。擘s8∞鹞∞∞D鼋饷l2翰舯06n 0孽钾∞F量口鼬嚣0o ∞镐 埘0st^∞ ∞l3礴∞23∞∞∞II∞l薹甜 始黔雌 cg∞∞钟El 嚣艚镗 bl舶杆∞篱c^∞箱褥瓢瓣热辨貅 孵霸脯a尊 2搴抟 {坼H。孽晦∞”∞钠∞^l∞酲cc∞嚣∞镗∞器。g 酾钾瞎85∞帕∞ 睦3勰∞02∞∞瀚竹∞龆。尊轴柏s8 ∞髓托牲。謇赫∞神椭烈嘲 掬 露23 2j邮EI晡孵。尊|a∞ 蚺辣∞孵∞23鹎钾El∞ll∞l^∞柚∞ 瓤僻抛目l 23 23∞ ∞盯∞^F∞t‘0e趾辨∞ 23嚣∞∞∞盯蚺静雄 ∞ 髓黔∞嚣黔∞篙∞ 霸程0苣H∞O^∞始 ∞嚣湃El o鲁黔。搴 {Fl甑碲。拿c2口9 Ds豁∞时El o辞l9碑Bl 0$坼始B3∞∞脯黯豁雠辅∞ 扫^锥"0#ls循 ∞铀 ∞嚣∞位辨潞糖8丑∞觥游钟∞ 船捞∞∞ 图3心电数据格式 图4心电图效果 4)数据上传 在向服务器上传数据时,采用Socket通信协议。Socket通 常称作“套接字”,一个Socket对象包含了IP地址和端口。应 用程序通常通过“套接字”向网络发出请求或者应答网络请求。 套接字之间的连接过程可以分为三个步骤:服务器监听,客户端 请求,连接确认。首先在Pc端建立一个ServerSoeket监听客户 请求,本文采用在Android手机端监听了上传事件的方法,触发 事件后,通过“socket=newSocket(“192.168.1.100”,5080);”来 请求连接服务器,并通过socket.getOutputStream().Write()来 发送数据。 4.2服务端构造HL7消息 本文采用了HL7Connect开源项目构造HL7消息。 HL7Connect是一个功能齐全且简单易用的接口引擎, HL7Connect SDK提供HL7 v2的消息和CDA文档的集成和管理 服务。建立HL7网关,服务器能与其它医疗机构进行临床数据 共享。 图5 HL7消息 如图5所示,ORU消息的消息段有: MSH:定义消息的来源,目的,目标,和某些语法的细节。 PID:用于记录患者的基本信息,如身份证号码,性别,住址、 联系电话等。 OBR:用于传输检验、观察、诊断信息。 OBX:用于记录病人的观察结果。波形数据由三个OBX消 息段联合定义,OBX-2字段定义了OBX一5观察值的格式。其中 CD为通道定义:本例中通道名称是COM7、波形来源是iBose— nECG、通道灵敏度是1,测量单位是mv,采集频率是125Hz,测 量的最小值和最大值分别是0和4096等;TS为时间定义,包含 测量时间,如20120525131 1 10。NA为波形数据定义,心电数据 存放在波形数据定义段的OBX6字段中,本例是:“23l】 2339 2360"2406"2458 42l"2443 404^2316"2324^2335 2364 2314 241 l 2408"2379"2391"2297"2312"2439"2357 327^2421 2385 2438"2425 2446"2391 471 379"2459"2400"2383 387^2307 2437"2492^238l 2321"2480” 5 结语 随着Android 4.0SDK的发布,由于其支持Bluetooth Health