嵌入式講稿(第7課)_第1頁(yè)
嵌入式講稿(第7課)_第2頁(yè)
嵌入式講稿(第7課)_第3頁(yè)
嵌入式講稿(第7課)_第4頁(yè)
嵌入式講稿(第7課)_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第7課講稿(Bluetooth組網(wǎng)實(shí)驗(yàn))一、 第6課遺留問(wèn)題二、 RFID串口協(xié)議實(shí)驗(yàn)1. 實(shí)驗(yàn)?zāi)康?. 實(shí)驗(yàn)設(shè)備3. 實(shí)驗(yàn)內(nèi)容4. 實(shí)驗(yàn)原理5. 實(shí)驗(yàn)步驟6. 思考題趙龑驤一、 第6課遺留問(wèn)題【問(wèn)題描述】第6課的代碼存在一個(gè)Bug:充值或者支付時(shí),卡內(nèi)余額不會(huì)同步改變?!驹颉看趨f(xié)議的數(shù)據(jù)格式有問(wèn)題,正確的數(shù)據(jù)格式如下:充值: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默認(rèn)為0x01,一幀數(shù)據(jù)定長(zhǎng)14個(gè)字節(jié)【解決方案】需修改部分代碼:1. 變

2、量定義public static byte cmdrecharge = new byte14; /充值,一幀數(shù)據(jù)14個(gè)字節(jié)public static byte cmdpay = new byte14; /支付,一幀數(shù)據(jù)14個(gè)字節(jié)2. ButtonClickListener類(lèi):充值按鍵監(jiān)聽(tīng)(v=add_bt)時(shí)addbuf3 = (byte) (rechargemoney 24) & (0x00); / 充值金額轉(zhuǎn)換成二進(jìn)制addbuf2 = (byte) (rechargemoney 16) & (0xff00);addbuf1 = (byte) (rechargemoney 8) & (0x

3、ffff00);addbuf0 = (byte) (rechargemoney 0) & (0xffffff00);cmdrecharge0 = (byte)0xEE;cmdrecharge1 = (byte)0xCC;cmdrecharge2 = (byte)0xFE;cmdrecharge3 = (byte)0x01;cmdrecharge4 = (byte) 0x01; /充值cmdrecharge5 = cardinfo1;cmdrecharge6 = cardinfo2;cmdrecharge7 = cardinfo3;cmdrecharge8 = cardinfo4;cmdrech

4、arge9 = addbuf3;cmdrecharge10 = addbuf2;cmdrecharge11 = addbuf1;cmdrecharge12 = addbuf0;cmdrecharge13 = (byte) 0xFF;3. ButtonClickListener類(lèi):充值按鍵監(jiān)聽(tīng)(v=pay_bt)時(shí)paybuf3 = (byte) (paymoney 24) & (0x00);paybuf2 = (byte) (paymoney 16) & (0xff00);paybuf1 = (byte) (paymoney 8) & (0xffff00);paybuf0 = (byte) (

5、paymoney 0) & (0xffffff00);cmdpay0 = (byte)0xEE;cmdpay1 = (byte)0xCC;cmdpay2 = (byte)0xFE;cmdpay3 = (byte)0x01;cmdpay4 = (byte) 0x02; /支付cmdpay5 = cardinfo1;cmdpay6 = cardinfo2;cmdpay7 = cardinfo3;cmdpay8 = cardinfo4;cmdpay9 = paybuf3;cmdpay10 = paybuf2;cmdpay11 = paybuf1;cmdpay12 = paybuf0;cmdpay13

6、 = (byte) 0xff;二、 RFID串口協(xié)議實(shí)驗(yàn)實(shí)驗(yàn)八. Bluetooth組網(wǎng)實(shí)驗(yàn)1. 實(shí)驗(yàn)?zāi)康?學(xué)習(xí)Bluetooth無(wú)線傳感網(wǎng)技術(shù) 掌握移動(dòng)互聯(lián)平臺(tái)底板模塊間的串口配置方法 掌握CBT-SuperIOT實(shí)驗(yàn)平臺(tái)上傳感器與處理器通過(guò)串口通信的協(xié)議 掌握Android串口通信中間件的使用方法 掌握Handler的使用機(jī)制,實(shí)現(xiàn)子線程與UI線程的通信2. 實(shí)驗(yàn)設(shè)備 硬件:全功能物聯(lián)網(wǎng)實(shí)驗(yàn)平臺(tái),PC機(jī) 軟件:Eclipse集成開(kāi)發(fā)環(huán)境3. 實(shí)驗(yàn)內(nèi)容 分析藍(lán)牙通信協(xié)議 設(shè)計(jì)布局應(yīng)用程序界面 分析串口數(shù)據(jù)通信流程,編寫(xiě)應(yīng)用程序代碼 編譯并測(cè)試運(yùn)行,查看演示效果4. 實(shí)驗(yàn)原理4.1 藍(lán)牙通信協(xié)

7、議協(xié)議格式及說(shuō)明見(jiàn)光盤(pán)doc目錄下的CBT 模塊通訊協(xié)議V2.5.pdf文檔中的藍(lán)牙通信協(xié)議部分。一幀數(shù)據(jù)占46個(gè)字節(jié)。4.2 藍(lán)牙4.0通信原理簡(jiǎn)介藍(lán)牙4.0是2012年最新藍(lán)牙版本,是3.0的升級(jí)版本;較3.0版本更省電、成本低、3毫秒低延遲、超長(zhǎng)有效連接距離、AES-128加密等;通常用在藍(lán)牙耳機(jī)、藍(lán)牙音箱等設(shè)備上。本實(shí)驗(yàn)中所使用的是兩個(gè)藍(lán)牙4.0模塊,一個(gè)為主設(shè)備,另一個(gè)為從設(shè)備。通信流程為: 從設(shè)備上的傳感器信息實(shí)時(shí)上報(bào)給藍(lán)牙從設(shè)備。 主設(shè)備上電后會(huì)自動(dòng)上報(bào)包含其網(wǎng)絡(luò)地址的一幀數(shù)據(jù)。 主設(shè)備需收到一幀包含“搜索”命令格式的數(shù)據(jù)包后才可以掃描周?chē)ぷ髦械乃{(lán)牙從設(shè)備。 當(dāng)掃描到藍(lán)牙從設(shè)備

8、后會(huì)將該從設(shè)備的網(wǎng)絡(luò)地址封裝到主設(shè)備的一幀數(shù)據(jù)包中發(fā)送出去。 當(dāng)主設(shè)備收到一幀包含“連接”命令及要連接的從設(shè)備地址的數(shù)據(jù)包后,從設(shè)備會(huì)實(shí)時(shí)上報(bào)包含傳感器信息的數(shù)據(jù)幀。 若從設(shè)備傳感器可控,向主設(shè)備發(fā)送一幀包含“控制”命令的數(shù)據(jù)幀即可控制相應(yīng)傳感器。 當(dāng)主設(shè)備收到一幀包含“斷開(kāi)”命令及要斷開(kāi)的從設(shè)備地址的數(shù)據(jù)包后,會(huì)停止上報(bào)從設(shè)備數(shù)據(jù)。5. 實(shí)驗(yàn)步驟 藍(lán)牙4.0模塊串口配置 在Eclipse下新建一項(xiàng)目工程BluetoothDemo 設(shè)計(jì)界面布局文件activity_main.xml 編寫(xiě)主程序 調(diào)試并編譯運(yùn)行5.1 藍(lán)牙4.0模塊串口配置給實(shí)驗(yàn)箱上的BlueTooth主機(jī)模塊上電,并將撥碼開(kāi)關(guān)

9、撥到3上。5.2 在Eclipse下新建一項(xiàng)目工程BluetoothDemo所用到的圖片資源項(xiàng)目的框架如圖1所示:這個(gè)包為中間層提供的API接口類(lèi),供上層調(diào)用。包名必須為com.cbtService.AndroidSDK (與中間層相對(duì)應(yīng)),否則相應(yīng)的方法如read()會(huì)無(wú)法調(diào)用。工具類(lèi)讀線程主界面數(shù)據(jù)處理類(lèi)圖1 程序框架5.3 設(shè)計(jì)界面布局文件activity_main.xml 布局效果如圖2所示:圖2 程序布局界面 布局框架如圖3所示。整體采用的是相對(duì)布局RelativeLayout。圖3 布局框架 源代碼可參考源碼包中BluetoothDemoreslayoutactivity_main

10、.xml文件。5.4 編寫(xiě)主程序代碼l 首先新建一中間層提供的串口API接口類(lèi)。這里的Package必須填“com.cbtService.AndroidSDK”,Name必須填“HardwareControler”,其它默認(rèn)(Package與Name已經(jīng)和接口函數(shù)庫(kù)匹配了,所以要一致)。在HardwareControler.java中添加如下代碼:package com.cbtService.AndroidSDK;public class HardwareControler static System.loadLibrary(serialtest_runtime); public static

11、 native boolean _init();/* Serial 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 se

12、c,int usec); static public native int close(int fd); 之后就可以通過(guò)提供的以上接口函數(shù)進(jìn)行相應(yīng)的功能代碼編寫(xiě)了。l 初始化串口和組件元素在MainActivity主界面的onCreate方法中添加如下代碼:super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);HardwareControler._init();serial_fd = HardwareControler.openSerialPort(/dev/s3c2410_serial3,9600,

13、 8, 1); /串口初始化init(); /初始化組件元素的方法 mThread = new BluetoothThread(); /開(kāi)啟一個(gè)線程循環(huán)從串口讀數(shù)據(jù)BluetoothThread.setHandler(mHandler);/并調(diào)用Handler在界面中更新數(shù)據(jù)狀態(tài) l 注:藍(lán)牙串口波特率為:9600l BluetoothThread獲取數(shù)據(jù)線程關(guān)鍵代碼分析:(藍(lán)牙串口通信協(xié)議見(jiàn)CBT 模塊通訊協(xié)議V2.5.pdf)Overridepublic void run() / TODO Auto-generated method stubwhile (isReading) ret =

14、HardwareControler.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 & 0xFF) = 0xF

15、F) / 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) /判斷主從節(jié)點(diǎn)System.out.println(節(jié)點(diǎn)類(lèi)型:主節(jié)點(diǎn)Bluetooth);switch (data31

16、& 0xFF) case 0: / 自動(dòng)上報(bào)Bundle b = new Bundle();byte nodeData;String majoraddr = ;majoraddr = mData.getIeeeBlueAddr();nodeData = mData.getBytesData();b.putString(majorAddr, majoraddr);b.putByteArray(nodeData, nodeData);msg.what = Constants.WHAT_BLUETOOTH_ADDR;msg.setData(b);if (mHandler != null) mHand

17、ler.sendMessage(msg);break;case 1: / 掃描從節(jié)點(diǎn)System.out.println(掃描到從節(jié)點(diǎn));list_Bluetooth = NodeDespProcess.getSpNodeMessage(data,list_Bluetooth);splistItem = NodeDespProcess.getSpList(data,splistItem);if (NodeDespProcess.isBListChanged| NodeDespProcess.isSpListChanged) if (mHandler != null) mHandler.send

18、EmptyMessage(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;System.out.println(節(jié)點(diǎn)類(lèi)型:從節(jié)點(diǎn)連接后時(shí)時(shí)上報(bào)Bluetooth+ mData.getSensorType();nodeData = mDat

19、a.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(Java Handler, timeout);System.out.println(讀取數(shù)據(jù)超時(shí)); else if (ret = -1) / isReading = false;System.out.pri

20、ntln(串口連接出錯(cuò)); else System.out.println(接收到串口數(shù)據(jù)出錯(cuò));Log.i(Java Handler, read error);l Android通過(guò)Handler Message更新界面UI:Overridepublic void handleMessage(Message msg) / TODO Auto-generated method stubsuper.handleMessage(msg);Bundle b = msg.getData();switch (msg.what) case Constants.WHAT_BLUETOOTH_ADDR:/掃描主設(shè)備?nodeData = b.getByteArray(nodeData);/什么意思?if (nodeData != null) scanData = getSendData(nodeData, 1);/將藍(lán)牙一幀數(shù)據(jù)的第32位設(shè)置為1,表示搜索addrFlag = true;majorAddr.setText(b.getString(majorAddr);/?System.out.println(Bluetooth-:+ b.getString(majorAddr);bluetooth_scan.setEnabled(true);break;ca

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論