一、藍(lán)牙模塊XLBT232‐D01介紹(外部設(shè)備藍(lán)牙)
1.1、藍(lán)牙模塊簡(jiǎn)介
XLBT232-D0101藍(lán)牙模塊采用CSR BlueCore 芯片,配置6-8Mbit 的軟件存儲(chǔ)空間,
支持AT 指令,用戶可根據(jù)需要更改SPP 角色(主、從模式)以及串口波特率、
設(shè)備名稱、配對(duì)密碼等參數(shù),使用靈活。
1.2、模塊功能介紹
1.2.1、特性
1.2.2、模塊接線原理圖
PS:當(dāng)然也能用USB轉(zhuǎn)TTL模塊進(jìn)行連接在電腦上調(diào)試,畢竟大多數(shù)筆記本已經(jīng)沒(méi)有串口啦!
1.3、使用說(shuō)明
[圖:藍(lán)牙模塊]>_<" KEY為輸入管腳,短按控制,或者輸入約100ms 的高電平單次脈沖,可以
實(shí)現(xiàn)以下功能:
未連接狀態(tài)時(shí):清除配對(duì)信息(若存在配對(duì)設(shè)備信息)
已連接狀態(tài)時(shí):主動(dòng)發(fā)起斷開(kāi)連接,延時(shí)150ms 后重啟,重新搜索
連接從設(shè)備; 在斷開(kāi)連接時(shí):重新搜索連接從設(shè)備。
在已連接狀態(tài)時(shí):主動(dòng)發(fā)起斷開(kāi)連接,延時(shí)150ms 后重啟,重新進(jìn)入被搜
索狀態(tài),等待主機(jī)配對(duì)和連接
在斷開(kāi)連接時(shí):延時(shí)150ms 后重啟,重新進(jìn)入被搜索狀態(tài),等待主機(jī)配對(duì)
和連接。
>_<" 顯示模塊當(dāng)前工作狀態(tài):
1.4、AT指令集
藍(lán)牙模塊出廠默認(rèn)的串口配置為:波特率9600,無(wú)校驗(yàn),數(shù)據(jù)位8,停止位1。
PS:接下來(lái)說(shuō)明以上位機(jī)為電腦,模塊參數(shù)為出廠設(shè)置時(shí)進(jìn)行配置說(shuō)明。
>_<" 將模塊通過(guò)USB電平轉(zhuǎn)換板連接到電腦USB口(USB轉(zhuǎn)TTL),使用串口調(diào)試助手,按
照 9600,N,8,1 進(jìn)行配置,打開(kāi)串口后,發(fā)送 AT(無(wú)\r\n),若返回 OK,說(shuō)明配置
成功。
PS:設(shè)置 AT 指令必須在藍(lán)牙模塊未連接或斷開(kāi) SPP 鏈接時(shí)才可以(上電或配對(duì)
后都可以,如果連接 SPP,串口輸入的數(shù)據(jù)將會(huì)直接發(fā)送到遠(yuǎn)端藍(lán)牙設(shè)備串口)
1.4.1、測(cè)試指令:
1.4.2、查詢\設(shè)置波特率指令:
1.4.3、查詢\設(shè)置設(shè)備名稱指令:
1.4.4、恢復(fù)默認(rèn)設(shè)置指令:
1.4.5、模塊復(fù)位\重啟指令:
1.4.6、查詢\設(shè)置主從模式:
1.4.7、查詢\設(shè)置配對(duì)密碼:
1.4.8、查詢\設(shè)置是否需要密碼鑒權(quán):
PS:為方便使用,默認(rèn)為不用密碼鑒權(quán)連接,搜索到藍(lán)牙串口之后,直接連接
可。有安全考慮的客戶請(qǐng)選擇需要密碼鑒權(quán)。
PS:此指令只有在從設(shè)備時(shí)才有效;主設(shè)備時(shí)不接受此指令,發(fā)送此指令沒(méi)
有回復(fù),也不執(zhí)行
1.4.9、清除主設(shè)備配對(duì)信息指令:
PS:此指令只有在主設(shè)備時(shí)才有效;從設(shè)備時(shí)不接受此指令,發(fā)送此指令
沒(méi)有回復(fù),也不執(zhí)行。
1.4.10、搜索并連接新的藍(lán)牙串口從設(shè)備(*)指令:
PS:此指令只有在主設(shè)備時(shí)才有效;從設(shè)備時(shí)不接受此指令,發(fā)送此指令沒(méi)
有回復(fù),也不執(zhí)行。
1.4.11、連接最后一次連接的藍(lán)牙串口從設(shè)備(*)指令:
PS:此指令只有在主設(shè)備時(shí)才有效;從設(shè)備時(shí)不接受此指令,發(fā)送此指令沒(méi)
有回復(fù),也不執(zhí)行。
1.4.12、連接指定藍(lán)牙地址的從設(shè)備(*)指令:
PS:此指令只有在主設(shè)備時(shí)才有效;從設(shè)備時(shí)不接受此指令,發(fā)送此指令沒(méi)
有回復(fù),也不執(zhí)行。
1.4.13、查詢、設(shè)置軟件版本指令:
1.4.14、系統(tǒng)幫助指令:
1.4.15、查詢本機(jī)MAC 地址指令:
>_<: 1:所有參數(shù)設(shè)置后存儲(chǔ)在模塊內(nèi),下次啟動(dòng)時(shí)無(wú)需再次設(shè)置
2:AT 指令后標(biāo)注*號(hào)的,表示目前未應(yīng)用的AT 指令
二、藍(lán)牙模塊配置與筆記本電腦相連
2.1.1、藍(lán)牙初始化配置:
將藍(lán)牙模塊通過(guò)TTL轉(zhuǎn)USB模塊連接到筆記本,打開(kāi)串口助手,通過(guò)上述AT指令設(shè)置為從設(shè)備,波特率為9600,然后重啟
[圖:USB轉(zhuǎn)TTL模塊][圖:串口助手]2.1.2、電腦為主設(shè)備搜索建立連接:
點(diǎn)擊筆記本藍(lán)牙標(biāo)志的小圖標(biāo),添加藍(lán)牙設(shè)備:
然后要等一會(huì),筆記本正在裝驅(qū)動(dòng):
然后右擊藍(lán)牙圖標(biāo),查看藍(lán)牙設(shè)備,可見(jiàn)我們的設(shè)備已經(jīng)被電腦發(fā)現(xiàn)并添加:
查看該設(shè)備屬性,此時(shí)筆記本為該設(shè)備提供一個(gè)串口,就是筆記本藍(lán)牙和設(shè)備藍(lán)牙通信的通道,要記住這個(gè)一會(huì)編程的時(shí)候會(huì)用到:
PS:這個(gè)COM15也可以在設(shè)備管理器中修改為其他通道
三、C#編程使筆記本藍(lán)牙和外部設(shè)備藍(lán)牙通信:
其實(shí)配對(duì)以后,藍(lán)牙就被模擬成了一個(gè)端口,我們可以用最簡(jiǎn)單的端口通訊來(lái)收發(fā)信息。首先,在每次啟動(dòng)時(shí),需要連接端口:
[FORM初始化時(shí)獲取所有的COM口,并加入下拉列表]
1 public Form1() 2 { 3 InitializeComponent(); 4 5 //Get all port list for selection 6 //獲得所有的端口列表,并顯示在列表內(nèi) 7 PortList.Items.Clear(); 8 string[] Ports = SerialPort.GetPortNames(); 9 10 for (int i = 0; i < Ports.Length; i++)11 {12 string s = Ports[i].ToUpper();13 Regex reg = new Regex("[^COM\\d]", RegexOptions.IgnoreCase | RegexOptions.Multiline);14 s = reg.Replace(s, "");15 16 PortList.Items.Add(s);17 }18 if (Ports.Length > 1) PortList.SelectedIndex = 1;19 }
[連接按鈕事件:選中l(wèi)ist中的被選中的COM口進(jìn)行連接,如果連接成功就在狀態(tài)欄顯示藍(lán)牙連接成功]
1 private void ConnectButton_Click(object sender, EventArgs e) 2 { 3 if (!BluetoothConnection.IsOpen) 4 { 5 //Start 6 Status = "正在連接藍(lán)牙設(shè)備"; 7 BluetoothConnection = new SerialPort(); 8 ConnectButton.Enabled = false; 9 BluetoothConnection.PortName = PortList.SelectedItem.ToString();10 BluetoothConnection.Open();11 BluetoothConnection.ReadTimeout = 10000;12 BluetoothConnection.DataReceived += new SerialDataReceivedEventHandler(BlueToothDataReceived);13 Status = "藍(lán)牙連接成功";14 }15 }
[藍(lán)牙接收數(shù)據(jù)事件響應(yīng)函數(shù),在按鈕連接事件中聲明的該事件,用于響應(yīng)藍(lán)牙數(shù)據(jù)接收]
1 private void BlueToothDataReceived(object o, SerialDataReceivedEventArgs e) 2 { 3 //int length = BluetoothConnection.ReadByte(); 4 Thread.Sleep(1000); 5 int length = 13; 6 BlueToothReceivedData = DateTime.Now.ToLongTimeString() + "\r\n"; 7 BlueToothReceivedData += "收到字節(jié)數(shù):" + length + "\r\n"; 8 9 byte[] data = new byte[length];10 BluetoothConnection.Read(data,0,length);11 for (int i = 0; i < length; i++)12 {13 BlueToothReceivedData += string.Format("data[{0}] = {1}\r\n", i, data[i]);14 }15 //receive close message16 if (length == 3 && data[0] == 255 && data[1] == 255 && data[2] == 255)17 {18 //Stop19 Status = "正在斷開(kāi)藍(lán)牙設(shè)備";20 BluetoothConnection.Close();21 BluetoothConnection.Dispose();22 BluetoothConnection = null;23 ConnectButton.Enabled = true;24 Status = "藍(lán)牙斷開(kāi)成功";25 }26 }
[發(fā)送數(shù)據(jù)函數(shù)]
1 private void BlueToothDataSend(byte[] data) 2 { 3 //int length = data.Length; 4 //byte[] readData = new byte[length + 2]; 5 //readData[0] = (byte)(length % 255); 6 //readData[1] = (byte)(length / 255); 7 //for (int i = 0; i < length; i++) 8 //{ 9 // readData[i + 2] = data[i];10 //}11 //BluetoothConnection.Write(readData, 0, length + 2);12 BluetoothConnection.Write(data, 0, 1);13 //Status = "發(fā)送數(shù)據(jù)字節(jié)數(shù):" + length;14 }
[定時(shí)器函數(shù):用于刷新?tīng)顟B(tài)欄,和接收數(shù)據(jù)顯示]
1 private void MonitorTimer_Tick(object sender, EventArgs e)2 {3 StatusMessage.Text = Status;4 BlueToothMessage.Text = BlueToothReceivedData;5 }
[發(fā)送數(shù)據(jù)按鈕:將SendMessage中的數(shù)據(jù)獲得發(fā)送出去]
1 private void SendButton_Click(object sender, EventArgs e)2 {3 byte n;4 byte.TryParse(SendMessage.Text, out n);5 6 BlueToothDataSend(new byte[] { n });7 }
四、PC和51單片機(jī)通過(guò)藍(lán)牙連接展示
4.1.1、51單片機(jī)部分程序
一定要用11.0952Mhz的晶振,我用12Mhz結(jié)果出現(xiàn)幀丟失!其實(shí)這里采用的是52單片機(jī),在此處區(qū)別不是很大~
將藍(lán)牙模塊的RXD連接單片機(jī)的RXD(P3.0),TXD連接單片機(jī)的TXD(P3.1),然后就像以前操作串口一樣操作就行啦~
因?yàn)槲疫€在P1.0和P1.1連接一個(gè)陀螺儀MPU6050所以上面的代碼有點(diǎn)煩,其實(shí)可以參考一下我以前發(fā)的51單片機(jī)串口通信~
http://www.cnblogs.com/zjutlitao/p/3788696.htm
4.1.2、沒(méi)有51單片機(jī)的情況
可以將藍(lán)牙模塊連接在USB轉(zhuǎn)TTL上,用串口助手和你寫的C#程序相互通信。
4.1.3、運(yùn)行C#程序進(jìn)行連接通信
[選擇剛才的那個(gè)藍(lán)牙端口點(diǎn)擊連接]
[第一次藍(lán)牙圖標(biāo)會(huì)給出一個(gè)驗(yàn)證提示:在驗(yàn)證框內(nèi)輸入AT指令配置時(shí)的你設(shè)置的驗(yàn)證碼]
[然后就可以通信啦,如下:]
PS:相關(guān)代碼及資料
C#藍(lán)牙工程代碼:http://pan.baidu.com/s/1hqHwG4W
51藍(lán)牙工程代碼:http://pan.baidu.com/s/1dDqywVZ
藍(lán)牙模塊說(shuō)明書:http://pan.baidu.com/s/1kT61nx1
C#藍(lán)牙相關(guān)博客鏈接:http://www.diy-robots.com/?p=410%20%E8%93%9D%E7%89%99
聯(lián)系客服