使用C#进行蓝牙开发-接收BLE广播

使用BluetoothLEAdvertisementWatcher类来接收附近的蓝牙广播,这个是UWP的类,关于如何在WPF或者命令行程序中使用这个类,随便一搜就有了,很简单,.NET6之后简单设置一下项目属性就可以了。

private BluetoothLEAdvertisementWatcher bleWatcher;

bleWatcher = new BluetoothLEAdvertisementWatcher() 
            {
                ScanningMode = BluetoothLEScanningMode.Active,
                AllowExtendedAdvertisements = true 
            };

bleWatcher.Received += BleWatcher_Received;
bleWatcher.Start();

这里是接收附近所有的BLE广播,如果想要只接收自己的,可以设置过滤,只接收CompanyId=0x0942的广播

var manufacturerDataWriter = new DataWriter(); 
var manufacturerData = new BluetoothLEManufacturerData { CompanyId = 0x0942 };       
this.bleWatcher.AdvertisementFilter.Advertisement.ManufacturerData.Add(manufacturerData);

在Received中处理接收到的广播,几个会用到的属性,args是事件的参数:

args.BluetoothAddress:  发出BLE广播地址,这是个随机地址,并非蓝牙地址

args.IsScanResponse: 扫描响应,一般广播者的设备名称会包含在这个扫描响应里

args.Advertisement.LocalName: 广播者的蓝牙名称

args.Advertisement.DataSections: 这个是广播的原始数据,这是一个数组,里面包含的是广播的数据

args.Advertisement.ManufacturerData: 微软文档中说明这是特定于制造商的数据,一般广播者会把自己的数据放在这里面

解析ManufacturerData数据:

foreach (var item in args.Advertisement.ManufacturerData)
            {
                var dataBuffer = item.Data;
                var message = new byte[dataBuffer.Length];
                using (var reader = DataReader.FromBuffer(dataBuffer))
                {
                    reader.ReadBytes(message);
                }
                Console.WriteLine(BitConverter.ToString(message));
              //  Console.WriteLine($"  [{System.Text.Encoding.Default.GetString(message)}]");
            }

 最终效果:

空了会写一个完整的DEMO

接下来的内容:

1. 如何发布自定义的蓝牙广播,配合广播接收,可以实现设备的发现和测距

2. 蓝牙GATT协议

3. C#中使用蓝牙GATT进行蓝牙通信

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值