C#连接蓝牙设备

news2024/11/25 12:50:01

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

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.总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/84211.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VSCODE 系列(六)使用Plantuml插件制作UML类图

文章目录前言下载和安装支持文件格式支持绘制类型导出语法申报要素UML类图关系参考例子参考前言 软件设计中,有好几种图需要画,比如流程图、类图、组件图等,我知道大部分人画流程图一般都会用微软的visio绘制,visio画图有个不好的…

[附源码]计算机毕业设计高校实验室仪器设备管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis MavenVue等等组成,B/S模式…

Java学习笔记 --- 反射

一、反射机制 Java Reflection 1、反射机制允许程序在执行期间借助于 ReflectionAPI取得任何类的内部信息(比如成员变量,构造器,成员方法等),并能操作对象的属性及方法。反射在设计模式和框架底层都会用到 2、加载完…

数学基础从高一开始6、全称量词与存在量词

数学基础从高一开始6、全称量词与存在量词 目录 数学基础从高一开始6、全称量词与存在量词 全称量词 存在量词 1.判断命题的真假 2.判断命题的真假 阅读下列两组命题,语言上有什么特点? A组: (1)对任意一个x∈Z,2x1是整数; (2)每一个素…

Pod使用进阶

Pod使用进阶 封面 写在前面 语雀上阅读效果更佳,请访问如下地址: 197 Pod使用进阶 语雀 《197 Pod使用进阶》 1、Pod 资源配置 实际上上面几个步骤就是影响一个 Pod 生命周期的大的部分,但是还有一些细节也会在 Pod 的启动过程进行设置&…

Hive 计算用户留存率(次日,3日,N日)

文章目录什么是用户留存率?创建数据源计算留存率计算 N 日的留存率什么是用户留存率? 用户留存率是指在特定时间段内,用户在使用某个产品或应用程序后,再次使用该产品或应用程序的比例。 它可以帮助公司了解用户是否喜欢他们的产…

2022 第十四届蓝桥杯模拟赛第二期题目题解(比赛时使用方法)

目录 第一题:最小的2022 第二题:经过天数 第三题:特殊的十六进制数 第四题:矩阵的最小路径 第五题:质数拆分 第六题:拷贝时间 第七题:单词去重 第八题:最短回文串 第九题&a…

[附源码]Node.js计算机毕业设计大学校园二手教材与书籍Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

GoWeb 优雅的 ORM 框架之 GORM,实现 MySQL 数据库的增删改查等操作(附案例全代码)

1、前言 什么是web应用,Web应用程序简单流程如下图所示 通过上图我们发现,我们 GoWeb 实战项目还缺少最后关键的环节数据库。那么如何使用 GO 语言操作数据库并完成增删改查等操作是我们今天学习的目标。 GoWeb 的 MVC 入门实战案例,基于 Iris 框架实现(附案例全代码) …

[附源码]Python计算机毕业设计Django的连锁药店销售管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

11.校验token和解析token获取数据代码优化

校验token和解析token获取数据代码优化 解决方案 基于ThreadLocal 拦截器的形式统一处理 一、使用拦截器进行统一身份鉴权 1.1定义拦截器 package com.tanhua.server.interceptor;import com.tanhua.commons.utils.JwtUtils; import org.springframework.web.servlet.Handl…

[附源码]Nodejs计算机毕业设计基于java旅游信息分享网站Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

二、物理层(一)通信基础

目录 1.1通信基础概念 1.2传输方式 1.2.1串行传输和并行传输 1.2.2单工通信、半双工通信和全双工通信 1.3编码与调制 1.3.1数字数据编码为数字信号 1.3.2数字数据调制为模拟信号 1.3.3模拟信号编码为数字信号 1.3.4模拟数据调制为模拟信号 1.4电路交换、报文交换与分…

装了就不舍得卸载,4款电脑必装软件,功能实用又免费

下面4款电脑软件,每一个都是你绝对能用得上的神器,可遇不可求。 1、AutoOff AutoOff是一款完全免费,纯绿色的电脑操作定时工具,功能强大且实用,体积不到1M,非常小巧,支持自动关机、重启、休眠、…

Mysql批量插入对比(附github仓库demo)

前言 本文记录个人使用MySQL插入大数据总结较实用的方案,通过对常用插入大数据的4种方式进行测试, for循环单条拼接SQL批量插入saveBatch()循环 开启批处理模式 最近趁空闲之余,在对MySQL数据库进行插入数据测试 准备工作 测试环境&…

189:vue+openlayers 上传CSV文件,导出Geojson格式文件

第189个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers上传CSV文件,导出GeoJSON文件。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果OpenStreetMap无法加载,请加载其他来练习 文章目录 示例效果使用的csv文件安装依赖配置方…

直播场控助手 | 为什么说直播场控比主播更重要?

在竞争白热化的直播时代,作为主播最亲密的伙伴,场控的作用不容忽视。 优秀的场控掌握着关键成交节点,实时帮助主播带节奏、促转化。在精细化直播运营中,优秀的场控能力胜过十位主播,让直播间轻松实现销量翻倍。 「帷幄…

基于jsp+mysql+ssm水果蔬菜销售系统-计算机毕业设计

项目介绍 生活中,人们买水果或者蔬菜都是去菜市场买,因为那里是卖水果、蔬菜的聚集地。农商们把水果、蔬菜从远处运到那里,进行销售。但是这种销售方式的不足在于每次运输的数量是有限的,并且运输过程中也影响了水果、蔬菜的口感…

使用 TVMC 编译和优化模型

内容一览:本节讲解使用 TVMC 编译和优化模型。TVMC 是 TVM 的命令驱动程序,通过命令行执行 TVM 功能。本节是了解 TVM 工作原理的基础。 关键词:TVMC TVM 机器学习 本节将介绍 TVMC(TVM 的命令行驱动程序)。TVM…

单片机扫盲

一、从电路到集成电路 集成电路:使用微器件为“积木”,去搭建一个具备一定功能的电路板 微器件出现之前,一个电路功能需要很大一块电路板才能实现,有了微器件电路板的体积可以降到mm级别。 IC芯片就是将电路的所有微器件集成到一…