網站首頁 編程語言 正文
看過各種博主的文章,發現基本上都是屬于誤人子弟的文章,踩過各種坑最終實現了此功能。
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.總結
我就很納悶,在我查資料的過程中,十篇文章有九篇是抄的一模一樣的,而且還打上了原創的標簽,吃相就那么難看嘛,如果您懂這個知識點我覺著抄了也無所謂,起碼有不懂的朋友請教的時候您還可以講的出來,最過分的還有些哥們抄都沒抄全,也喊著可以運行,您這不是不當人嘛?
原文鏈接:https://blog.csdn.net/qq_43434929/article/details/128295431
相關推薦
- 2022-06-27 Python使用re模塊實現okenizer(表達式分詞器)_python
- 2022-11-16 python壓縮和解壓縮模塊之zlib的用法_python
- 2022-07-09 Harbor鏡像倉庫搭建
- 2022-05-04 分享10提高?Python?代碼的可讀性的技巧_python
- 2022-09-23 Windows?10搭建FTP服務器圖文教程_FTP服務器
- 2024-03-17 基于linux使用Centos7實現Samba服務器安裝和配置(超詳細)
- 2022-04-19 C++中拷貝構造函數的使用_C 語言
- 2024-04-04 mybatis-config.xml的配置
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支