




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第九届智控大赛设计报告 智能家居系统 电子与信息学院 学院 信息工程专业学生 黄国航,王得丘 队名 LHW提交日期 2014 年 3 月 29 日摘要本实现了基于 Zigbee、MFC、Android、OpenGL 的智能宿舍系统、可以广泛应用于各种实际生活中。本使用了 Zigbee 模块、温湿度感应模块、气体感应模块、继电器模块、光敏传感器模块等各种复杂种类的模块,具有极强的功能和协调性、功能性。:ZigbeeMFCAndroid2AbstractThis work has realized based on Zigbee, MFC,OpenGL, the intelligence of t
2、he Android platform dormitory system, can be widely used in all kinds of real life.This work USES the Zigbee module, temperature v humidity sensor module, toxic gas sensing module, relay module, photosensitive sensor module and other complex types of modules,with strong function and coordination, fu
3、nctional.KeyWords:ZigbeeMFCAndroid3目录一、二、三、四、五、六、方案比较设计与论证理论分析与计算电路图及有关设计文件测试方法与仪器测试数据及测试结果分析。4正文一、 方案比较1)设计并制作一套智能家居系统,对家用设备、家庭成员出入管理。系统由主控机及分散终端组成,主控机负责对用户进出户和家用电器的管理等任务,终端负责门禁与家用电器设备的。系统通过无线的方式组网,主机和终端之间可以双向通信,终端间可不进行通信,终端可以方便增加。主机上编写友好的人机界面,方便系统本系统演示时,终端数>= 2。、设置等操作。方案一:用 51 单片机+NRF2401 无线通讯模
4、块方案二:用 51 单片机+Zigbee 无线通讯模块方案三:用 51 单片机+/GPRS 模块方案一最省钱,最,但是功能最简陋;方案三功能很强大,但最昂贵;方案二价钱中等,且功能较强大,故我们选择方案二。2)终端一:电子门禁执行器,1、负责 ID 卡信息扫描,提示用户类型,并将用户信息传送给主机;2、执行开门动作(可由终端本身产生,也可由主机产生),开门动作可用声光代替;方案一:用 51 单片机+RC522 模块方案二:用 51 单片机+RFID 模块方案三:用 51 单片机+NFC 模块方案一最省钱,最,功能基本能达到我们的要求;方案三功能很强大,但最昂贵;方案二价钱也很昂贵,且功能较强大
5、。故我们选择方案一。3)终端二:为家用电器电源开关端(电灯等)。需完成以下功能:1、在未联网的情况下,现场演示与主机进行联网,并且断电重启后无需再次联网;2、当用户开门时登记并向主机传输使用者信息;3、执行开关动作,电灯电源开关采用继电器,继电器输出端不需要接市电,但需以某种形式展现开关动作。(电灯可用 LED 代替)方案:用 51 单片机+Zigbee 无线通讯模块54)主机:1、应具有良好的人机界面,可与终端进行双向通的用户信息。2、主机操作对象分为:主要家庭成员和家庭收终端提交两种。其中,家庭可在主机执行添加、删除终端操作(终端一不可移除)。3、建立良好的界面可进行终端电灯的亮灭。方案一
6、:用 MFC 上位机+Zigbee 无线通讯模块方案二:用 VB 上位机+Zigbee 无线通讯模块方案三:用 Android 上位机+Zigbee 无线通讯模块方案二开发起来比较快,功能也很简陋;方案一和方案三都具有较强的功能和较大的开发周期,故我们选择了方案一和方案三。发挥部分1) 在满足一定条件时(超过夜晚 12 点,需要自行设置时间),主机束指令,实现自动断电,关闭门禁等功能。结方案:用 51 单片机+Zigbee 无线通讯模块2) 在主机上建立设备和的信息数据库,可实时家庭成员开门等信息。方案:用 MFC 上位机+Zigbee 无线通讯模块3) 可方便导出门禁设备及电灯使用情况,导出
7、至 PC 可使用 txt 格式(excel、word 等 better)。方案:用 MFC 上位机+Zigbee 无线通讯模块4) 实现异常监督功能。如掉网、突然掉电等。方案:用 51 单片机+Zigbee 无线通讯模块5) 其他创新(如识别进行开门操作等)。方案:用 51 单片机+Zigbee 无线通讯模块+语音识别模块6二、 设计和论证第一章系统方案7第二章功能与指标8第三章实现原理TQ2440-LinuxQTAndroidOpenGLMFCZigbee9一、 Zigbee 概述物联网的定义是:通过射频识别(RFID)、红外感应器、全球 、激光扫描器等信息传感设备,按约定的协议,把任何物体
8、与互联网相连接,进行信息交换和通信,以实现对物体的智能化识别、 、跟踪、 和管理的一种网络。无线传感网络的定义是:大规模,无线、自组织、多跳、无分区、无基础设施支持的网络其中的节点是同构的、成本较低、体积较小,大部分节点不移动,被随意撒布在工作区域,要求网络系统有尽可能长的工作时间。 在通信方式上,虽然可以采用有线、无线、红外和光等多种形式,但一般认为短距离的无线低功率通信技术最适合传感器网络使用,为明确起见,一般称无线传感器网络(WSNWireless Sensor Network)。Zigbee 是 IEEE 802.15.4 协议的代名词。根据这个协议规定的技术是一种短距离、低功耗的无线
9、通信技术。这一名称来源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飞翔和“嗡嗡”(zig)地抖动翅膀的“舞蹈”来与同伴传递花粉所在方位信息,也就是说蜜蜂依靠这样的方式 了群体中的通信网络。其特点是近距离、低复杂度、自组织、低功耗、低数据速率、低成本。主要适合用于自动 和 领域,可以嵌入各种设备。简而言之, ZigBee 就是一种便宜的,低功耗的近距离无线组网通讯技术。无线传感网络的无线通信技术可以采用 ZigBee 技术、蓝牙、Wi-Fi 和红外等技术。ZigBee 技术是一种短距离、低复杂度、低功耗、低数据速率、低成本的双向无线通信技术或无线网络技术,是一组基于 IEEE802.15.4 无线标准
10、研制开发的组网、安全和应用软件方面的通信技术。协议栈是指网络中各层协议的总和,其形象的反映了一个网络中文件传输的过程:由上层协议到底层协议,再由底层协议到上层协议。使用最广泛的是英特网协议栈,由上到下的协议分别是:应用层(HTTP, TELNET, DNS,等),层(TCP, UDP),网络层(IP),链路层(WI-FI,以太网,令牌环,FDDI 等),物理层。ZigBee V1.0”。 ZigBee于 2005 年公布了第一份 ZigBee 规范“ ZigBee Specification协议规范使用了 IEEE 802.15.4 定义的物理层(PHY)和介质层(MAC),并在此基础上定义了
11、网络层(NWK)和应用层(APL)架构。ZigBee2007/PRO 无线传感器网络与 ZigBee2006 无线传感器网络相比最大区别在于其支持最新 ZigBee2007/PRO 网络,提供更精确传感器(如增加高精度温湿度数字传感器等),提供可扩展接口,提供更大网络支持,速度更快/处理能力更强低功耗微器等。ZigBee 的技术特性决定它将是无线传感器网络的最好选择,广泛用于物联网,自动和监视等诸多领域。以美国德州仪器 TI 公司 CC2430/CC2530为代表的 ZigbeeSOC 解决方案在国内高校企业掀起了一股 Zigbee 技术应用的热潮。 CC2430/CC2530 集成了 51
12、单片机内核, 相比于众多的 Zigbee CC2430/CC2530 颇受青睐。,ZigBee 新一代 SOC802.15.4 标准/ZigBee/ZigBee 256 个字节,CC2530 是理想CC2530 是真正的片上系统解决方案,支持 IEEE RF4CE 和能源的应用。拥有庞大的快闪记忆体多达ZigBee 专业应用。CC2530 结合了一个完全集成的,高性能的 RF 收发器与一个 8051 微处理器,8 kB 的闪存,以及其他强大的支持功能和外设。CC2530 提供了 101dB 的链路质量,优秀的RAM,32/64/128/256 KB灵敏度和健壮的性,四种供电模式,多种闪存,以及
13、一套广泛的外设集包括 2 个 USART、 12位 ADC 和 21 个通用 GPIO,以及。除了通过优秀的 RF 性能、选择性和业界标准增强 8051MCU 内核,支持一般的低无线通信, CC2530 还可以配备 TI 的一个标准兼容或专有的网络协议栈(RemoTI, Z-Stack,或发,使你更快的获得市场。 CC2530 可以用于的应用包括SimpliciTI)来简化开、消费型电领域。子、家庭、计量和智能能源、楼宇自动化、医疗以及IEEE 802.15.4 标准概述IEEE802.15.4 是一个低速率无线个人局域网(LowRateWirelessalAreaNetworks,LR-WP
14、AN)标准。该标准定义了物理层(PHY)和介质层(MAC)。这种低速率无线个人局域网的网络结构简单、成本低廉、具有有限的功率和灵活的吞吐量。低速率无线个人局域网的主要目标是实现安装容易、数据传输可靠、短距离通信、极低的成本、合理的电池活的通信网络协议。LR-WPAN 网络具有如下特点:,并且拥有一个简单而且灵collision实现 250kb/s,40kb/s,20kb/s 三种传输速率。支持星型或者点对点两种网络拓扑结构。具有 16支持位短地址或者 64 位扩展地址。避免载波多路侦听技术(carriersensemultipleaccesswithavoidance ,CSMA-CA)。用于
15、可靠传输的全应答协议。低功耗。能量检测(Energy Detection,ED)。1011 链路质量指示(Link Quality Indication,LQI)。 在 2450MHz 频带内定义了 16 个通道;在 915MHz 频带内定义了 10个通道;在 868MHz 频带内定义了 1 个通道。为了使供应商能够提供最低可能功耗的设备,IEEE(Institute ofElectrical and Electronics Engineers ,电气及电子工程师学会 ) 定义了两种不同类型的设备:一种是完整功能设备(full functional device , FFD) , 另一种是简化
16、功能设备(reducedfunctional device,RFD)。二、 Zigbee 协议栈物理层( PHY)物理层定义了物理无线信道和 MAC层管理服务。物理层内容:子层之间的接口,提供物理层数据服务和物理1) ZigBee 的激活;2) 当前信道的能量检测;3) 接收链路服务质量信息;4) ZigBee 信道接入方式;5) 信道频率选择;126)数据传输和接收。介质接入子层(MAC)MAC 层负责处理所有的物理无线信道,并产生网络信号、同步信号;支持 PAN连接和分离,提供两个对等 MAC 实体之间可靠的链路。MAC 层功能:1) 网络协调器产生信标;2) 与信标同步;3) 支持 PA
17、N(个域网)链路的建立和断开;4) 为设备的安全性提供支持;5)信道接入方式采用免载波检测多址接入(CSMA-CA)机制;6) 处理和维护保护时隙(GTS)机制;7) 在两个对等的 MAC 实体之间提供一个可靠的通信链路。网络层(NWK)ZigBee 协议栈的部分在网络层。网络层主要实现节点加入或离开网络、接收或抛弃其他节点、路由查找及传送数据等功能。网络层功能:1) 网络发现;2) 网络形成;3)设备连接;4) 路由器初始化;5) 设备同网络连接;6) 直接将设备同网络连接;7) 断开网络连接;8) 重新复位设备;9)同步;10)信息库维护。 应用层(APL)ZigBee 应用层框架包括应用
18、支持层(APS)、ZigBee 设备对象(ZDO)和制造商所定义的应用对象。应用支持层的功能包括:维持绑定表、在绑定的设备之间传送消息。ZigBee 设备对象的功能包括:定义设备在网络中的(如 ZigBee 协调器和终端设备),发起和响应绑定请求,在网络设备之间建立安全机制。ZigBee 设备对象还负责发现网络中的设备,并且决定向他们提供何种应用服务。ZigBee 应用层除了提供一些必要函数以及为网络层提供合适的服务接口外,一个重要的功能是应用者可在这层定义的应用对象。应用程序框架(AF):运行在 ZigBee 协议栈上的应用程序实际上就是厂商自定义的应用对象,并且遵循规范(profile)运
19、行在端点 1 240 上。在 ZigBee 应用中,提供 2 种标准服务类型:键值对(KVP)或报文(MSG)ZigBee 设备对象(ZDO):ZigBee 设备对象(ZDO)的功能包括负责定义网络中设备的,如:协调器或者终端设备。还包括对绑定请求的初始化或者响应,在网络设备之间建立安全等。实现这些功能,ZDO 使用 APS 层的 APSDE-SAP 和网络层的 NLME-SAP。ZDO 是特殊的应用对象,它在端点(entire)0 上实现。设备通过 ZDO 请求描述符信息,1314接收到这些请求时,ZDO 会调用配臵对象获取相应描述符值。三、 温湿度传感器模块DHT11 数字温湿度传感器是一
20、款含有已校准数字信号输出的温湿度复合传感器。它应用 的数字模块 技术和温湿度传感技术,确保 具有极高的可靠性与卓越的长期稳定性。DHT11 引脚:+(VCC),S(DATA),-(GND),实验相关寄存器DHT11 数字温湿度传感器用到了串口和 P0_7,前面已详细讲解了串口相关寄存器的配置与使用, DHT11 程序采用模块化编程思想,只需调用温度 函数即可,相当方便,移植到其它平台也非常容易。四、气体模块接线方式:1、VCC:接电源正极(5V)2、GND:接电源负极3、DO:TTL 开关信号输出4、AO:模拟信号输出(悬空没有使用)4实验相关寄存器实验中使用 P0_6 做为检测引脚,当浓度高
21、于设定值时 ,P0_6 为低电平, 状态时为正常高电平。DO 输出电平和厂家有关,具体信息请参考模块的参数。配置法:P0SEL &= 0x40;/设置 P0.6 为普通 IO 口P0DIR &= 0x40;/P0.6 定义为输P0_6的方五、红外传感器模块D-SUN PIR靠性强、红外感应模块 是基于红外线技术的自动。灵敏度高、可超低功耗,超低电压工作模式。接线方式:151、VCC:接电源正极(5V)2、OUT:检测引脚3、GND:接电源负极的模块请仔细核对一下引脚,确保连接正确。4实验相关寄存器实验中使用 P0_4 作为检测引脚, 人进入其感应范围模块输出高电平,点亮 LED
22、1, 人离开感应范围 LED1 熄灭 P0.4 口为 HC-SR501 传感器的输入端。具体 HC-SR501 人体感应模块OUT 输出电平由模块决定,不同厂家可能不一样,不一样关系也不大,改动非常的小。六、光敏传感器模块4实验相关寄存器仔细核对引脚后将传感器插到 P9 上,继电器、光敏、热敏共用不同,P0.5 引脚,不过配置当使用继电器 P0.5 作为输出引脚,使用光敏、热敏时配置成输入引脚。1617七、 继电器模块1 路继电器模块,低电平触发,上面写有 5V 其实只能用 3.3V 驱动,5V 工作不正常的哦,购买时请选 3.3V 或者兼容 3.3V 的继电器,买图片中的也可正常使用。接线方
23、式:1、VCC:接电源正极2、GND:接电源负极3、IN: 信号输入端4实验相关寄存器实验中将继电器接开发板 P9 座子,使用 P0.5 口作为继电器的信号输入端,高电平继电器断开;低电平继电器吸合,并且继电器吸合指示灯亮。八、MFC 上位机模块简单而强大的多线程串口编程工具 CserialPort 类(附 VC 基于 MFC 单文档协议通讯源程序及详细编程步骤)老有人觉得 MSComm 通讯控件很土,更有声疾呼:忘了它吧。确实当我们对串口编程有了一定的了解后,应该用 API 函数写一个属于的串口程序,由于编程者对程序了解,对程序修改自如。但我一直没有停止过用 MSComm 通讯控件,那么简单
24、的东西,对付简单的任务完全可以,但当我们需要在程序中用多个串口, 而且还要做很多复杂的处理,那么最好不用 MSComm 通讯控件,如果这时你还不愿意 编写底层,就用这个类:CserialPort 类。这是 Remon Spekreijse 写的一个串口类, 地址在:类作者 Remon Spekreijse 已作了一个基于框的同时检测 4 个串口示例的程序,在上面的和我主页的串口源码页也可以找到。我在这儿主要介绍如何将这18个类应用到 VC 中基于文档的程序中。为了加深对串口数据处理的了解,我们利用这个类解决如下问题:问题:串口 2(COM2)每隔 1 秒向串口 1(COM1)的 NEMA 格式
25、的报文:串头为$,串尾为,中间为一个后是 hh 校验,规定 hh 为<LF>。整个数据包为$x 的整数( 比如 2345,不足 4 位则前面以 0 代替代),最x 四个数的半 BYTE 校验和,最后加上回车<CR>与换行x*hh<CR><LF>。串口 1 收到上述报文后,校验正确后,将发来的数据显示在视窗中,并记下发来的正确帧数和错误帧数,若正确,还向串口 2计数显示在视窗中。测试方法:Y,串口 2 收到 Y 后将收到的 Y 的将三线制串口线联接上同一台计算机的两个串口,编好程序后就可测试。如果没有两个串口的微机,改改程序。好了,你可以先源程序:
26、 scporttest.zip(大小:49KB,VC6,WIN9X/2000,SerialPort.h SerialPort.cpp 是两个类文件)编程步骤: 1. 建立程序:建立一个基于单文档的 MFC 应用程序 SCPortTest,所有步骤保持缺省状态。 2. 添加类文件:将 SerialPort.h SerialPort.cpp 两个类文件到工程文件夹中,用 Project-Add toProject-Files 命令将上述两个文件加入工程。并在 SCPortTestView.h 中将头文件SerialPort.h 说明:#include "SerialPort.h"
27、;。 3. 人工增加串口消息响应函数:OnCommunication(WPARAM ch, LPARAM port)首先在 SCPortTestView.h 中添加串口字符接收消息 WM_COMM_RXCHAR(串口接收缓冲区内有一个字符)的响应函数/AFX_MSG(CSCPortTestView):afx_msg LONG OnCommunication(WPARAM ch, LPARAM port);/AFX_MSG然后在 SCPortTestView.cpp 文件中进行 WM_COMM_RXCHAR 消息BEGIN_MESSAGE_MAP(CSCPortTestView, CView)/
28、AFX_MSG_MAP(CSCPortTestView) ON_MESSAGE(WM_COMM_RXCHAR, OnCommunication)/AFX_MSG_MAP END_MESSAGE_MAP()接着在 SCPortTestView.cpp 中加入函数的实现:LONG CSCPortTestView:OnCommunication(WPARAM ch, LPARAM port) . :19注意:由于这个串口类加入工程后,没有自动的消息要手工添加。机制,因此上述步骤均需 4 初始化串口在视创建时初始化串口,首先利用 ClassWizardr 按下图生成 OnInitialUpdate()
29、函数。接着在 SerialPort.h 文件中说明我们在程序中要用到的全局变量: 保存两个串口接收数据:char m_chChecksum; /用于 COM1 的校验和计算CString m_strRXhhCOM1; /用于存放 COM1 接收的半 BYTE 校验字节 hh CString m_strRXDataCOM1; /COM1 接收数据CString m_strRXDataCOM2; /COM2 接收数据UINT m_nRXErrorCOM1; /COM1 接收数据错误帧数UINT m_nRXErrorCOM2; /COM2 接收数据错误帧数UINT m_nRXCounterCOM1;
30、 /COM1 接收数据错误帧数UINT m_nRXCounterCOM2; /COM2 接收数据错误帧数 CString再在 SerialPort.h 文件中说明串口类对象:CSerailPort m_ComPort2;因为要初始化 2 个串口,所以这里用了数组。下面是初始化串口 1 和串口 2:void CSCPortTestView:OnInitialUpdate()CView:OnInitialUpdate();/ TODO: Add your specialized code here and/or call the base class m_chChecksum=0; /校验和置 0
31、m_nRXErrorCOM1=0; /COM1 接收数据错误帧数置 0m_nRXErrorCOM2=0; /COM2 接收数据错误帧数置 0 m_nRXCounterCOM1=0; /COM1 接收数据错误帧数置 0 m_nRXCounterCOM2=0; /COM2 接收数据错误帧数置 0(public)。m_strRXhhCOM1.Empty(); /清空半 BYTE 校验 hh for(int i=0;i<2;i+)变量if (m_ComPorti.InitPort(this,i+1,9600,'N',8,1,EV_RXFLAG | EV_RXCHAR,512)/p
32、ortnr=1(2),baud=960,parity='N',databits=8,stopsbits=1,/dwCommEvents=EV_RXCHAR|EV_RXFLAG,nBufferSize=512m_ComPorti.StartMonitoring(); /启动串口监视线程if(i=1) SetTimer(1,1000,NULL); /设置定时器,1 秒后elseCString str;数据20str.Format("COM%d 没有发现,或被其它设备占用",i+1); AfxMessageBox(str); 5 利用ClassWizard 按下图
33、生成CSCPortTestView 的时间消息WM_TIMER 响应函数:void CSCPortTestView:OnTimer(UINT nIDEvent)/ TODO: Add your message handler code here and/or call default int randdata=rand()%9000; /产生 9000 以内的随机数CString strSendData; strSendData.Format("%04d",randdata);SendString(strSendData, 2); /串口 2 CView:OnTimer(n
34、IDEvent);数据;上面用到的 SendString()需按如下方式生成:在 ClassView 中单击鼠标右键,在环境菜单中选择 AddS Member Function:void CSCPortTestView:SendString(CString &str, int Port)char checksum=0,cr=CR,lf=LF; char c1,c2;for(int i=0;i<str.GetLength();i+) checksum = checksumstri;c2=checksum & 0x0f; c1=(checksum >> 4) &a
35、mp; 0x0f); if (c1 < 10) c1+= '0' else c1 += 'A' - 10;if (c2 < 10) c2+= '0' else c2 += 'A' - 10;CString str1; str1='$'+str+"*"+c1+c2+cr+lf;m_ComPortPort-1.WriteToPort(LPCTSTR)str1);请注意上面函数中是如何生成接收的校验检测方式要一致。的,要切记的是的生成方式和对方 6 在 OnCommunication(WP
36、ARAM ch, LPARAM port)函数中进行数据处理说明:WPARAM、 LPARAM 类型是多态数据类型(polymorphic data type),在 WIN32 中为 32 位,支持多种数据类型,根据需要自动适应,这样程序有很强的适应性。在此我们可以分别理解为 char 和 integer 类型数据。21每当串口接收缓冲区内有一个字符时,就会产生一个 WM_COMM_RXCHAR 消息,触发 OnCommunication 函数,这时我们就可以在函数中进行数据处理,所以这个消息就是整个程序的"发"。下面是根据本文最初提出的问题写出的处理函数:LONG CSC
37、PortTestView:OnCommunication(WPARAM ch, LPARAM port)static int count1=0,count2=0,count3=0; static char c1,c2;static int flag; CString strCheck=""if(port=2) /COM2 接收到数据CString strtemp=(char)ch; if(strtemp="Y")m_nRXCounterCOM2+; CString strtemp;strtemp.Format("COM2: NO.%06d&qu
38、ot;, m_nRXCounterCOM2);CDC* pDC=GetDC(); /准备数据显示pDC->TextOut(10,50,strtemp);/显示接收到的数据ReleaseDC(pDC);if(port=1) /COM1 接收到数据m_strRXDataCOM1 += (char)ch; switch(ch)case '$':m_chChecksum=0; /开始计算 CheckSum flag=0;break; case '*':flag=2;c2=m_chChecksum & 0x0f; c1=(m_chChecksum >&
39、gt; 4) & 0x0f); if (c1 < 10) c1+= '0' else c1 += 'A' - 10;if (c2 < 10) c2+= '0' else c2 += 'A' - 10;break; case CR:break; case LF:m_strRXDataCOM1.Empty();22break; default:if(flag>0)m_strRXhhCOM1 += ch; /得到收到的校验值 hh if(flag=1)strCheck = strCheck+c1+c2; /计算
40、得到的校验值 hh if(strCheck!=m_strRXhhCOM1) /如果校验有错m_strRXDataCOM1.Empty(); m_nRXErrorCOM1+; /串口 1 错误帧数加 1elsem_nRXCounterCOM1+;if(m_strRXDataCOM1.Left(1)="$") /接收数据的第一个字符是$吗?char tbuf6;char *temp=(char*)(LPCTSTR)m_strRXDataCOM1); tbuf0=temp1; tbuf1=temp2;tbuf2=temp3; tbuf3=temp4; tbuf4=0; /0 表示
41、字符串的结束,必要int data=atoi(tbuf);CString strDisplay1,strDisplay2;strDisplay1.Format("NO.%06d:Thereseiveddatais %04d",m_nRXCounterCOM1,data);strDisplay2.Format("Error Counter=%04d.",m_nRXErrorCOM1); CDC* pDC=GetDC(); /准备数据显示/int nColor=pDC->SetTextColor(RGB(255,255,0); pDC->Text
42、Out(10,10,strDisplay1);/显示接收到的数据pDC->TextOut(30,30,strDisplay2);/显示错误帧数/pDC->SetTextColor(nColor); ReleaseDC(pDC);CString str1="Y"m_ComPort0.WriteToPort(LPCTSTR)str1);/m_strRXhhCOM1.Empty();flag-;elsem_chChecksum = ch;应答信号 Y2324break;return 0;九、 Android 客户端模块首先是还是界面设计分别是 IP 输入、Port 输
43、入、连接按钮、接受信息文本框、输入框、界面设计好之后,为对应控件添加相应功能。按钮。以下是几个相应的函数12345678910111213141516171819202122/* 初始化*/voidinit()/绑定控件对象_sendBtn = (Button)findViewById(R.id.sendBtn);_connectBtn = (Button)findViewById(R.id.connectBtn);_ipText = (EditText)findViewById(R.id.ip_editText);_porText = (EditText) findViewById(R.id
44、.port_editText);_rxTextView = (TextView) findViewById(R.id.rx_textView);_txText = (EditText) findViewById(R.id.tx_EditText);_textScrollView = (ScrollView) findViewById(R.id.scrollView/将按钮添加进_sendBtn.setOnClickListener(this);_connectBtn.setOnClickListener(this);/* 文本框显示*/public void printf(String str
45、)2523242526272829303132rxTextString += str + "n"runOnUiThread(new Runnable()public void run()/ TODO Auto-generated method stub_rxTextView.setText(rxTextString);_textScrollView.scrollTo(0,33_textScrollView.getHeight();/滚动至最后一行343536);这里要注意,在主线线程之外的线程中直接更新页面显示常会报错。抛出异 常: android.view.ViewRoo
46、t$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.解决方法如上文代码中,使用 android 控件自带的 runOnUiThread 方法,将更新事件传入主线程排队处理即可。按钮部分的代码,程序会之前加入 click器的控件对象:123456789Overridepublic void onClick(View v) / TODO Auto-generated method stub switch (v.getId() case
47、R.id.connectBtn: if(_connectBtn.getText().equals("Connect")printf("正在连接."); connect();/建立连接rxListenerThread = new10TCPListenerThread(inputStream,this);/建立线程11121314151617181920rxListenerThread.start();else/断开连接onDestroy();break;case R.id.sendBtn:sendMessage(_txText.getText().toSt
48、ring();/消息262721break;2223 default:24 break;25网络连接的部分参考之前的这篇 Android Socket TCP 客户端简单实例这里要注意一下断开连接时的关闭顺序问题,如果在调用 socket.close()方法后, 还继续对socket.outputStream 或 inputStream 进行读写,则会抛出socket closed 异常。所以在关闭 socket 前一定要先关闭客户端的消息线程,停止对 socket 相关流的读写。具体参见源码。整个程序已经Android 4.0 以后的版本进行了兼容,4.0 版本以后不可在主线程中进行网络连接
49、,因此由原有的在主线程中调用 socket 连接,改成了在子线程中调用,关于线程间的通信问题参见 Android 主线程、子线程间的通信问题本 Demo 基本按照之前的两篇博客的知识要点进行了一个简单的举一反三及整合,这里就不再对整个流程说明了,大家具体参考源码。最后发一个程序在 Android上的截图:十、模块28模块的原理基本同上,此处不在赘述。Mp3 音乐背景:器尽管市场上的 mp3 种类多种多样,功能丰富,外观设计也越来越人性化,但是现在 mp3 大本分都将器和器,这种做法使 mp3 的便捷性得到了很大提高,但是也带来了一些问题,比如空间无法扩展,也无法应用于其他方面,本系统将器与器分
50、离,使其更便于其他测试,还可在本系统基础上增加测量频率和电压电流的功能。MP3器基本框架图:1、U 盘模块主要ch375( 1) 功能简介CH375 是一种 USB 总线的通用接口, 可以方便地挂接到单片机的总线上 。 同时 , CH375 的 USB 主机方式支持常用的 USB 全速设备 , 外部单片机可以通过 CH375 按照相应29VS1003 音频模块Device 89C58RD+ 单片机CH375 U 盘模块HostU 盘30的 USB 协议与 USB 设备通讯 。 而且 , 单片机可以直接调用子程序库读写 U 盘中的文件数据 , 硬件上只需在原单片机系统中增加一个 CH375, 综
51、本较低。( 2) 性能CH375支 持 全 速 的 USB HOST 主 机 接 口 , 兼 容 USB V2.0 , 元器件只需要晶体和电容 ; 支持动态切换主机与设备方式 ; 支持常用的 12 Mb/ s 全速 U S B 设备 ; 支持 U S B 设备的 传输 、 批量传输、 中断传输 ; 可自动检测 U S B 设备的连接与断开 ; 提供设备连接和断开的 通知 。 其并行接口包含 8 位数据总线 , 4 线 : 读选通、写选通、片选输入、中断输出 。 支持 5V 电源电压和 3.3 V 电源电压 , CH375 还支持低功耗模式 。内置了电源上电复位电路 , 一般情况下 , 不需要外
52、部提供复位。其正常工作时需要外部为其提供 12 MHz 的时钟信号 。CH375 提供了 U 盘文件级子程序库 , 单片机可以直接调用子程序读写 U 盘的文件数据 。CH375 的 U 盘文件级子程序库支持常用的 FAT12 , FAT16 和 FAT32 文件系统 ,支持 U 盘最大容量 100 GB 。单片机不需要考虑文件系统 ,只要了解文件名 、 文件长度等基础知识。一个 U 盘中可以有多个文件 , 每个文件都是一组数据的集合 , 以文件名区分和识别 。子程序库对 U 盘文件的读写方式分为 2 种 : 扇区模式和字节模式 。在扇区模式下 , 以扇区 ( 每个扇区通常是 512 B) 为基
53、本对 U 盘进行读写操作 ,所以读写操作比较快 , 但是在通常情况下需要额外的文件数据缓冲区 , 额外的文件数据缓冲区必须是扇区长度 512 的整数倍 , 所以适用于 RA M 多 、 数据量大 、 频繁读写数据的单片机系统。在字节模式下 ,以字节为基本单位对 U 盘文件进行读写 ,读写速度较慢 , 但是不需要额外的文件数据缓冲区 , 使用方便 , 对大多单片机系统都比较适用 。 每次新建或者打开一个文件后 , 默认为扇区模式 , 支持以扇区为基本的读写操作 。 当执行一次以字节为基本的操作命令后将自动进入字节模式 。常用的子程序有 : CH375Init , 初始化 CH375, 可以用 C
54、 H375Liblnit 代替 。C H375DiskConnect ,U 盘是否连接 ,建议不要频繁。C H375Disk Ready ,U 盘是否 准 备 就 绪 , 通 常 只 有 在 就 绪 后 才 能 正 常 读 写。CH375FileOpen , 打开 指 定 名 称 的 文 件 或 者 目 录。CH375FileCreat e ,新建文件并打开 , 如果文件已经存在则先删 除 后 再 新 建 。CH375FileClose , 关 闭 当 前 文 件。CH375FileLocate , 以 扇 区 为移 动 当 前 文 件 指 针。CH375FileReadX ,以扇区为从当前文 件数 据。CH375Fil e Write X ,以扇区为向当前文件写入数据。C H375ByteLoca
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公共政策的舆论监督机制试题及答案
- 社会保障政策中的公平问题探讨试题及答案
- 公共政策的伦理与道德思考试题及答案
- 网络设计中的用户体验考虑与试题及答案
- 增强网络安全防御技术与试题及答案
- 西方国家反对派与公民参与的关系试题及答案
- 天然气水合物开采技术设备研发效率提升预研报告
- 西方政治制度与全球经济合作试题及答案
- 软件测试的职业技能要求试题及答案
- 西方国家对经济政策的社会接受度试题及答案
- 劳务实名制及农民工工资支付管理考核试题及答案
- 控制计划CP模板
- 安徽省亳州市各县区乡镇行政村村庄村名明细及行政区划代码
- 起重设备(塔吊)安全专项检查表
- 金融市场学课件(完整版)
- 预应力钢筋计算表格(自动版)
- 初始污染菌检测原始记录
- 安全标准化现场评审所需资料清单(共14页)
- 罪犯教育-身份意识和改造心态教育
- 胃肠减压技术操作流程.
- 工序能耗计算方法及等级指标
评论
0/150
提交评论