嵌入式讲稿(第7课)_第1页
嵌入式讲稿(第7课)_第2页
嵌入式讲稿(第7课)_第3页
嵌入式讲稿(第7课)_第4页
嵌入式讲稿(第7课)_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第7课讲稿(Bluetooth组网实验)一、 第6课遗留问题二、 RFID串口协议实验1. 实验目的2. 实验设备3. 实验内容4. 实验原理5. 实验步骤6. 思考题赵龑骧一、 第6课遗留问题【问题描述】第6课的代码存在一个Bug:充值或者支付时,卡内余额不会同步改变。【原因】串口协议的数据格式有问题,正确的数据格式如下:充值:EE CC FE NO 01 ID0 ID1 ID2 ID3 XX XX XX XX FF支付:EE CC FE NO 02 ID0 ID1 ID2 ID3 XX XX XX XX FF注:NO默认为0x01,一帧数据定长14个字节【解决方案】需修改部分代码:1. 变

2、量定义public static byte cmdrecharge = new byte14; /充值,一帧数据14个字节public static byte cmdpay = new byte14; /支付,一帧数据14个字节2. ButtonClickListener类:充值按键监听(v=add_bt)时addbuf3 = (byte) (rechargemoney >> 24) & (0x00); / 充值金额转换成二进制addbuf2 = (byte) (rechargemoney >> 16) & (0xff00);addbuf1 = (byt

3、e) (rechargemoney >> 8) & (0xffff00);addbuf0 = (byte) (rechargemoney >> 0) & (0xffffff00);cmdrecharge0 = (byte)0xEE;cmdrecharge1 = (byte)0xCC;cmdrecharge2 = (byte)0xFE;cmdrecharge3 = (byte)0x01;cmdrecharge4 = (byte) 0x01; /充值cmdrecharge5 = cardinfo1;cmdrecharge6 = cardinfo2;cmdre

4、charge7 = cardinfo3;cmdrecharge8 = cardinfo4;cmdrecharge9 = addbuf3;cmdrecharge10 = addbuf2;cmdrecharge11 = addbuf1;cmdrecharge12 = addbuf0;cmdrecharge13 = (byte) 0xFF;3. ButtonClickListener类:充值按键监听(v=pay_bt)时paybuf3 = (byte) (paymoney >> 24) & (0x00);paybuf2 = (byte) (paymoney >> 16

5、) & (0xff00);paybuf1 = (byte) (paymoney >> 8) & (0xffff00);paybuf0 = (byte) (paymoney >> 0) & (0xffffff00);cmdpay0 = (byte)0xEE;cmdpay1 = (byte)0xCC;cmdpay2 = (byte)0xFE;cmdpay3 = (byte)0x01;cmdpay4 = (byte) 0x02; /支付cmdpay5 = cardinfo1;cmdpay6 = cardinfo2;cmdpay7 = cardinfo3

6、;cmdpay8 = cardinfo4;cmdpay9 = paybuf3;cmdpay10 = paybuf2;cmdpay11 = paybuf1;cmdpay12 = paybuf0;cmdpay13 = (byte) 0xff;二、 RFID串口协议实验实验八. Bluetooth组网实验1. 实验目的¨ 学习Bluetooth无线传感网技术¨ 掌握移动互联平台底板模块间的串口配置方法¨ 掌握CBT-SuperIOT实验平台上传感器与处理器通过串口通信的协议¨ 掌握Android串口通信中间件的使用方法¨ 掌握Handler的使用机制

7、,实现子线程与UI线程的通信2. 实验设备¨ 硬件:全功能物联网实验平台,PC机¨ 软件:Eclipse集成开发环境3. 实验内容¨ 分析蓝牙通信协议¨ 设计布局应用程序界面¨ 分析串口数据通信流程,编写应用程序代码¨ 编译并测试运行,查看演示效果4. 实验原理4.1 蓝牙通信协议协议格式及说明见光盘doc目录下的CBT 模块通讯协议V2.5.pdf文档中的蓝牙通信协议部分。一帧数据占46个字节。4.2 蓝牙4.0通信原理简介蓝牙4.0是2012年最新蓝牙版本,是3.0的升级版本;较3.0版本更省电、成本低、3毫秒低延迟、超长有效连接

8、距离、AES-128加密等;通常用在蓝牙耳机、蓝牙音箱等设备上。本实验中所使用的是两个蓝牙4.0模块,一个为主设备,另一个为从设备。通信流程为:Ø 从设备上的传感器信息实时上报给蓝牙从设备。Ø 主设备上电后会自动上报包含其网络地址的一帧数据。Ø 主设备需收到一帧包含“搜索”命令格式的数据包后才可以扫描周围工作中的蓝牙从设备。Ø 当扫描到蓝牙从设备后会将该从设备的网络地址封装到主设备的一帧数据包中发送出去。Ø 当主设备收到一帧包含“连接”命令及要连接的从设备地址的数据包后,从设备会实时上报包含传感器信息的数据帧。Ø 若从设备传感器可控,

9、向主设备发送一帧包含“控制”命令的数据帧即可控制相应传感器。Ø 当主设备收到一帧包含“断开”命令及要断开的从设备地址的数据包后,会停止上报从设备数据。5. 实验步骤¨ 蓝牙4.0模块串口配置¨ 在Eclipse下新建一项目工程BluetoothDemo¨ 设计界面布局文件activity_main.xml¨ 编写主程序¨ 调试并编译运行5.1 蓝牙4.0模块串口配置给实验箱上的BlueTooth主机模块上电,并将拨码开关拨到3上。5.2 在Eclipse下新建一项目工程BluetoothDemo所用到的图片资源项目的框架如图1所示:这

10、个包为中间层提供的API接口类,供上层调用。包名必须为com.cbtService.AndroidSDK (与中间层相对应),否则相应的方法如read()会无法调用。工具类读线程主界面数据处理类图1 程序框架5.3 设计界面布局文件activity_main.xml¨ 布局效果如图2所示:图2 程序布局界面¨ 布局框架如图3所示。整体采用的是相对布局RelativeLayout。图3 布局框架¨ 源代码可参考源码包中BluetoothDemoreslayoutactivity_main.xml文件。5.4 编写主程序代码l 首先新建一中间层提供的串口API接口类。

11、这里的Package必须填“com.cbtService.AndroidSDK”,Name必须填“HardwareControler”,其它默认(Package与Name已经和接口函数库匹配了,所以要一致)。在HardwareControler.java中添加如下代码:package com.cbtService.AndroidSDK;public class HardwareControler static System.loadLibrary("serialtest_runtime"); public static native boolean _init();/* S

12、erial Port */static public native int openSerialPort( String devName, long baud, int dataBits, int stopBits );/* 通用接口 */static public native int write(int fd, byte data);static public native int read(int fd, byte buf, int len);static public native int select(int fd,int sec,int usec); static public n

13、ative int close(int fd); 之后就可以通过提供的以上接口函数进行相应的功能代码编写了。l 初始化串口和组件元素在MainActivity主界面的onCreate方法中添加如下代码:super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);HardwareControler._init();serial_fd = HardwareControler.openSerialPort("/dev/s3c2410_serial3",9600, 8, 1); /串口初始化in

14、it(); /初始化组件元素的方法 mThread = new BluetoothThread(); /开启一个线程循环从串口读数据BluetoothThread.setHandler(mHandler);/并调用Handler在界面中更新数据状态 l 注:蓝牙串口波特率为:9600l BluetoothThread获取数据线程关键代码分析:(蓝牙串口通信协议见CBT 模块通讯协议V2.5.pdf)Overridepublic void run() / TODO Auto-generated method stubwhile (isReading) ret = HardwareControle

15、r.select(mSerialfd, 4, 5);if (ret = 1) HardwareControler.read(mSerialfd, checkbuf, 1);if (checkbuf0 & 0xFF) = 0xEE) HardwareControler.read(mSerialfd, checkbuf, 1);if (checkbuf0 & 0xFF) = 0xCC) HardwareControler.read(mSerialfd, buf1, 44);if (buf10 & 0xFF) = 0x04&& (buf143 & 0x

16、FF) = 0xFF) / Bluetoothdata = new byte46;data0 = (byte) 0xEE;data1 = (byte) 0xCC;for (int i = 0; i < buf1.length; i+) datai + 2 = buf1i;mData = new NodeDesp();mData = NodeDespProcess.getNodeMessage(data);Message msg = Message.obtain();if (data29 = 0) /判断主从节点System.out.println("节点类型:主节点Blueto

17、oth");switch (data31 & 0xFF) case 0: / 自动上报Bundle b = new Bundle();byte nodeData;String majoraddr = ""majoraddr = mData.getIeeeBlueAddr();nodeData = mData.getBytesData();b.putString("majorAddr", majoraddr);b.putByteArray("nodeData", nodeData);msg.what = Constan

18、ts.WHAT_BLUETOOTH_ADDR;msg.setData(b);if (mHandler != null) mHandler.sendMessage(msg);break;case 1: / 扫描从节点System.out.println("扫描到从节点");list_Bluetooth = NodeDespProcess.getSpNodeMessage(data,list_Bluetooth);splistItem = NodeDespProcess.getSpList(data,splistItem);if (NodeDespProcess.isBList

19、Changed| NodeDespProcess.isSpListChanged) if (mHandler != null) mHandler.sendEmptyMessage(Constants.WHAT_BLUETOOTH_SCAN_UPDATE);if (mHandler != null) mHandler.sendEmptyMessage(Constants.WHAT_BLUETOOTH_SCAN2_UPDATE);break;default:break; else if (data29 = 1) Bundle b = new Bundle();byte nodeData;Syste

20、m.out.println("节点类型:从节点连接后时时上报Bluetooth"+ mData.getSensorType();nodeData = mData.getBytesData();b.putByteArray("endnodeData", nodeData);msg.what = Constants.WHAT_BLUETOOTH_ENDDEVICE_UPDATE;msg.setData(b);if (mHandler != null) mHandler.sendMessage(msg); else if (ret = 0) Log.i(&qu

21、ot;Java Handler", "timeout");System.out.println("读取数据超时"); else if (ret = -1) / isReading = false;System.out.println("串口连接出错"); else System.out.println("接收到串口数据出错");Log.i("Java Handler", "read error");l Android通过Handler Message更新界面UI:O

22、verridepublic void handleMessage(Message msg) / TODO Auto-generated method stubsuper.handleMessage(msg);Bundle b = msg.getData();switch (msg.what) case Constants.WHAT_BLUETOOTH_ADDR:/扫描主设备?nodeData = b.getByteArray("nodeData");/什么意思?if (nodeData != null) scanData = getSendData(nodeData, 1)

23、;/将蓝牙一帧数据的第32位设置为1,表示搜索addrFlag = true;majorAddr.setText(b.getString("majorAddr");/?System.out.println("Bluetooth-:"+ b.getString("majorAddr");bluetooth_scan.setEnabled(true);break;case Constants.WHAT_BLUETOOTH_SCAN_UPDATE:case Constants.WHAT_BLUETOOTH_SCAN2_UPDATE:/扫描从设备System.out.println("扫描到从设备,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论