收藏 分销(赏)

Android智能家居详细设计52.docx

上传人:二*** 文档编号:4764021 上传时间:2024-10-12 格式:DOCX 页数:52 大小:1.13MB
下载 相关 举报
Android智能家居详细设计52.docx_第1页
第1页 / 共52页
本文档共52页,全文阅读请下载到手机保存,查看更方便
资源描述
基于Android的智能家居 基于Android的智能家居 三个火枪手 2021年5月 目 录 第 1 章 工程概述 1 工程背景 1 术语定义 2 第 2 章 技术方案 3 系统描述 3 功能描述 3 工程功能图 4 所涉及的系统、工具 4 第 3 章 前端数据中心〔A8〕总体设计 5 程序设计流程图 5 线程定义 5 所用类定义 6 第 4 章 前端A8模块设计 7 A8-Android Application层设计 7 数据流分析 7 Application层详细设计与实现 9 A8-数据传递架构模块 16 层次接口表 16 HAL层 17 JNI层 19 Framework层 20 整体流程 21 关键代码分析 22 传输协议模块设计 32 A8接收数据格式 32 M0接收命令数据结构 33 第 5 章 终端M0模块设计 35 终端设备方案描述 35 终端设备工作流程 35 功能模块描述 36 温湿度传感器DHT10 36 ZigBee通信局部 37 RFID读卡模块 40 IIC接口局部 41 第 6 章 系统测试 45 工程演示 45 第 1 章 工程概述 1.1 工程背景 随着社会电子信息化的不断开展,人们在家居中使用的电器越来越多,由此带来的平安隐患也有了明显的增多。在这些电器中一旦出现一些异常,便会给人们带来很大的损失。为了降低电器的不合理使用带来的异常情况,就要求在异常发生时用户能及时得到信息,并通过实时监控采取一定的操作排除异常。因此,远程监控系统的作用是非常巨大的。 90年代末,随着多媒体技术、视频压缩编码技术、网络通讯技术的开展,数字视频监控系统迅速崛起,现今市场上由两种数字视频监控系统类型,一种是以数字录像设备为核心的视频监控系统,另一种是以嵌入式视频web效劳器为核心的视频监控系统。以数字录像设备为核心的视频监控系统采用PC机作为多媒体监控主机,综合了视频矩阵、图像分割器、录像机等众多的功能,使系统结构大为简化,采用计算机网络技术,数字多媒体远程网络监控不受距离限制,采用大容量磁盘阵列存盘器或光盘存储器,可以节省大量的磁盘介质,同时有利于系统实现多媒体信息查询。但随着基于PC机的视频监控录像系统的开展,在实际使用过程中,也暴露出一些缺乏,主要是系统工作的不稳定性。 以嵌入式视频web效劳器为核心的视频监控系统,采用嵌入式实时多任务操作系统。摄像头采集到的图片信息经过压缩,通过内部总线送到内置的web效劳器,网络上的用户可以直接用浏览器观看web效劳器上的由摄像头采集的图像。由于把图片采集和web功能集中到一个体积很小的设备内,可以直接连入局域网,用户无需安装任何硬件设备,仅用浏览器即可观看。同时还具有以下优点: 布控区域广阔,嵌入式视频web效劳器监控系统web效劳器直接连入网络,没有线缆长度和信号衰减的限制,同时网络是没有距离概念的,彻底抛弃了地域的概念,扩展布控的区域。系统具有几乎无限的无缝扩展能力。所以设备都以IP地址进行标示,增加设备只是意味着IP地址的扩充。性能稳定可靠,无需专人管理。嵌入式web效劳器实际上是基于嵌入式微处理器技术,采用嵌入式实时多任务操作系统,对于用户来讲,上网进行登陆,便可对家中情况进行监控。除了WEB效劳器实时控制之外,当前智能 的开展趋势已经愈加明显。智能 〔Smartphone),是指“像个人电脑一样,具有独立的操作系统,可以由用户自行安装软件、游戏等第三方效劳商提供的程序,通过此类程序来不断对 的功能进行扩充,并可以通过移动通讯网络来实现无线网络接入的这样一类 的总称〞。而当前应用在智能 上的操作系统中Android操作系统占有相当大的比例。 Android( 中文名:安卓) 是基于Linux平台开源 操作系统名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。随着Android应用的更见广泛,了解并能使用Android来完成我们对智能家居的控制已经显得愈加重要。 现在监控系统开展到第三代,前端一体化、视频十字化、监控网络化、系统集成化成为视频监控系统公认的开展方向,它以网络为依托,以数字视频的压缩、传输、存放和播放为核心,以智能实用的图像分析为特点,并为报警系统、门禁系统完美的整合到一个使用平台上,引发了视频控制行业的一次技术革命。 1.2 术语定义 Android: Android是一种以Linux为根底的开放源码操作系统,主要使用于便携设备。 HAL:硬件抽象层。 JNI:JNI是Java Native Interface的缩写,中文为JAVA本地调用。 RFID:射频识别即RFID〔Radio Frequency IDentification〕技术,又称电子标签、无线射频识别,是一种通信技术,可通过无线电讯号识别特定目标并读写相关数据,而无需识别系统与特定目标之间建立机械或光学接触。 A8: ARM Cortex-A8处理器是第一款基于ARMv7架构的应用处理器,并且是有史以来ARM开发的性能最高、最具功率效率的处理器。 M0:Cortex-M0处理器,是市场上现有的最小、能耗最低、最节能的ARM处理器。 第 2 章 技术方案 2.1 系统描述 Android是一个开放源码的操作系统专门为移动 而设计的系统。Android 将开辟新的应用,使家居智能化运用于普通家庭。 Android 界面显示(Cortex_A8)来自于Cortex_m0模拟量,并可对Cortex_m0进行控制或操作。 本系统做为裁减工程,实现了M0采集房间信息,通过无线方式发送到A8进行监控、控制。A8即可作为移动终端设备(如phone、pad等),亦可作中央监控效劳器设备。本工程采用后者方案,即作中央监控。假设需作移动设备,只需将程序移植到移动设备上,再在中央端移植web效劳器,移动设备登陆效劳器即可查看房屋信息。 2.2 功能描述 1.检测室内温度、湿度、光感、电压情况〔通过Cortex_m0采集的信息〕。 2.通过温度、湿度的情况来对应调节风扇开关〔控制Cortex_m0〕。 3.根据光敏传感器情况对应调节led灯亮灭〔控制Cortex_m0〕。 4.根据三轴加速度情况对应调节蜂鸣器开关〔控制Cortex_m0〕。 5.显示Rfid信息等功能〔通过Cortex_m0采集〕。 2.3 工程功能图 图2.1 工程功能图 2.4 所涉及的系统、工具 表2.1 系统与工具 系统名称 系统版本 备注 Linux内核 L Android文件系统 版本 工具链 arm-none-linux-gnueabi-gcc Android程序开发 Eclipse 第 3 章 前端数据中心〔A8〕总体设计 3.1 程序设计流程图 图3.1 程序设计流程图 3.2 线程定义 1. SmartHomeActivity,程序主Activity界面,翻开程序首先运行。 2. NodeInfoActivity,从界面Activity,用来显示详细设备采集信息和控制按键。 3. MainReadThread,读数据主线程,该线程只负责对通过Zigbee获取的数据转发给读进程,不进行数据操作。 4. MainHandlerThread,处理数据线程,该线程对从读进程传来的数据进行数据校验并转发。 5. NodeWriteThread,控制线程,该线程负责处理由用户对设备的操作。 3.3 所用类定义 1. Data,用来存储和处理设备的采集数据。 2. NodeCmd,定义操作方法,实现对设备的读操作和控制操作。 3. NodeInfo,定义设备的所有采集信息,控制器状态和WatchDog。 4. NodeList,使用链表存储设备信息。 5. MyUartService:提供与底层的接口,以读写串口。 第 4 章 前端A8模块设计 4.1 A8-Android Application层设计 4.1.1 数据流分析 4.1.1.1 NEWNODE,新节点参加 1.数据处理流程图 图4.1 NEWNODE数据流程图 2.数据格式 NEWNODE数据格式 数据 格式 NEWNODE S4FnI1 Cortex-M0开启,通过Zigbee发送NEWNODE数据给Cortex-A8,程序通过MainReadThread线程读取到数据,交由MainHandlerThread线程处理。MainHandlerThread对NOEWNODE进行校验,判断是否合法,如果数据无误,通过发送Handler消息交由SmartHomeActivity主界面UI线程,SmartHomeActivity 判断链表是否已经存在该节点,不存在那么参加链表并创立节点。 4.1.1.2 NODEINFO,节点信息更新。 图4.2 NODEINFO数据流程图 NODEINFO数据 数据 格式 NODEINFO S23FiI1T24H30L6V220X1Y1Z60 Cortex-M0开启,通过Zigbee发送NEWNODE数据给Cortex-A8,程序通过MainReadThread线程读取到数据,交由MainHandlerThread线程处理。MainHandlerThread对NODEINFO进行校验,判断是否合法,如果数据无误,通过发送Handler消息交由SmartHomeActivity主界面UI线程,SmartHomeActivity 判断链表是否已经存在该节点,存在那么更新该链表信息,并判断是否进入该节点从界面,如果进入发送Broadcast通知从界面更新数据。 4.1.1.3 RFID,用户登录或退出。 图4.3 RFID数据流程图 RFID数据格式 数据 格式 RFID S11FrI1R103132 Cortex-M0开启,通过Zigbee发送NEWNODE数据给Cortex-A8,程序通过MainReadThread线程读取到数据,交由MainHandlerThread线程处理。MainHandlerThread对RFID进行校验,判断是否合法,如果数据无误,通过发送Handler消息交由SmartHomeActivity主界面UI线程,SmartHomeActivity发送Broadcast通知从界面,从界面判断是否为自己设备,是那么更新数据。 4.1.2 Application层详细设计与实现 4.1.2.1 类对象详细描述 1 .Data类,负责对接受来数据进行处理 表4.1 Data成员属性表 属性 类型 描述 serialVersionUID long 序列化时保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。 data String 存储从串口的数据 表4.2 Data成员方法表 方法 参数 返回值 描述 getDataSize Void String 从传来的数据获取数据大小 isValidData Void boolean 数据有效性校验,包括数据是为为空,完整等 getDataType Void int 从传来的数据获取数据类型 getDataTarget Void String 从传来的数据获取数据的设备号 getRfid Void String 从传来的数据获取Rfid信息 getTemperature Void String 从传来的数据获取温度 getHumidity Void String 从传来的数据获取湿度 getLight Void String 从传来的数据获取光感 getAd Void String 传来的数据获取AD值 getX Void String 从传来的数据获取三轴加速度x值 getY Void String 从传来的数据获取三轴加速度y值 getZ Void String 从传来的数据获取三轴加速度z值 2 .NodeCmd类,负责与底层进行交互,实现对硬件设备读,写操作。 表4.3 NodeCmd成员属性表 属性 类型 描述 DevCmd enum 使用枚举将命令声明一组命名的常数,方便函数调用。 myUartService MyUartService 串口操作所使用框架 表4.4 NodeCmd成员方法表 方法 参数 返回值 描述 devControl int, DevCmd String 向串口发送数据 readNode Void String 从串口获取数据 3 .NodeInfo类,负责存储一个设备的信息。 表4.5 NodeInfo成员属性表 属性 类型 描述 serialVersionUID long 序列化时保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。 temperature String 存储节点对象的温度值 humidity String 存储节点对象的湿度 light String 存储节点对象的光感值 x String 存储节点对象的三轴加速度x值 y String 存储节点对象的三轴加速度y值 z String 存储节点对象的三轴加速度z值 ad String 存储节点对象的ad值 led int 存储节点对象的led灯状态〔0,灭;1,亮〕 fun int 存储节点对象的风扇状态〔0,关;1,开;2,加速〕 beep int 存储节点对象的报警器状态〔0,关;1,开〕 nixietub int 存储节点对象的数码管状态〔0,关;1,开〕 rfid rfid 存储节点对象的rfid信息 devNum int 存储节点对象的设备号 next NodeInfo 便于生成链表 watchDog int 看门狗,监控节点生命值 表4.6 NodeInfo成员方法表 方法 参数 返回值 描述 NodeInfo void void 构造函数,初始化节点对象 NodeInfo void int 有参数构造函数,参数为节点设备号 getNext void NodeInfo setNext NodeInfo void getTemperature void String 获取该对象温度值 setTemperature String void 设置该对象温度值 getHumidity void String 获取该对象湿度值 setHumidity String void 设置该对象湿度值 getLight void String 获取该对象光感值 setLight String void 设置该对象光感值 getAd void String 获取该对象AD值 setAd String void 设置该对象AD值 getX void String 获取该对象三轴加速度x值 setX String void 设置该对象三轴加速度x值 getY void String 获取该对象三轴加速度y值 setY String void 设置该对象三轴加速度y值 getZ void String 获取该对象三轴加速度z值 setZ String void 设置该对象三轴加速度z值 getLed void int 获取该对象Led状态值 setLed int void 设置该对象Led状态值 getFun void int 获取该对象Fun状态值 setFun int void 设置该对象Fun状态值 getBeep void int 获取该对象Beep状态值 setBeep int void 设置该对象Beep状态值 getNixietub void int 获取该对象Nixietub状态值 setNixietub int void 设置该对象Nixietub状态值 getDevNum void int 获取该对象DevNum值 setDevNum int void 设置该对象DevNum值 getRfid void String 获取该对象Rfid值 setRfid String void 设置该对象Rfid值 getWatchDog void int 获取该对象WatchDog值 setWatchDog int void 设置该对象WatchDog值 ledOn void void 开灯 ledOff void void 关灯 funOn void void 开风扇 FunOn1 void void 风扇加速 funOff void void 关风扇 beepOn void void 开蜂鸣器 beepOff void void 关蜂鸣器 nixietubeOn void void 开数码管 nixietubeOff void void 关数码管 4 .NodeList类,存储所有连接设备的信息,便于进行界面节点的更新,删除和添加操作。 表4.7 NodeList成员属性表 属性 类型 描述 head NodeInfo 链表头结点 len Long 链表长度 表4.8 NodeList成员方法表 方法 参数 返回值 描述 getHead NodeInfo void 获取链表头结点 setHead void NodeInfo 设置链表头结点 createNodeList void void 创立设备节点链表 insertNode NodeInfo void 插入节点 delNode NodeInfo void 删除节点 allNode void void 遍历链表所有节点 findByDevNum int NodeInfo 通过设备号找到节点 nodeIsNotExisted int boolean 通过设备号查找节点是否存在于链表 delByDevNum int void 通过设备号删除节点 allNodeSetWatchDog void String 所有设备节点看门狗减一 oneNodeFeedWatchDog int void 通过设备号找到设备节点并喂狗 findNodeDogDie void int 遍历设备节点,查看是否有节点生命结束 getLen void int 得到链表长度 findNodeByPos int NodeInfo 通过在链表中位置查找到设备节点 4.1.2.2 线程类详细描述 1 . MainReadThread类 当启动MainReadThread线程,执行run方法,run方法先通过running判断是否执行读操作,如果running为true,进行对设备读操作,判断MainHandlerThread处理线程是否创立,未创立那么创立并将读出的数据传给MainHandlerThread,并启动线程,循环执行。 图4.4 MainReadThread RUN流程图 2 . MainHandlerThread类 当MainReadThread线程将读取的数据传到MainHandlerThread后,先对数据进行有效性认证,如果数据有误,使用handler传递发送给SmartHomeActivity即主界面UI线程,进行处理;如果数据无误,判断数据类型并使用handler传递,发送给SmartHomeActivity进行处理。 图4.5 MainHandlerThread RUN流程图 3 . NodeWriteThread类 只负责执行设备控制的命令,使用线程可以使程序屡次独立线程执行,不被影响。 图4.6 NodeWriteThread RUN流程图 4.1.2.3 UI类详细描述 1 . SmartHomeActivity类 (1) onCreate a) 初始化节点列表nodeList。 b) 设置从界面标题,setTitle。 c) 设置视图,setContentView。 d) 获取主界面控件的引用,findViewById。 e) 设置GridView和使用的适配器BaseAdapter。 f) 设置选项被单击的监听器,setOnItemClickListener。 g) 设置线程的 Handler,重写handleMessage方法。 h) 翻开程序读线程。 i) 注册返回播送接收器。 (2) onDestroy a) 卸载播送接收器,unregisterReceiver。 b) 关闭读线程,。 c〕 关闭主界面Activity,。 (3) updataLayOut a) 设置所有节点的看门狗减一,allNodeSetWatchDog。 b) 判断是否有节点看门狗死亡,findNodeDogDie。如果存在,删除Node节点链表,delByDevNum,并判断是否进入该节点从界面,如果进入那么发送播送使其退出。最后,向该死亡设备发送确认命令ISEXIT,如果未死亡,重新发送添加节点NewNode的数据。 c) 更新适配器notifyDataSetChanged。 〔4〕 BackReceiver 播送接受器 a) 从节点列表删除从界面返回的节点的原对象,nodeList.delByDevNum() b) 向节点列表插入从界面返回的新节点对象,Node() c) 关闭从界面Activity ,finishActivity()。 2 . NodeInfoActivity类 (1) onCreate a) 创立从节点对象NodeInfo。 b) 设置视图,setContentView。 c) 获取从界面控件的引用,findViewById。 d) 通过Intent对象,获取从主界面传来的nodeInfo对象并赋给从界面对象。 e) 设置从界面标题,setTitle。 f) 将主界面获取的nodeInfo对象反应到界面,setText。 g) 注册播送接收器 h) 设置返回键监听器 i) 设置风扇监听器,设置Led监听器,设置蜂鸣器监听器,设置数码管监听器 (2) onDestroy 卸载播送接收器,unregisterReceiver。 4.1.2.4 数据库详细描述 1 . RfidRecordDBHelper类 继承SQLiteOpenHelper类,重写onCreate方法。 ·表新建 使用SQLiteDatabase对象的execSQL方法去添加表。命令如下: create table if not exists rfidTable (id INTEGER primary key autoincrement, devId varchar, rfId varchar) ·增加 使用SQLiteDatabase对象的execSQL方法去增加数据。命令如下: insert into rfidTable(devId, rfId) values (?,?) ·删除 使用SQLiteDatabase对象的execSQL方法去删除数据。命令如下: delete from rfidTable where rfId = ? 2 . 数据库表设计 表4.9 rfidTable数据库表 字段名 类型 属性 描述 id INTEGER primary key autoincrement ID主键 devId VARCHAR Null 设备号 rfId VARCHAR Null RFID号 4.1.2.5 框架详细描述 · MyUartService类 1 .加载库,System.loadLibrary("uart_runtime") 2 .重写构造函数,调用本地 __init方法,对设备进行初始化。 3. 通过调用本地方法实现java方法 4.2 A8-数据传递架构模块 4.2.1 层次接口表 数据传递(串口操作) 应用层 UartDataUpdate New MyUartService UartSendCmd framework层 _uart_send_cmd _uart_data_update _init JNI层 Uart_write Uart_init Uart_read Hal层 Uart_write_hal Uart_read_drv Uart_device_open Uart_read_hal Uart_write_drv 驱动 Write Open Read 图4.6.1 接口层次图 图4.6.2 结构图 4.2.2 HAL层 1、 宏 表4.10 HAL层宏定义表 名称 内容 功能 UART_HARDWARE_MODULE_ID "uart" 定义hal 的模块id START 0xAA 数据包的开始符 NEW 0x01 新节点参加发的包 INFO 0x02 采集的信息包 RFID 0x04 刷卡时发的包 2、 全局变量 表4.11 HAL层全局变量表 名称 类型 功能 fd int 操作设备的文件描述符 3、 结构体 表4.12 HAL层结构体表 struct uart_module_t 成员名 类型 功能 common struct hw_module_t 记录本stub的根本信息和入口 struct uart_control_device_t 成员名 类型 功能 common struct hw_device_t 记录本stub操作设备时需要包括的接口 uart_read_hal 函数指针 指向实际读串口的函数 uart_write_hal 函数指针 指向实际写串口的函数 4、流程图 图4.7 HAL层结构图 4.2.3 JNI层 1、 宏 表4.13 JNI层宏定义表 名称 内容 功能 UART_HARDWARE_MODULE_ID "uart" 定义HAL 的模块ID 2、 全局变量 表4.14 JNI层全局变量表 名称 类型 功能 sUartDevice uart_control_device_t * 保存通过调用stub中的open接口后得到的devices handle sUartModule uart_module_t* 保存通过调用Android HAL标准函数hw_get_module,传入UART_HARDWARE_MODULE_ID后得到的UART stub的句柄 3、 流程图 JNI层主要实现了Java与c/c++之间的过渡,不涉及复杂的逻辑,只根据规那么为上层函数调用相应的下层接口,参见整体流程。 4.2.4 Framework层 表4.15 Framework层类表 public class MyUartService 方法 功能 ibrary 装载编译好的JNI层的共享库 public MyUartService 构造函数,翻开并初始化串口 public String UartDataUpdate 读取当前串口信息数据包 public int UartSendCmd 向串口传送命令数据包 4.2.5 整体流程 下续:hal层 图4.8 整体流程图 4.2.6 关键代码分析 1. static MyUartService myUartService = new MyUartService(); //新建对象,初始化 String s = myUartService.UartDataUpdate(); //更新采集数据 myUartService.UartSendCmd(1, LED_ON); //点亮1号设备的灯 2. package cn .smarthome.uart; import android.util.Log; public class MyUartService { /* * load native service. */ static { System.loadLibrary("uart_runtime"); //装载库 } public MyUartService() { _init(); //注册本地方法,翻开串口并初始化 } /* * uart native methods. */ public String UartDataUpdate() { String s = _uart_data_update();
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服