[C#] 编程控制笔记本蓝牙与外部蓝牙设备通信-阿里云开发者社区

开发者社区> 安全> 正文
登录阅读全文

[C#] 编程控制笔记本蓝牙与外部蓝牙设备通信

简介:


 

一、蓝牙模块XLBT232‐D01介绍外部设备蓝牙

1.1、蓝牙模块简介

XLBT232-D0101蓝牙模块采用CSR BlueCore 芯片配置6-8Mbit 的软件存储空间 
支持AT 指令用户可根据需要更改SPP 角色主、从模式以及串口波特率、 
设备名称、配对密码等参数使用灵活。

 

1.2、模块功能介绍

1.2.1、特性

  •  蓝牙协议Bluetooth Specification V2.1+EDR、V2.0+EDR、V2.1、V2.0 V1.2
  • 工作频率2.4GHz ISM band
  • 调制方式GFSK(Gaussian Frequency Shift Keying)
  • 发射 率≤4dBm, Class 2
  • 灵 敏 度≤-84dBm at 0.1% BER
  • 传输速率Asynchronous: 2.1Mbps(Max) / 160 kbpsSynchronous: 1Mbps/1Mbps
  • 安全特性Authentication and encryption
  • 支持服务Bluetooth SPP(主模式& 从模式)
  • 供电电源+3.3VDC 50mA
  • 工作温度-5 ~ +65 Centigrade
  • 外观尺寸26.9mm x 13mm x 2.2 mm

1.2.2、模块接线原理图

PS:当然也能用USB转TTL模块进行连接在电脑上调试毕竟大多数笔记本已经没有串口啦

 

1.3、使用说明

[图蓝牙模块]

>_<" KEY为输入管脚短按控制或者输入约100ms 的高电平单次脉冲可以 
实现以下功能

  • 模块设置为SPP 主机模式时

    未连接状态时清除配对信息(若存在配对设备信息)

    已连接状态时主动发起断开连接延时150ms 后重启重新搜索 
连接从设备 在断开连接时重新搜索连接从设备。

  • 模块设置为SPP 从机时

    在已连接状态时主动发起断开连接延时150ms 后重启重新进入被搜 
     索状态等待主机配对和连接

    在断开连接时延时150ms 后重启重新进入被搜索状态等待主机配对 
     和连接。

>_<" 显示模块当前工作状态

  • 待机状态慢闪——重复2s 脉冲
  • 连接状态长亮——高电平。

 

1.4、AT指令集

蓝牙模块出厂默认的串口配置为波特率9600无校验数据位8停止位1。
PS:接下来说明以上位机为电脑模块参数为出厂设置时进行配置说明。
>_<" 将模块通过USB电平转换板连接到电脑USB口(USB转TTL)使用串口调试助手按 
照 9600,N,8,1 进行配置打开串口后发送 AT(无\r\n)若返回 OK说明配置 
成功。 
PS:设置 AT 指令必须在蓝牙模块未连接或断开 SPP 链接时才可以上电或配对 
后都可以如果连接 SPP串口输入的数据将会直接发送到远端蓝牙设备串口

1.4.1、测试指令

1.4.2、查询\设置波特率指令:

1.4.3、查询\设置设备名称指令:

1.4.4、恢复默认设置指令:

1.4.5、模块复位\重启指令:

1.4.6、查询\设置主从模式:

1.4.7、查询\设置配对密码:

1.4.8、查询\设置是否需要密码鉴权:

PS:为方便使用默认为不用密码鉴权连接搜索到蓝牙串口之后直接连接 
可。有安全考虑的客户请选择需要密码鉴权。 
PS:此指令只有在从设备时才有效主设备时不接受此指令发送此指令没 
有回复也不执行

1.4.9、清除主设备配对信息指令:

PS此指令只有在主设备时才有效从设备时不接受此指令发送此指令 
没有回复也不执行。

1.4.10、搜索并连接新的蓝牙串口从设备(*)指令

PS:此指令只有在主设备时才有效从设备时不接受此指令发送此指令没 
有回复也不执行。

1.4.11、连接最后一次连接的蓝牙串口从设备(*)指令

PS:此指令只有在主设备时才有效从设备时不接受此指令发送此指令没 
有回复也不执行。

1.4.12、连接指定蓝牙地址的从设备(*)指令

PS:此指令只有在主设备时才有效从设备时不接受此指令发送此指令没 
有回复也不执行。

1.4.13、查询、设置软件版本指令

1.4.14、系统帮助指令

1.4.15、查询本机MAC 地址指令

>_<: 1所有参数设置后存储在模块内下次启动时无需再次设置
         2AT 指令后标注*号的表示目前未应用的AT 指令

 

 

二、蓝牙模块配置与笔记本电脑相连

2.1.1、蓝牙初始化配置

将蓝牙模块通过TTL转USB模块连接到笔记本打开串口助手通过上述AT指令设置为从设备波特率为9600然后重启

[图USB转TTL模块]

[图串口助手]

2.1.2、电脑为主设备搜索建立连接

点击笔记本蓝牙标志的小图标添加蓝牙设备

然后要等一会笔记本正在装驱动

然后右击蓝牙图标查看蓝牙设备可见我们的设备已经被电脑发现并添加

查看该设备属性此时笔记本为该设备提供一个串口就是笔记本蓝牙和设备蓝牙通信的通道要记住这个一会编程的时候会用到

PS:这个COM15也可以在设备管理器中修改为其他通道

 

 

三、C#编程使笔记本蓝牙和外部设备蓝牙通信

其实配对以后蓝牙就被模拟成了一个端口我们可以用最简单的端口通讯来收发信息。首先在每次启动时需要连接端口

[FORM初始化时获取所有的COM口并加入下拉列表]

复制代码
 1 public Form1()
 2 {
 3     InitializeComponent();
 4 
 5     //Get all port list for selection
 6     //获得所有的端口列表并显示在列表内
 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 }
复制代码

[连接按钮事件选中list中的被选中的COM口进行连接,如果连接成功就在状态栏显示蓝牙连接成功]

复制代码
 1 private void ConnectButton_Click(object sender, EventArgs e)
 2 {
 3     if (!BluetoothConnection.IsOpen)
 4     {
 5         //Start
 6         Status = "正在连接蓝牙设备";
 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 = "蓝牙连接成功";
14     }
15 }
复制代码

[蓝牙接收数据事件响应函数在按钮连接事件中声明的该事件用于响应蓝牙数据接收]

复制代码
 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 += "收到字节数" + 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 message
16     if (length == 3 && data[0] == 255 && data[1] == 255 && data[2] == 255)
17     {
18         //Stop
19         Status = "正在断开蓝牙设备";
20         BluetoothConnection.Close();
21         BluetoothConnection.Dispose();
22         BluetoothConnection = null;
23         ConnectButton.Enabled = true;
24         Status = "蓝牙断开成功";
25     }
26 }
复制代码
  • 这里第4行让程序休息1是因为延时等待从设备把数据发送完全。
  • 这里为了方便我严格控制让发送数据为13Byte。
  • 从设备发送的13Byte数据送至缓冲区PC端C#程序通过read()函数将缓冲区数据接收到data中下面是格式输出一下数据。

[发送数据函数]

复制代码
 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 = "发送数据字节数" + length;
14 }
复制代码
  • 本来是将data[]数据发送出去因为我从设备设置为只要有数据发送过来就做出响应发送13Byte数据所以就直接将data的第一byte发送出去了。

[定时器函数用于刷新状态栏和接收数据显示]

1 private void MonitorTimer_Tick(object sender, EventArgs e)
2 {
3     StatusMessage.Text = Status;
4     BlueToothMessage.Text = BlueToothReceivedData;
5 }

[发送数据按钮:将SendMessage中的数据获得发送出去]

复制代码
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单片机通过蓝牙连接展示

4.1.1、51单片机部分程序

一定要用11.0952Mhz的晶振我用12Mhz结果出现帧丢失其实这里采用的是52单片机在此处区别不是很大~

将蓝牙模块的RXD连接单片机的RXD(P3.0),TXD连接单片机的TXD(P3.1)然后就像以前操作串口一样操作就行啦~

 I2C.c
 main.c

因为我还在P1.0和P1.1连接一个陀螺仪MPU6050所以上面的代码有点烦其实可以参考一下我以前发的51单片机串口通信~

http://www.cnblogs.com/zjutlitao/p/3788696.htm

l 

4.1.2、没有51单片机的情况

可以将蓝牙模块连接在USB转TTL上用串口助手和你写的C#程序相互通信。

4.1.3、运行C#程序进行连接通信

[选择刚才的那个蓝牙端口点击连接]

[第一次蓝牙图标会给出一个验证提示在验证框内输入AT指令配置时的你设置的验证码]

[然后就可以通信啦如下]

 

PS:相关代码及资料

C#蓝牙工程代码http://pan.baidu.com/s/1hqHwG4W

51蓝牙工程代码http://pan.baidu.com/s/1dDqywVZ

蓝牙模块说明书http://pan.baidu.com/s/1kT61nx1

C#蓝牙相关博客链接http://www.diy-robots.com/?p=410%20%E8%93%9D%E7%89%99

 





本文转自beautifulzzzz博客园博客原文链接http://www.cnblogs.com/zjutlitao/p/3886826.html如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: