system: [SYSTEM]

user: 4. 系统设计与实现 4.1. 系统架构设计 家用人体成分分析仪APP主要从交互层、服务层、数据层来进行设计开发。 4.1.1. 交互层 交互层主要涉及软件的前端设计部分。前端主要部署在两大主流移动平台(Android， iOS)上，软件的整体设计模式采用了抽象工厂模式。Andriod端开发平台采用了Google的官方开发平台Android Studio进行开发，大量的使用了Java语言，XML语言以及JSON来进行软件具体逻辑以及相关算法的实现。iOS端开发平台主要采用了macOS下的XCode开发套件来进行开发，使用了Apple官方的swift语言来进行开发以及逻辑算法的实现，以及使用了大量的UIkit来进行前端UI的动画处理。 1) 蓝牙模块的实现 系统的交互主要采用了蓝牙来进行设备的软硬件互联。当前，蓝牙技术已经比较成熟，作为是一种无线技术标准，可以实现固定设备的无线连接，从而实现各个设备之间的短距离数据传输功能 [ 8 ]。具体实现的功能有：1、扫描其他蓝牙设备；2、为可配对的蓝牙设备查询可适配的蓝牙装置；3、建立RFCOMM通道；4、与其他设备进行数据传输。而Android平台提供蓝牙支持，允许Android设备与其他设备进行无线数据传输。因此，在软件层主要使用了Android Studio支持的android.bluetooth.BluetoothDevice和android.bluetooth.BluetoothAdapter这两个JAVA库。在硬件上采用了类似于HC05的低功耗蓝牙模块，负责在硬件上实现传感器数据与软件之间的数据传输。 下面是在Android studio中这两个JAVA库的使用方法： //在Android Studio 开启系统的蓝牙功能 import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; BluetoothAdapter HuanBlueTooth = BluetoothAdapter.getDefaultAdapter(); if(!HuanBLueTooth.isEnabled()) //判断设备蓝牙是否开启 { //如果没有开启就调用startActivityForResult()方法来提示用户没有打开蓝牙 Intent enableBluetooth = new lntent(HuanBlueTooth.ACTION_REQUEST_ENABLE); startActivityForResult(enableBlueooth，REQUEST_ENABLE_BT); } 在手机上打开蓝牙来搜索设备 Set HuanBoothDevices = HuanBlueTooth.getBondedDevices(); //用一个Set 集合来保存设备扫描的蓝牙设备 if(pariedDeveces.size > 0){ for(BlueToothDevice dev:HuanBOothDevices){ String HuanDeviceName = dev.getName(); // 得到蓝牙设备的名字 String HuanDeviceMacAddress =dev.getAddress(); //得到蓝牙设备唯一的Mac地址 } } 当搜索到蓝牙设备的名字和Mac地址后就可以进行连接 BlueToothDevice HuanDev = HuanBlueTooth.getRemoteDevice(macAddress); UUID uuidForBlueToothDevice = UUID.fromString(bluetoothDeviceCode); try{ hSocket = device.createRfcommScoetToServiceRecord(uuid); //进行连接 如果出错就用catch来捕获 }catch(IOException e){ E.printStackTrace(); } 2) GPS定位服务模块的实现 全球定位系统(Global Positioning System， GPS)是一种以人造地球卫星为基础的高精度无线电导航的定位系统，能够提供准确的地理位置 [ 9 ]。在家用人体成分分析仪的软硬件数据信息交互中，需要使用到GPS的定位信息来实现一键查找设备功能。 GPS的实现也分软件上和硬件上。在软件上主要使用了LatLng这个java库，通过里面封装好的API代码来实现具体需要的GPS功能。在硬件上主要使用了类似于1575R-A模块来实现具体的NMEA信息获取。硬件上获取的信息再通过服务器传递到软件端上，在软件端上实现NMEA数据类型的处理函数，将信息处理成为对用户友好的可视化信息。 下面是在android studio中LatLng库的使用方法： import com.amap.api.maps.odel.LatLng;//导入库 @Override public void onLocationChanged(AMapLocation amapLocation){ boolean LocationSwitchOne = ((amapLocation != null) && (mListener != null)); boolean LocationSwitchTwo = ((amapLocation != null) && (amapLocation.getErrorCode() == 0)); if(LocationSwitchOne){ if(LocationSwitchTwo){ if(isFirstTime) //如果是第一次定位 { mListner.onLocationChanged(amapLocation); //显示系统定位图标 lvHolder.title = “位置：”; lvHolder.address= amapLocation.getProvider()+amapLocation.getCity()+amapLocation.getStreet()+amap Location.getStreetNum(); //上面的amapLocation.get*()可以得到当前位置的GPS信息，返回的数据格式是String格式，这样就可以得到当前的GPS信息，并且保存到了lvHolder.address中 } } else { String errText = “定位不成功”+amapLocation.getErrorCode()+”: ”+amapLocation.getErrorInfo(); Log.e(“Debug: ”+errText); } } } 3) 软件交互层 包括注册登录，最新的数据显示及健康指导、测量提醒、测量数据记录与分析、设备查找和显示模式切换功能。其中最新数据显示及健康指导、测量提醒、测量数据记录与分析和设备查找的交互模式以可视化方式呈现。 ①最新数据显示及健康指导主要展示最近一次测量结果，根据数据结果分析，提供针对性的健康指导，起到警示作用。 ②测量提醒主要是用于提醒家人或自己定期检测自己的身体状况。 ③数据记录与分析提供多个用户的使用情况记录，以随时掌控自己的健康状况。 ④设备查找主要是采用GPS定位服务，为了方便用户寻找设备，及时发现设备状态，以便更好地使用。 4.1.2. 服务层 服务层主要部署在CentOS7系统上面，采用了Node.js来进行后端的部署，以及异步的方法来应对同时需要处理多个用户请求的情况，在Node.js上也采用了express，http等模块。 服务端的node.js关键代码如图1： 图1. node.js-socket部分实现 软件端的java关键代码如图2： 图2. java-socket部分实现 4.1.3. 数据层 数据层主要采用了MySql来进行数据存储。MySql的服务端口设置在了3000端口，与Node.js后端服务器来进行数据的交互，并且将数据实时的呈现在前端(client)上面。 User用户表：包括用户的唯一登录信息ID，USER_NAME使用VARCHAR(32)的类型来保存且不为空，USER_PASSWORD使用VARCHAR(32)来保存，CHARSET属性主要使用utf-8编码。 INFO数据表：可以与User进行多表链接来进行查询。INFO__BMI使用FLOAT数据类型，保存了BMI的数据；INFO__WATER使用FLOAT数据类型，保存了用户的水分数据信息；INFO_BODY_FAT使用DOUBLE数据类型，保存用户的体脂数据信息；INFO_BONE使用INT数据类型，保存了用户的骨量数据信息；INFO__WEIGHTS使用FLOAT数据类型，保存了用户的体重信息；INFO__MUSCLE_RATE使用DOUBLE数据类型，保存了用户的肌肉率信息，其他一些指标数据也是通过这样的方式保存至数据库。 4.2. APP的设计实现 APP的功能设计梳理为用户个人中心、测量提醒、数据记录与分析、最新数据显示及健康指导、查找设备。将四个功能整合到APP的四个页面中，分别为系统首页、数据记录和分析页以及“我”页，软件逻辑框架如图3所示。 图3. APP架构设计 系统首页界面如图4所示。为了更好地使用户管理自己的身体成分来保持健康的生活，本软件的主界面设置了最新数据显示和健康指导。在首页的界面设计中，将首页顶部选择作为当前最新的数据显示，以便实时掌握测量状态。常用参考数据直接显示，其他更多数据滑动显示。首页下端显示健康指导与推荐，主要是根据测量的数据结果分析，提供针对性的健康指导。当用户查询完最新的测量数据信息后，点击上方的提醒按钮可进入测量提醒界面，在测量提醒界面添加提醒人，根据不同用户的使用频率设定提醒时间，可设置多个提醒人。在工作压力较大的环境下，人们通常会忘记做一些想做的事，温馨的提醒可以带给用户温暖。 图4. 系统首页及展开页 对于测量数据记录与分析界面如图5所示，用户的每一次测量将记录在APP端，可提供多个用户的详细记录，针对个人数据进行分析，分析结果以下滑动读取，以便随时对比不同时期的数据，及时改善健康状态。 图5. 数据记录与分析页面 “我的”页面层级下添加GPS定位服务，用于发现设备。通过点击我的设备，进入发现设备页面，可开启一键找设备，设备会以多种方式给出反馈，从而成功地将设备与移动端互联。该界面还提供了三种不同的显示模式，用户可以根据自己的习惯进行选择，具体页面如图6所示。 图6. “个人中心”页 该移动端的主要功能在于，当用户需要测量身体成分时，只需要通过GPS定位功能，可开启一键找设备，APP端即可查寻互联设备的状态，当使用完设备后，可从该端获取详细的数据信息分析，并给出相应的健康指导。并且根据不同年龄段的人群，设计不同的数据显示模式，操作简便，适合不同年龄段的人群，还可通过APP端操作来控制互联设备。 4.3. 本系统优势 基于前人研究的基础上，本系统集成了GPS定位技术和蓝牙技术，不仅实现了传统家用人体成分分析仪测量数据分析功能。同时将数据的读取从产品转移到软件上，避免了产品本身功能复杂，导致体型的庞大，还能更好地随时查看自己的身体指标数据。由于使用该设备的人群范围广泛，为了更好地满足不同年龄段的用户，提供了多种显示模式，主要根据年龄段区分，显示重点有所不同，用户可切换自己合适的显示模式，以提升用户体验。更重要的是，本系统使用物联网技术，将系统与设备互联，实现测量数据的可视化，用户可直接在APP端查看自己的身体成分指标，并将每一次数据进行记录和分析，以便更好地掌握自己的身体状况，不再是必须靠近设备才可以查看自己的数据，且数据内容还比较单一。同时，还使用了GPS定位服务，用户可在需要使用设备时，开启一键找设备，设备便会给出反馈信息，避免浪费时间。