C#连接蓝牙设备

看过各种博主的文章,发现基本上都是属于误人子弟的狗屁文章,踩过各种坑最终实现了此功能。

1.思路

电脑蓝牙和蓝牙模块配对连接
和我们平时正常连接蓝牙设备一样,需要先搜索附近的蓝牙设备,然后根据设备名来选择要连接的蓝牙模块,连接时就根据该蓝牙模块的地址(惟一标识号)来进行连接。

2.实现

2.1使用NuGet包

在这里我发现有些文章第一步引用的包都错了,导致代码基本上都是报错状态,咱也不知道你们是怎么运行起来的。
在这里插入图片描述
直接用这个包就可以,我看有的是用InTheHand.Net,这个雷我踩过了,所以别犹豫直接用32feet.NET这个包。

2.2搜索附件蓝牙设备

//处理蓝牙的对象
            BluetoothClient client = new BluetoothClient();
            //获取电脑蓝牙
            BluetoothRadio radio = BluetoothRadio.PrimaryRadio;
            //设置电脑蓝牙可被搜索到
            radio.Mode = RadioMode.Connectable;     
            //需要连接的蓝牙模块的唯一标识符
            //这里需要注意一下,虽然下面foreach里能根据蓝牙名称找到唯一标识符,但是我们这里也要给个默认值,否则的话下面会有报错提示
            BluetoothAddress blueAddress = new BluetoothAddress(new byte[] { 0x8e, 0xed, 0x10, 0xa3, 0xa8, 0xaa });
            //搜索蓝牙设备,10秒
            BluetoothDeviceInfo[] devices = client.DiscoverDevices();   
            //从搜索到的所有蓝牙设备中选择需要的那个
            foreach (var item in devices)
            {
                //根据蓝牙名字找
                if (item.DeviceName.Equals("BarCode Scanner HID"))  
                {
                    Console.WriteLine(item.DeviceAddress);
                    Console.WriteLine(item.DeviceName);
                    //获得蓝牙模块的唯一标识符
                    blueAddress = item.DeviceAddress;           
                    break;
                }
            }

查看唯一标识符的方法:
控制面板=》查看设备和打印机=》选中你需要连接的蓝牙设备=》右键属性=》蓝牙
在这里插入图片描述

BluetoothAddress blueAddress = new BluetoothAddress(new byte[] { 0x8e, 0xed, 0x10, 0xa3, 0xa8, 0xaa });

还是上面的代码,我抽出来说一下,这里的这个唯一标识符需要倒着填,格式就是0x??的格式来写,不理解的看图和代码对应一下。

3.功能实现

public void LanYa()
        {
            //处理蓝牙的对象
            BluetoothClient client = new BluetoothClient();
            //获取电脑蓝牙
            BluetoothRadio radio = BluetoothRadio.PrimaryRadio;
            //设置电脑蓝牙可被搜索到
            radio.Mode = RadioMode.Connectable;     
            //需要连接的蓝牙模块的唯一标识符
            BluetoothAddress blueAddress = new BluetoothAddress(new byte[] { 0x8e, 0xed, 0x10, 0xa3, 0xa8, 0xaa });
            //搜索蓝牙设备,10秒
            BluetoothDeviceInfo[] devices = client.DiscoverDevices();   
            //从搜索到的所有蓝牙设备中选择需要的那个
            //BarCode Scanner HID =》蓝牙设备名称
            foreach (var item in devices)
            {
                //根据蓝牙名字找
                if (item.DeviceName.Equals("BarCode Scanner HID"))  
                {
                    Console.WriteLine(item.DeviceAddress);
                    Console.WriteLine(item.DeviceName);
                    //获得蓝牙模块的唯一标识符
                    blueAddress = item.DeviceAddress;           
                    break;
                }
            }
            //BluetoothService.SerialPort根本无用
            BluetoothEndPoint ep = new BluetoothEndPoint(blueAddress,Guid.Parse("00001124-0000-1000-8000-00805f9b34fb"));
            //BluetoothEndPoint ep = new BluetoothEndPoint(blueAddress, BluetoothService.SerialPort);
            client.Connect(ep);//开始配对
            if (client.Connected)
            {
                //连接成功
                
            }

这就是扫描+连接我们的蓝牙的所有代码,这里比较重要的一点是配对,我就是在这里卡了挺长时间的。

BluetoothEndPoint ep = new BluetoothEndPoint(blueAddress,Guid.Parse("00001124-0000-1000-8000-00805f9b34fb"));
            //BluetoothEndPoint ep = new BluetoothEndPoint(blueAddress, BluetoothService.SerialPort);
            client.Connect(ep);//开始配对

这里面按网上的写法是BluetoothService.SerialPort类型的,有区别的只是BluetoothService点出来的服务不一样,不过我看网上也有很多对这块代码报错提问的,没人回答为什么会报错,这里我来说一下,这个服务的意思是用什么服务和蓝牙建立连接,而使用BluetoothService.SerialPort这种类型写得默认是安卓设备的UUID,这里我也很纳闷的是,网上很多代码在说是使用的PC端,那为什么获取到的安卓的默认UUID还可以连上?
这里我说一下我最后的实现过程。
控制面板=》查看设备和打印机=》选中你需要连接的蓝牙设备=》右键属性=》硬件=》蓝牙HID设备=》属性=》详细信息=》蓝牙服务Guid
这里完全是我摸索出来的,所以说遇到问题坚决不要怕,抽根烟休息一下继续搞就是,还能连个蓝牙都搞不定嘛。
在这里插入图片描述
我觉着这一步还是比较重要的,因为搜索附件蓝牙设备这种代码很多,完全就是轮子,但是最后一步匹配的时候就不一定是别人写的一定正确了。这个东西其实就是蓝牙提供服务的一个Guid也叫UUID,所以说这个还是得根据实际情况来写的。

4.总结

我就很纳闷,在我查资料的过程中,十篇文章有九篇是抄的一模一样的,而且还打上了原创的标签,吃相就那么难看嘛,如果您懂这个知识点我觉着抄了也无所谓,起码有不懂的朋友请教的时候您还可以讲的出来,最过分的还有些哥们抄都没抄全,也喊着可以运行,您这不是不当人嘛?

  • 38
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 24
    评论
要在C#中从蓝牙设备获取数据,你需要使用.NET Framework提供的Bluetooth API。以下是一个简单的代码示例: ```csharp using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO.Ports; using InTheHand.Net.Sockets; using InTheHand.Net.Bluetooth; namespace BluetoothDemo { class Program { static void Main(string[] args) { // 获取本机蓝牙设备列表 BluetoothClient client = new BluetoothClient(); BluetoothDeviceInfo[] devices = client.DiscoverDevices(); // 选择要连接设备 BluetoothDeviceInfo device = null; foreach (BluetoothDeviceInfo d in devices) { if (d.DeviceName == "MyDeviceName") { device = d; break; } } if (device != null) { // 连接设备 BluetoothClient client2 = new BluetoothClient(); BluetoothEndPoint ep = new BluetoothEndPoint(device.DeviceAddress, BluetoothService.SerialPort); BluetoothClient client3 = new BluetoothClient(); client3.Connect(ep); // 打开串口通信 SerialPort serialPort = new SerialPort(); serialPort.PortName = "COM1"; // 选择一个未使用的串口号 serialPort.BaudRate = 9600; serialPort.Parity = Parity.None; serialPort.DataBits = 8; serialPort.StopBits = StopBits.One; serialPort.Open(); // 从蓝牙设备读取数据并输出到控制台 while (true) { if (serialPort.BytesToRead > 0) { Console.Write((char)serialPort.ReadByte()); } } // 关闭串口通信 serialPort.Close(); } else { Console.WriteLine("Device not found."); } Console.ReadLine(); } } } ``` 注意,你需要在项目中引用`InTheHand.Net.Personal.dll`和`InTheHand.Net.Sockets.dll`。此外,你需要将`MyDeviceName`替换为你要连接蓝牙设备的名称。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚风偷吻云朵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值