基于安卓Android智能家居详细设计毕业论文


    基Android智家居
    目 录
    第 1 章 项目概述 1
    11 项目背景 1
    12 术语定义 2
    第 2 章 技术方案 3
    21 系统描述 3
    22 功描述 3
    23 项目功图 4
    24 涉系统工具 4
    第 3 章 前端数中心(A8)总体设计 5
    31 程序设计流程图 5
    32 线程定义 5
    33 类定义 6
    第 4 章 前端A8模块设计 7
    41 A8Android Application层设计 7
    411 数流分析 7
    412 Application层详细设计实现 9
    42 A8数传递架构模块 16
    421 层次接口表 16
    422 HAL层 17
    423 JNI层 19
    424 Framework层 20
    425 整体流程 21
    426 关键代码分析 22
    43 传输协议模块设计 32
    431 A8接收数格式 32
    432 M0接收命令数结构 33
    第 5 章 终端M0模块设计 35
    51 终端设备方案描述 35
    52 终端设备工作流程 35
    53 功模块描述 36
    531 温湿度传感器DHT10 36
    532 ZigBee通信部分 37
    533 RFID读卡模块 40
    534 IIC接口部分 41
    第 6 章 系统测试 45
    61 项目演示 45

    第 1 章 项目概述
    11 项目背景
    着社会电子信息化断发展家居中电器越越带安全隐患明显增电器中旦出现异常便会带损失降低电器合理带异常情况求异常发生时户时信息通实时监控采取定操作排异常远程监控系统作非常巨
    90年代末着媒体技术视频压缩编码技术网络通讯技术发展数字视频监控系统迅速崛起现市场两种数字视频监控系统类型种数字录设备核心视频监控系统种嵌入式视频web服务器核心视频监控系统数字录设备核心视频监控系统采PC机作媒体监控机综合视频矩阵图分割器录机等众功系统结构简化采计算机网络技术数字媒体远程网络监控受距离限制采容量磁盘阵列存盘器光盘存储器节省量磁盘介质时利系统实现媒体信息查询着基PC机视频监控录系统发展实际程中暴露出足系统工作稳定性
    嵌入式视频web服务器核心视频监控系统采嵌入式实时务操作系统摄头采集图片信息压缩通部总线送置web服务器网络户直接浏览器观web服务器摄头采集图图片采集web功集中体积设备直接连入局域网户需安装硬件设备仅浏览器观时具优点:
    布控区域广阔嵌入式视频web服务器监控系统web服务器直接连入网络没线缆长度信号衰减限制时网络没距离概念彻底抛弃域概念扩展布控区域系统具限缝扩展力设备IP址进行标示增加设备意味着IP址扩充性稳定需专理嵌入式web服务器实际基嵌入式微处理器技术采嵌入式实时务操作系统户讲网进行登陆便家中情况进行监控WEB服务器实时控制外前智手机发展趋势已愈加明显智手机(Smartphone)指电脑样具独立操作系统户行安装软件游戏等第三方服务商提供程序通类程序断手机功进行扩充通移动通讯网络实现线网络接入样类手机总称前应智手机操作系统中Android操作系统占相例
    Android( 中文名:安卓) 基Linux台开源手机操作系统名称该台操作系统中间件户界面应软件组成号称首移动终端造真正开放完整移动软件着Android应更见广泛解Android完成智家居控制已显愈加重
    现监控系统发展第三代前端体化视频十字化监控网络化系统集成化成视频监控系统公认发展方网络托数字视频压缩传输存放播放核心智实图分析特点报警系统门禁系统完美整合台引发视频控制行业次技术革命
    12 术语定义
    Android Android种Linux基础开放源码操作系统便携设备
    HAL:硬件抽象层
    JNI:JNIJava Native Interface缩写中文JAVA调
    RFID:射频识RFID(Radio Frequency IDentification)技术称电子标签线射频识种通信技术通线电讯号识特定目标读写相关数需识系统特定目标间建立机械光学接触
    A8 ARM CortexA8处理器第款基ARMv7架构应处理器史ARM开发性高具功率效率处理器
    M0:CortexM0处理器市场现耗低节ARM处理器
    第 2 章 技术方案
    21 系统描述
    Android开放源码操作系统专门移动电话设计系统Android手机开辟新应家居智化运普通家庭
    Android 界面显示(Cortex_A8)Cortex_m0模拟量Cortex_m0进行控制操作
    系统做裁减项目实现M0采集房间信息通线方式发送A8进行监控控制A8作移动终端设备(phonepad等)作中央监控服务器设备项目采者方案作中央监控需作移动设备需程序移植移动设备中央端移植web服务器移动设备登陆服务器查房屋信息
    22 功描述
    1检测室温度湿度光感电压情况(通Cortex_m0采集信息)
    2通温度湿度情况应调节风扇开关(控制Cortex_m0)
    3根光敏传感器情况应调节led灯亮灭(控制Cortex_m0)
    4根三轴加速度情况应调节蜂鸣器开关(控制Cortex_m0)
    5显示Rfid信息等功(通Cortex_m0采集)
    23 项目功图

    图21 项目功图
    24 涉系统工具
    表21 系统工具
    系统名称
    系统版
    备注
    Linux核
    Linux308

    Android文件系统
    Android40版

    工具链
    armnonelinuxgnueabigcc

    Android程序开发
    Eclipse

    第 3 章 前端数中心(A8)总体设计
    31 程序设计流程图

    图31 程序设计流程图
    32 线程定义
    1 SmartHomeActivity程序Activity界面开程序首先运行
    2 NodeInfoActivity界面Activity显示详细设备采集信息控制键
    3 MainReadThread读数线程该线程负责通Zigbee获取数转发读进程进行数操作
    4 MainHandlerThread处理数线程该线程读进程传数进行数校验转发
    5 NodeWriteThread控制线程该线程负责处理户设备操作
    33 类定义
    1 Data存储处理设备采集数
    2 NodeCmd定义操作方法实现设备读操作控制操作
    3 NodeInfo定义设备采集信息控制器状态WatchDog
    4 NodeList链表存储设备信息……………………………………
    5 MyUartService:提供底层接口读写串口
    第 4 章 前端A8模块设计
    41 A8Android Application层设计
    411 数流分析
    4111 NEWNODE新节点加入
    1数处理流程图
    图41 NEWNODE数流程图
    2数格式
    NEWNODE数格式

    格式
    NEWNODE
    S4FnI1

    3数处理详细描述
    CortexM0开启通Zigbee发送NEWNODE数CortexA8程序通MainReadThread线程读取数交MainHandlerThread线程处理MainHandlerThreadNOEWNODE进行校验判断否合法果数误通发送Handler消息交SmartHomeActivity界面UI线程SmartHomeActivity 判断链表否已存该节点存加入链表创建节点……………………
    4112 NODEINFO节点信息更新
    1数处理流程图
    图42 NODEINFO数流程图
    2数格式
    NODEINFO数

    格式
    NODEINFO
    S23FiI1T24H30L6V220X1Y1Z60
    3数处理详细描述
    CortexM0开启通Zigbee发送NEWNODE数CortexA8程序通MainReadThread线程读取数交MainHandlerThread线程处理MainHandlerThreadNODEINFO进行校验判断否合法果数误通发送Handler消息交SmartHomeActivity界面UI线程SmartHomeActivity 判断链表否已存该节点存更新该链表信息判断否进入该节点界面果进入发送Broadcast通知界面更新数
    4113 RFID户登录退出
    1数处理流程图
    图43 RFID数流程图
    2数格式
    RFID数格式

    格式
    RFID
    S11FrI1R103132
    3数处理详细描述
    CortexM0开启通Zigbee发送NEWNODE数CortexA8程序通MainReadThread线程读取数交MainHandlerThread线程处理MainHandlerThreadRFID进行校验判断否合法果数误通发送Handler消息交SmartHomeActivity界面UI线程SmartHomeActivity发送Broadcast通知界面界面判断否设备更新数
    412 Application层详细设计实现
    4121 类象详细描述
    1 Data类负责接受数进行处理
    表41 Data成员属性表
    属性
    类型
    描述
    serialVersionUID
    long
    序列化时保持版兼容性版升级时反序列化保持象唯性
    data
    String
    存储串口数
    表42 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类负责底层进行交互实现硬件设备读写操作
    表43 NodeCmd成员属性表
    属性
    类型
    描述
    DevCmd
    enum
    枚举命令声明组命名常数方便函数调
    myUartService
    MyUartService
    串口操作框架
    表44 NodeCmd成员方法表
    方法
    参数
    返回值
    描述
    devControl
    int DevCmd
    String
    串口发送数
    readNode
    Void
    String
    串口获取数
    3 NodeInfo类负责存储设备信息
    表45 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
    门狗监控节点生命值
    表46 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类存储连接设备信息便进行界面节点更新删添加操作
    表47 NodeList成员属性表
    属性
    类型
    描述
    head
    NodeInfo
    链表头结点
    len
    Long
    链表长度
    表48 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
    通链表中位置查找设备节点
    4122 线程类详细描述
    1 MainReadThread类
    启动MainReadThread线程执行run方法run方法先通running判断否执行读操作果runningtrue进行设备读操作判断MainHandlerThread处理线程否创建未创建创建读出数传MainHandlerThread启动线程循环执行

    图44 MainReadThread RUN流程图
    2 MainHandlerThread类
    MainReadThread线程读取数传MainHandlerThread先数进行效性认证果数误handler传递发送SmartHomeActivity界面UI线程进行处理果数误判断数类型handler传递发送SmartHomeActivity进行处理

    图45 MainHandlerThread RUN流程图
    3 NodeWriteThread类
    负责执行设备控制命令线程程序次独立线程执行影响

    图46 NodeWriteThread RUN流程图
    4123 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) 关闭读线程mainReadThreadstop
    c) 关闭界面Activitythisfinish
    a) 设置节点门狗减allNodeSetWatchDog
    b) 判断否节点门狗死亡findNodeDogDie果存删Node节点链表delByDevNum判断否进入该节点界面果进入发送广播退出该死亡设备发送确认命令ISEXIT果未死亡重新发送添加节点NewNode数………………
    c) 更新适配器notifyDataSetChanged>>>>>>>>>>>>>>>>>>
    (4) BackReceiver 广播接受器
    a) 节点列表删界面返回节点原象nodeListdelByDevNum()
    b) 节点列表插入界面返回新节点象nodeListinsertNode()
    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
    4124 数库详细描述
    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 数库表设计
    表49 rfidTable数库表
    字段名
    类型
    属性
    描述
    id
    INTEGER
    primary key autoincrement
    ID键
    devId
    VARCHAR
    Null
    设备号
    rfId
    VARCHAR
    Null
    RFID号
    4125 框架详细描述
    · MyUartService类
    1 加载库SystemloadLibrary(uart_runtime)
    2 重写构造函数调 __init方法设备进行初始化
    3 通调方法实现java方法
    42 A8数传递架构模块
    421 层次接口表

    数传递(串口操作)
    应层
    UartDataUpdate
    New

    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

    图461 接口层次图


    图462 结构图
    422 HAL层
    1 宏
    表410 HAL层宏定义表
    名称


    UART_HARDWARE_MODULE_ID
    uart
    定义hal 模块id
    START
    0xAA
    数包开始符
    NEW
    0x01
    新节点加入发包
    INFO
    0x02
    采集信息包
    RFID
    0x04
    刷卡时发包
    2 全局变量
    表411 HAL层全局变量表
    名称
    类型

    fd
    int
    操作设备文件描述符
    3 结构体
    表412 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流程图

    图47 HAL层结构图
    423 JNI层
    1 宏
    表413 JNI层宏定义表
    名称


    UART_HARDWARE_MODULE_ID
    uart
    定义HAL 模块ID
    2 全局变量
    表414 JNI层全局变量表
    名称
    类型

    sUartDevice
    uart_control_device_t *
    保存通调stub中open接口devices handle
    sUartModule
    uart_module_t*
    保存通调Android HAL标准函数hw_get_module传入UART_HARDWARE_MODULE_IDUART stub句柄
    3 流程图
    JNI层实现Javacc++间渡涉复杂逻辑根规层函数调相应层接口参见整体流程
    424 Framework层
    表415 Framework层类表
    public class MyUartService
    方法

    SystemloadLibrary
    装载编译JNI层享库
    public MyUartService
    构造函数开初始化串口
    public String UartDataUpdate
    读取前串口信息数包
    public int UartSendCmd
    串口传送命令数包
    425 整体流程

    续:hal层

    图48 整体流程图
    426 关键代码分析
    1. NodeCmdjava
    static MyUartService myUartService new MyUartService() 新建象初始化
    String s myUartServiceUartDataUpdate() 更新采集数
    myUartServiceUartSendCmd(1 LED_ON) 点亮1号设备灯
    2. MyUartServicejava
    package cncomsmarthomeuart

    import androidutilLog

    public class MyUartService {
    *
    * load native service
    *
    static {
    SystemloadLibrary(uart_runtime) 装载库
    }

    public MyUartService() {
    _init() 注册方法开串口初始化
    }

    *
    * uart native methods
    *
    public String UartDataUpdate() {
    String s _uart_data_update()
    return sv
    }更新采集数

    public int UartSendCmd(int n int c) {
    _uart_send_cmd(n c)
    return 0
    } 发送命令控制M0板
    private static native boolean _init() 声明jni库提供方法
    private static native String _uart_data_update()
    private static native int _uart_send_cmd(int n int c)
    3. uart_stub\include\uarth
    struct uart_module_t {
    struct hw_module_t common
    }HAL 规定直接hw_module_t结构需做继承

    struct uart_control_device_t {
    定义针Uart控制结构包含hw_device_t支持API操作
    struct hw_device_t common
    * attributes *

    * supporting control APIs go here *
    int (*uart_read_hal)(struct uart_control_device_t *dev char *buf int count)
    int (*uart_write_hal)(struct uart_control_device_t *dev const char *cmd)
    }
    #define UART_HARDWARE_MODULE_ID uart 定义MODULE_IDHAL层根ID找HAL stub
    4. cn_com_smarthome_uart_MyUartServicecpp
    #define LOG_TAG MyUartService #include utilsLogh #include #include #include #include #include #include uart_stubincludeuarth

    static uart_control_device_t *sUartDevice 0
    static uart_module_t* sUartModule0 JNINativeMethod jni层注册方法Framework层方法 *_init uart_readuart_write Framework中调方法名称函数类型返回值:
    *()Z参数 返回值bool型 * ()LjavalangString 参数 返回值String型
    * (II)I 参数2int型 返回值int型

    static const JNINativeMethod gMethods[] {
    {_init ()Z (void*)uart_init} { _uart_data_update ()LjavalangString (void*)uart_read }
    { _uart_send_cmd (II)I (void*)uart_write }
    }

    static int registerMethods(JNIEnv* env) {
    static const char* const kClassName
    cncomsmarthomeuartMyUartService 注意:必须Framework层service类名相
    jclass clazz
    * look up the class *
    clazz env>FindClass(kClassName) 查找注册类
    if (clazz NULL) {
    LOGE(Can't find class s\n kClassName)
    return 1
    }

    * register all the methods *
    if (env>RegisterNatives(clazz gMethods
    sizeof(gMethods) sizeof(gMethods[0])) JNI_OK)
    {
    LOGE(Failed registering methods for s\n kClassName)
    return 1
    } 类中注册SO中Native接口接口定义gMethods数组中
    * fill out the rest of the ID cache *
    return 0
    }
    *
    *
    * * This is called by the VM when the shared library is first loaded
    * Android系统初始化时会动加载该JNI方法调表
    * 第次加载库时调函数注册方法 *
    jint JNI_OnLoad(JavaVM* vm void* reserved) {
    JNIEnv* env NULL
    jint result 1
    LOGI(zzs_JNI_OnLoad)

    if (vm>GetEnv((void**) &env JNI_VERSION_1_4) JNI_OK) {
    LOGE(ERROR GetEnv failed\n)
    goto fail
    } 获取前VM环境保存env变量中

    assert(env NULL)
    if (registerMethods(env) 0) {
    LOGE(ERROR PlatformLibrary native registration failed\n)
    goto fail
    } 写函数前JAVA环境中注册接口
    * success return valid version number *
    result JNI_VERSION_1_4

    fail
    return result
    } * JNI_OnLoad()函数完成:
      (1) 虚拟机环境信息保存库结构体JNIEnv实例中
      (2) 建立应层中UART控制服务库JNI函数表
    (3) 返回虚拟机库JNI版
    *



    5 uart_stub\module\uartc
    #define LOG_TAG UartStub
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include includeuarth
    #include crc16h
    #define N 6
    #define START 0xAA 传输协议宏
    #define NEW 0x01
    #define INFO 0x02
    #define RFID 0x04

    int fd

    typedef struct {
    char head
    char dev_no
    char type_data
    char length
    char temp[2]
    char hum[2]
    char bright[2]
    char adc[2]
    char acc[3]
    char rfid[N]
    short crc16
    }dev_data 传输协议格式

    CRC16校验函数查表法表crc16h
    static unsigned short get_crc16(const char * crc_head int crc_lenth )
    {

    unsigned char ucCRCHi 0x0
    unsigned char ucCRCLo 0x0
    int iIndex

    while ( crc_lenth ) {
    iIndex ucCRCLo ^ *( crc_head++ )
    ucCRCLo ( unsigned char )( ucCRCHi ^ aucCRCHi[iIndex] )
    ucCRCHi aucCRCLo[iIndex]
    }
    return ( unsigned short )( ucCRCHi << 8 | ucCRCLo )

    }

    static int uart_device_close(struct hw_device_t* device)
    {
    struct uart_control_device_t* ctx (struct uart_control_device_t*)device
    if (ctx) {
    free(ctx)
    }
    close(fd)
    return 0
    }

    static int uart_read_drv(struct uart_control_device_t *dev char *buf int count)
    {
    dev_data info_buf
    char rev_buf[40] {0} 存放整消息包
    char data_buf[40] {0} 存放消息包数段
    char ch

    ssize_t cur_size 0
    ssize_t r_size 0

    char data_lenth 0 数段长度
    char data_type 数类型
    char *data_head 数段头
    int dev_no 设备号
    char *crc_head CRC校验头
    int crc_lenth crc校验长度消息包头数段尾
    unsigned short crc16 校验值

    int timeout 10 超时处理长时间读消息timeout减0时返回层

    while (1)
    {
    timeout 采轮询读方法果没消息会直循环设置超时值超出没数话退出次读消息
    if (timeout) {
    LOGI(No start info_buf)
    return 1
    }
    if (read (fd &info_bufhead 1) < 0) {
    LOGE(read START err)
    continue
    } 判断否帧头继续循环判断

    if (info_bufhead START) {
    LOGI(head is x info_bufhead)
    continue

    } else { 判断否帧头继续循环判断 
    timeout 40
    if (read (fd &info_bufdev_no 1) < 0) {
    LOGE(read dev_no err)
    return 1
    } 读出设备号

    if (read (fd &info_buftype_data 1) < 0) {
    LOGE(read type_data err)
    return 1
    } 读出数类型

    if (read (fd &info_buflength 1) < 0) {
    LOGE(read length err)
    return 1
    } 读出数长度

    while (cur_size < (info_buflength+2)) {
    if ((r_size read (fd (rev_buf + 4) + cur_size (info_buflength + 2) cur_size)) < 0) {
    LOGI(read data err)
    continue
    }
    cur_size + r_size 累加总已读数应数长度较

    } 读出数

    break
    }
    }

    rev_buf[0] info_bufhead
    rev_buf[1] info_bufdev_no
    rev_buf[2] info_buftype_data
    rev_buf[3] info_buflength

    data_lenth info_buflength

    crc16 ((rev_buf[4+data_lenth] & 0xffff) << 8) | rev_buf[5+data_lenth]
    crc_head rev_buf
    crc_lenth data_lenth + 4

    CRC16校验
    if (crc16 get_crc16(crc_head crc_lenth)) {
    switch (info_buftype_data) {
    case NEW
    sprintf(buf SdFnId 4info_bufdev_no) 传递层传buf
    break

    case INFO
    sprintf(data_bufTddHddLdVddXdYdZd rev_buf[4]rev_buf[5]
    rev_buf[6]rev_buf[7] ((rev_buf[8] << 8) | rev_buf[9]) rev_buf[10] rev_buf[11]
    rev_buf[12] rev_buf[13] rev_buf[14])

    传递层传buf
    sprintf(buf SdFiIds strlen(data_buf) + 4 info_bufdev_no data_buf)
    break

    case RFID
    for (i0 i< data_lenth i++) {
    sprintf(data_buf+i*2 x rev_buf[i+4] >> 4)
    sprintf(data_buf+i*2+1 x rev_buf[i+4] & 0xf)
    }
    传递层传buf
    sprintf(buf SdFrIdRs strlen(data_buf)+5 info_bufdev_no data_buf)
    break
    } 收数包成适合传格式传递

    LOGI(HAL buf is s buf)
    } else {
    LOGE(CRC error)
    }

    return 0
    }

    static int uart_write_drv(struct uart_control_device_t *dev const char *cmd)
    {
    ssize_t w_size 0

    char cmd_buf[10] {0}
    char *crc_head
    char crc_lenth
    unsigned short crc16
    cmd_buf[0] 'S'
    cmd_buf[1] cmd[0] dev_no
    cmd_buf[2] 'c' cmd flag
    cmd_buf[3] '1' size of cmd
    cmd_buf[4] cmd[1] cmd

    crc16 get_crc16(cmd_buf 5)
    sprintf(cmd_buf + 5 cc crc16 >> 8 crc16 &0xff)
    eg:S1c105656

    if ((w_size write(fd cmd_buf strlen(cmd_buf))) < 0) {
    LOGE(write erro write d bytes w_size)
    return 1
    }

    LOGI(Hal write d bytes cmd s w_size cmd_buf)

    return 0
    }

    static int uart_device_open(const struct hw_module_t* module const char* name
    struct hw_device_t** device)
    {
    struct uart_control_device_t *dev
    struct termios options

    LOGD(HALuart_device_open)
    dev (struct uart_control_device_t *)malloc(sizeof(*dev))
    memset(dev 0 sizeof(*dev))

    HAL must init property
    dev>commontag HARDWARE_DEVICE_TAG 必须写
    dev>commonversion 0
    dev>commonmodule module
    dev>commonclose uart_device_close 关联关闭函数

    实例化支持操作
    dev>uart_read_hal uart_read_drv
    dev>uart_write_hal uart_write_drv

    *device &dev>common
    实例化uart_control_device_t址返回jni层
    样jni层直接调uart_read_drvuart_write_drvuart_device_close方法


    开硬件设备层需求底层阻塞非阻塞方式开
    if((fd open(devttyUSB0O_RDWR | O_NOCTTY | O_NDELAY)) < 0)
    {
    LOGE(open error)
    return 1
    }else {
    LOGI(open ok\n)
    }

    初始化串口
    tcgetattr(fd &options)
    optionsc_cflag | (CLOCAL | CREAD)
    optionsc_cflag & ~CSIZE
    optionsc_cflag & ~CRTSCTS 数流控制
    optionsc_cflag | CS8 数位修改8bit
    optionsc_cflag & ~CSTOPB 结束位
    optionsc_iflag | IGNPAR

    *网许流行linux串口编程版中没c_iflag(termios成员变量)变量进行效设置
    样传送ASCII码时没什问题传送二进制数时遇0x0d0x110x13会丢掉
    说知道肯定特殊字符作特殊控制关掉ICRNLIXON选项解决*
    c_iflag & ~(ICRNL | IXON)
    *0x0d 回车符CR
    0x11 ^Q VSTART字符
    0x13 ^S VSTOP字符
    ICRNL 输入CR转换NL
    IXON 起动停止输出控制流起作*


    optionsc_oflag 0
    optionsc_lflag 0

    cfsetispeed(&options B115200) 指定输入波特率115200bps
    cfsetospeed(&options B115200) 指定输出波特率115200bps
    tcsetattr(fdTCSANOW&options)

    return 0
    }

    定hw_module_methods_t结构体关联入口函数
    static struct hw_module_methods_t uart_module_methods {
    open uart_device_open
    }

    定义Stub入口
    注意必须:
    1hw_module_t继承类
    2必须HAL_MODULE_INFO_SYM名字

    const struct uart_module_t HAL_MODULE_INFO_SYM {
    common {
    tag HARDWARE_MODULE_TAG
    version_major 1
    version_minor 0
    id UART_HARDWARE_MODULE_ID
    模块ID层Service通ID应前Stub
    name uart HAL module
    author farsight
    methods &uart_module_methods 入口函数理结构体
    }
    * supporting APIs go here *
    }

    43 传输协议模块设计
    431 A8接收数格式
    表416 数格式表
    buf[0]
    buf[1]
    buf[2]
    buf[3]
    buf[length]
    send_buf[n]
    数包头
    设备号
    数类型
    数长度

    校验
    0xAA
    dev_no
    type_data
    length
    data
    Crc16校验
    1byte
    1byte
    1byte
    1byte
    length bytes
    2bytes
    数包头:M0A8发送数包头0xAA
    A8M0发送数包头0x55
    设备号: M0设备号(房间号)
    数类型:0x01 M0开机(房间开启监控)
    0x02 温度湿度光度类型数
    0x04RFID卡类数
    数长度:数域字节数
    校验:crc16校
    M0采集数结构体
    #define N 6
    typedef struct
    {
    char head 数包头
    char dev_no 设备号
    char type_data 数类型 0x02般温度湿度类型数 0x04卡类数类型
    char length 数长度 温湿度数长度
    char temp[2] 温度数
    char hum[2] 湿度数
    char bright[2] 光度数
    char adc[2] ADC 转换数
    char acc[3] 三轴加速xyz
    char rfid[N] 卡类数
    short crc16 crc校验值
    }dev_data
    表417 M0发送数类型
    命令类型
    0x01
    命令
    Crc16校验

    0x01 开机
    高位
    低位

    Buf[4]
    Buf[5]
    Buf[6]

    温湿度数
    0x02
    温度
    湿度
    光度
    AD转换
    高位
    低位位
    高位
    低位
    高位
    低位
    高位
    低位
    Buf[4]
    Buf[5]
    Buf[6]
    Buf[7]
    Buf[8]
    Buf[9]
    Buf[10]
    Buf[11]
    16位
    16位
    16位
    16位
    三轴加速
    Crc16校验

    X
    Y
    Z
    高位
    低位

    Buf[12]
    Buf[13]
    Buf[14]
    Buf[15]
    Buf[16]

    8位
    8位
    8位
    16位

    卡类信息
    0x04
    RFID卡号
    Crc16校验
    高位
    低位
    高位
    低位
    高位
    低位
    高位
    低位
    Buf[4]
    Buf[5]
    Buf[6]
    Buf[7]
    Buf[8]
    Buf[9]
    Buf[10]
    Buf[11]
    16位
    16位
    16位
    16位
    432 M0接收命令数结构
    Typedef struct
    {
    char head 数包头 S’
    char dev_no 设备号(房间号)
    char type_data 数类型c’
    char length 数长度 数长度
    char cmd 命令 温湿度数长度
    short crc16
    }dev_cmd
    表418 M0接收数类型
    命令
    Crc16校验
    M0接收数
    高位
    低位
    8位
    8位
    8位
    Buf[5]
    Buf[6]
    Buf[7]
    表419 数应命令
    命令
    动作
    0x30
    LED_ON(开灯)
    0x31
    LED_OFF(关灯)
    0x32
    Fan_ON(开风扇)
    0x33
    Fan_OFF(关风扇)
    0x34
    Nixietube_ON(开数码)
    0x35
    Nixietube _OFF(关数码)
    0x36
    BEEP_ON(开蜂鸣器)
    0x37
    BEEP_OFF(关蜂鸣器
    第 5 章 终端M0模块设计
    51 终端设备方案描述
    智家居终端设备负责室种信息进行采集信息传终端设备终端设备发出指令进行时响应室相关信息包括温湿度光感度三轴加速度电压信息进出室刷卡信息
    控制器选择NXPLPC11C14(简称M0)ARM CortexM0系列低功耗32位处理器高工作50MHZ速度功耗抗干扰力完全够胜终端数采集重
    前端设备终端设备通信采ZigBee通信模块功耗低成低具优良网络拓扑结构便组网M0间连接采双SPIIICUART转换芯片SC16IS752节省片限UART资源器件里做赘述整体方案图51示:

    图51 终端设备整体方案图
    52 终端设备工作流程
    1) 系统电初始化系统时钟IO时钟配置LEDFANSPEAKER7LEDIO端口初始化SPI0SPI1系统滴答定时器设置中断时间1ms中断处理函数中1S全局变量counter1counter2加1
    2) 终端发送新设备注册节点信息
    3) 判断counter1否4S收集数信息指定协议发送终端设备时counter1清零
    4) 判断counter1否3S喂狗时counter2清零
    5) 读取 SPI752_rbuf_1[]果数存储指定数组中然判断否接收完毕接受完毕进行数校验校验正确根协议中指定位判断否发指令果执行相应指令处理函数数未接受完毕继续步操作
    6) 查否刷卡信息进行相应卡操作没返回步骤3继续操作
    M0工作流程图52示

    图52 M0整体工作流程图
    53 功模块描述
    531 温湿度传感器DHT10
    5311 基概述
    DHT10数字温湿度传感器款含已校准数字信号输出温湿度传感器具成低性稳定抗干扰力强等优点
    采简化单总线通信机通特定时序进行访问次传送机40位数高位先出数格式:
    8bit温度整数数 + 8bit温度数数 + 8bit湿度整数数 + 8bit湿度数数 + 8bit校验位
    中8bit校验位前面4Byte数
    M0连接图53示中拉电阻R30保证总线空闲时状态高电

    图53 DHT11原理图
    5312 操作流程时序
    户机发起开始信号数时序图54示:

    图54 DHT11数时序图
    M0读取数步骤:
    1) DHT11电(DHT11电等1S越稳定状态期间做操作)测试环境温湿度记录数时DHT11DATA数线拉电阻拉高引脚处输入状态时刻检测外部起始信号
    2) M0设置输出输出低电保持18ms然M0设置输入时DATA数线拉高等DHT11响应信号
    3) DHT11接收M0低电起始信号延时段时间M0发送80us低电响应信号接继续发送80us高电信号通知M0准备接收数M0接受低电响应信号延时80us接受数
    4) DHT11DATA引脚输出40位数MO根电变化获数位数0格式50us低电加2628us高电位数1格式50us低电加70us高电
    5) DHT11输出40位数继续输出50us低电转输入状态
    532 ZigBee通信部分
    5321 ZigBee通信模块
    ZigBee模块采周立功公司代理ZICM2410模块提供种数接口里选择UART串口M0间通SC16IS752转换芯片进行连接图55示

    图55 ZigBeeM0连接图
    ZICM2410模块方便需数接口进行读写里做赘述网络配置参操作手册
    5322 SC16IS752操作流程
    SC16IS752款双SPIIIC转UART芯片里选择SPI转UART种模式做机MO机分含64Byte发送接收FIFO默认情况FIFO未FIFO第字节接收数含七种优先级中断里RHR(数接收)中断数时产生RHR中断时IRQ引脚拉低相连MO脚设置降触发中断时M0产生中断中断处理函数中通读取IS752中断标识寄存器(IIR)判断否数接收中断读取数接收保持寄存器(RHR)读取出数保存全局数接收循环队列SPI752_rbuf_1[MAX]中时队尾全局变量SPI752_rbuf_0_ip加1超位置MAX 1置0时存队头全局变量SPI752_rbuf_0_op指前读取数位置开始时队头队尾指位置函数中通轮询查否数队头队尾否相等等读取队头数队头加1超MAX 1置0M0ZigBee接收中断程序流程图56示
    5323 SPI串行外设接口
    1概述
    M0两SPI控制器分SPI0SPI1ZigBee相连SPI1SPI0RFID模块相连
    SPI接口四引脚分SCKSSELMISOMOSI功:
    ● SCK串行时钟信号步数传输机驱动机接收发送数时会处激活状态
    ● SSEL作机时发送数前该脚发送数结束释放该脚
    ● MISO机输入机输出
    ● MOSI机输出机输入

    图56 ZigBee接收中断函数流程图
    2SPI操作流程
    SPI前先SPI时钟单元M0说初始状态单元时钟模块未接SPI进行基设置设置数帧长度捕获方式等外M0设置机模式接进行数收发操作分析SPI数传输双数发送接受时步方数效操作时般发送接收封装函数中
    发送数前先判断TX FIFO否满满发送数写入DR寄存器低16位DATA寄存器果时总线SPI控制器忙数会立发送否写入DATA寄存器数直等直前数发送完止果发送数足16位需软件进行纠正
    接收数时先判断RX FIFO否空空读取DATA寄存器里数里返回数新帧数果数长度足16位高位补零
    SPI数发送接收图57示:

    图57 SPI数发送接收流程图
    533 RFID读卡模块
    RFID读卡模块通SPI0接口M0进行连接中断引脚M0IO 口相连程序中判断该IO口电高低判断否卡果卡进行相应读卡操作
    RFID命令格式:前导头 + 通讯长度 + 命令字 + 数域 + 校检码
    中前导头固定0XAA 0XBB通讯长度掉前导头通讯长度身数帧字节数命令字数域详见模块说明里读取卡号命令字0X20返回数域4字节卡号cpu发送命令帧需等读取返回值返回值格式:
    前导头+数长度+次发送命令字+数域+校检码
    RFID读卡流程图58示:

    图58 RFID读卡流程
    534 IIC接口部分
    5341 IIC概述
    根方位状态(RW)IIC总线存两种数传输状态:
    1)发送器接收器发送数机发送第字节机址接发送机数机接收字节发回ACK 应答
    2)发送器接收器发送数接收器先发送发送器址发送器接收返回ACK接发送器接收器发送数字节外接收器接收字节返回ACK字节返回非应答位
    发送接收串行时钟信号起始停止位机发起发送字节状态寄存器中会相应状态SI位会置位时SI中断处理函数中根寄存器状态作相应处理具体状态相应操作详见数手册
    5342 IIC操作流程分析
    1) IIC初始化:复位IICIIC时钟单元设置相应I0口IIC功清应答位起始位中断位IIC位设置IIC传输速率果机话设置机址IIC中断启动IIC
    2) IIC启动
    uint32_t I2CStart( void )
    {
    uint32_t timeout 0
    uint32_t retVal FALSE
    LPC_I2C>CONSET I2CONSET_STA 设置起始位
    *循环等起始位发送设置超时时间*
    while( 1 )
    {
    if ( I2CMasterState I2C_STARTED ) 起始位发送成功中断中设置
    {
    retVal TRUE
    break
    }
    if ( timeout > I2C_MAX_TIMEOUT ) 起始位发送超时
    { retVal FALSE
    break
    }
    timeout++
    }
    return( retVal )
    }
    3)IIC停止
    uint32_t I2CStop( void )
    {
    LPC_I2C>CONSET I2CONSET_STO 设置停止位
    LPC_I2C>CONCLR I2CONCLR_SIC 清中断标志
    *等停止位发送*
    while( LPC_I2C>CONSET & I2CONSET_STO )
    return TRUE
    }
    4)IIC次完整通信
    uint32_t I2CEngine( void )
    {
    I2CMasterState I2C_IDLE 初始状态
    RdIndex 0
    WrIndex 0
    if ( I2CStart() TRUE ) 发送启动信号
    {
    I2CStop()
    return ( FALSE )
    }

    while ( 1 )
    {
    if ( I2CMasterState DATA_NACK ) 判断数否传输完毕
    {
    I2CStop() IIC停止
    break
    }
    }
    return ( TRUE )
    }
    5)发送代码
    void I2CWrite(uint8_t addr uint8_t* buf uint32_t len)
    {

    I2CAddr addr 设置机址
    I2CMasterBuffer buf 发送Buffer指传输数
    I2CWriteLength len 发送数长度
    I2CReadLength 0

    I2CEngine() 启动IIC完整通信程

    I2CWriteLength I2CWriteLength
    }
    6)中断处理函数
    次状态改变SI位会置位中断处理函数中根状态码进行相应操作操作中清SI位必须做里列出发送中断处理函数部分部分根数手册操作流程进行相应操作
    void I2C_IRQHandler(void)
    {
    uint8_t StatValue
    * 仅列出发送方式处理*
    StatValue LPC_I2C>STAT 读取状态码
    switch ( StatValue ) 根状态码执行操作
    {
    case 0x08 已发送起始条件
    WrIndex 0
    LPC_I2C>DAT I2CAddr SLA + W装入数寄存器
    LPC_I2C>CONCLR (I2CONCLR_SIC | I2CONCLR_STAC)请吃SICSTAC位
    I2CMasterState I2C_STARTED
    break

    case 0x10 已发送重复起始条件
    RdIndex 0
    * 发送SLA + R状态位 *
    LPC_I2C>DAT I2CAddr
    LPC_I2C>CONCLR (I2CONCLR_SIC | I2CONCLR_STAC)
    I2CMasterState I2C_RESTARTED
    break

    case 0x18 发送SLA + W已接受ACK
    if ( I2CMasterState I2C_STARTED )
    {
    LPC_I2C>DAT I2CMasterBuffer[WrIndex++] 发送数写入DATA寄存器
    I2CMasterState DATA_ACK
    }
    LPC_I2C>CONCLR I2CONCLR_SIC
    break

    case 0x28 * 数已发送返回ACK非ACK*
    case 0x30
    if ( WrIndex < I2CWriteLength ) 判断否发送完未完继续发送
    {
    LPC_I2C>DAT I2CMasterBuffer[WrIndex++]
    I2CMasterState DATA_ACK
    }
    Else 指定长度数已发送完
    {
    if ( I2CReadLength 0 )
    {
    LPC_I2C>CONSET I2CONSET_STA 设置重复起始条件
    I2CMasterState I2C_REPEATED_START
    }
    else
    {
    I2CMasterState DATA_NACK
    LPC_I2C>CONSET I2CONSET_STO 置位停止位
    }
    }
    LPC_I2C>CONCLR I2CONCLR_SIC
    break
    ……
    }
    第 6 章 系统测试
    61 项目演示
    1 开A8设备启动SmartHome程序图61示

    图61 启动SmartHome
    2 开M0设备(NO2) SmartHome程序检测设备添加图62示开M0设备(NO1)SmartHome程序会动排序添加图63示

    图62 启动M0(No2)

    图63 启动M0(No2)
    3 测试M0控制器点击风扇键图64示M0风扇正常开点击Led灯键图65示M0 Led灯正常开点击蜂鸣器键图66示M0蜂鸣器正常开点击数码键图67示M0数码正常开
    6
    图64 开风扇
    图65 开电灯
    图66 开蜂鸣器
    图67 开数码
    4 测试M0传感器未调节M0 ADC前AD值图68示调节M0 ADCAD值图69示图例观测程序左角机器会根M0 三轴加速器(xy)值进行位置改变

    图68 未调整AD值

    图69调整AD值
    4 测试RFID磁卡M0进行刷卡操作模拟户进入效果图610示磁卡次M0进行刷卡操作模拟户退出效果图611示

    图610户进入
    图611户退出
    5 测试设备离线关闭设备模拟设备退出等35秒相应设备图标消失效果图612示开设备设备重新添加效果图613示

    图612关闭设备
    图613关闭设备

    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 5 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    毕业论文(设计)基于安卓的多功能时钟app设计与实现

    目 录摘 要 1ABSTRACT 2第1章 绪论 31.1 开发背景 31.2 研究现状 51.3 本文的主要工作 61.4 论文的组织结构 6第2章 安卓相关介绍 72.1 安卓系统...

    4年前   
    1067    0

    基于Android Studio的饼图账单的设计与开发Android毕业论文

    毕 业 论 文 基于Android Studio的饼图账单的设计与开发Design and Development of PieChart Billing Based on Android S...

    4年前   
    783    0

    基于安卓系统的点餐系统毕业设计

     本科毕业论文(设计) 题 目: 基于安卓系统的点餐系统 专 业: 姓 名: 指导教师: ...

    5年前   
    1686    0

    基于Android智能风扇的设计

    由于科技越来越发达,智能硬件也使用越来越多,基于蓝牙的技术开发以及应用也是快速的发展。其使用在Android系统和Windows系统等平台上都可以使用蓝牙无线模块。可以实现了主蓝牙设备和从设备它...

    3年前   
    967    0

    基于Android的网上订餐系统毕业论文

    XX 大 学 毕 业 设 计( 论 文 ) 题目 基于Android的网上订餐系统 作者 学院 专业 学号 指导教师 二〇XX 年 X月 X日 摘 要 ...

    5年前   
    1800    0

    基于安卓系统的一款音乐APP设计与实现

    近年来,在移动设备市场中,手机逐渐成为了用户的第一选择。随着移动应用技术和互联网技术的深入发展,人们对手机应用的功能和性能也就有了更加高的要求,一些音乐App已经不能满足人们对个性化、简洁化的需求。

    3年前   
    982    0

    基于Android的教学课程系统设计与开发

    摘 要移动应用已经成为人们生活必不可缺的一部分,大学生身为移动应用的最大用户群体,在生活学习娱乐各个方面都与移动应用有着紧密联系,然而针对大学生校园学习的移动应用却寥寥无几,因为不同的...

    3年前   
    608    0

    基于Android的中国象棋毕业设计

    基于Android的中国象棋毕业设计 摘 要 现在智能操作系统迅速发展,使得智能手机和其他的智能移动设备得到广泛普及,因此,智能操作系统的应用软件开发及其需要的服务将有广阔的发展前景...

    5年前   
    1205    0

    基于android的物业管理系统的设计与实现19.8

     目录基于android的物业管理系统的设计与实现 3摘 要 3Android property managemengt system 5Abstract 51 绪论 61.1 选题背景 6...

    3年前   
    797    0

    基于Android的外卖点餐类的app的设计与开发

    基于Android的外卖点餐类app的开发与设计 摘 要:在这千变万化的岁月中,手机已不是稀奇之物。规矩的传统订餐已经不能在我们生活中得到满足,用户们需要一个可以在家查看餐厅以及点餐的服务。...

    7个月前   
    188    0

    基于Android的志愿活动平台的设计与实现

     基于Android的志愿活动平台的设计与实现 ...

    11个月前   
    464    0

    基于安卓手机平台的视频播放器的设计与实现毕业设计

    本科毕业设计 题目:基于安卓手机平台的视频播放器的设计与实现 Title:Design and implementation of the Android mobile phone p...

    5年前   
    1271    0

    基于Android的FTP文件传输

     毕业设计(论文) 题 目 基于Android的FTP文件传输 姓 名 学 ...

    5年前   
    1056    0

    基于Android植物大战僵尸

    摘要 手机游戏,顾名思义就是指在手机上运行的游戏软件。目前用来编写手机程序使用最多的是 Java 语言。随着科技的发展,手机的硬件更新速度越来越快,功能也越来越强大。现在的手机游戏具有很强的...

    5年前   
    1296    0

    基于Zigbee的智能家居系统毕业设计

    学 号_______ ___ henhuangmahenshuang毕 业 论 文 课 题基于Zigbee的智能家居系统设计 学生姓名 基于Zigbee的智能家居系统设计...

    3年前   
    855    0

    基于智能家居供应链管理的智能合约设计研究

    科技在发展,时代在进步,随着物联网、大数据、5G技术等信息技术的飞速发展,智能家居等以柔性化生产为主的产业发展尤为迅速,但是其供应链的上下游结构变得日益复杂,因此将会导致的供应链上出现首尾信息难...

    3年前   
    665    0

    基于物联网的智能家居控制系统设计与实现

    物联网是在信息社会发达的今所衍生的产品,他是基于互联网的模块上,利用射频识别技术、无线网等技术,打造一个联系世界不同物体,不同模块的“Internet of Things”。在这个模块网络中,...

    5年前   
    6135    0

    基于语音识别技术的智能家居控制系统的设计

    21世纪经济快速发展,人们对物质文化的需求也越来越高。在信息科技的支持下,事物在朝着简单化、便捷化、智能化的方向发展。在此背景下应运而生而生的智能家居,正是信息时代的典型产物。

    4年前   
    1195    0

    论文开题报告:定稿基于Android的快递APP设计与实现

    目前,为了提高取件效率,快递公司在一些快递密集型的投放点放置了智能云柜,取件人通过快递公司发送的密码来开启云柜。虽然这种方式大大提高了取件效率,让取件人的取件时间更加自由,但是云柜只能存放一些体...

    5年前   
    2900    0

    基于Android的电子书阅读器的设计与实现

    毕业设计说明书(论文)中文摘要Android平台现在非常的火,我们平时使用的智能手机,平板电脑,还有新的智能电视,有很大部分是基于Android平台的,很显然,它在人们生活中的表现得越来越重要...

    3年前   
    633    0

    文档贡献者

    文***享

    贡献于2020-12-09

    下载需要 5 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档