当前位置 : 主页 > 网络编程 > c#编程 >

C#连接蓝牙设备的实现示例

来源:互联网 收集:自由互联 发布时间:2023-03-22
目录 1.思路 2.实现 2.1使用NuGet包 2.2搜索附件蓝牙设备 3.功能实现 4.总结 看过各种博主的文章,发现基本上都是属于误人子弟的文章,踩过各种坑最终实现了此功能。 1.思路 电脑蓝牙和
目录
  • 1.思路
  • 2.实现
    • 2.1使用NuGet包
    • 2.2搜索附件蓝牙设备
  • 3.功能实现
    • 4.总结

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

      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[] {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> 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.总结

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

      到此这篇关于C#连接蓝牙设备的实现示例的文章就介绍到这了,更多相关C#连接蓝牙设备内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

      上一篇:C#实现代码移除窗体上的控件
      下一篇:没有了
      网友评论