蓝牙4.0 BLE 实践

Android 专栏收录该内容
74 篇文章 0 订阅

一、添加权限

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

二、添加引用"Plugin.BLE"

     通过nuget添加Plugin.BLE包。

三、获取蓝牙代理   

Plugin.BLE.Abstractions.Contracts.IAdapter _adapter = CrossBluetoothLE.Current.Adapter;

四、打开蓝牙

     这里假设已手动打开蓝牙。

五、搜索BLE设备

            this.btnScan.Click += async (object sender, EventArgs e) => {

                await _adapter.StartScanningForDevicesAsync();

            };

            //订阅设备发现事件

            _adapter.DeviceDiscovered += (s, e) =>

            {

                Console.WriteLine("Discovered device: " + e.Device.Name);

                _device = e.Device;

                this.Activity.RunOnUiThread(() =>

                {

                    this._listAdapter = new DevicesAdapter(this.Activity, _adapter.DiscoveredDevices);

                    this.lvLocks.Adapter = this._listAdapter;

                });

            };

六、连接蓝牙BLE终端设备  

            //ListView点击事件
            this.lvLocks.ItemClick += (object sender, AdapterView.ItemClickEventArgs e) =>
            {
                Console.Write("ItemClick: " + this._listAdapter.Items[e.Position]);
                _adapter.StopScanningForDevicesAsync();//停止扫描
                // select the item
                this.lvLocks.ClearFocus();
                this.lvLocks.Post(() =>
                {
                    this.lvLocks.SetSelection(e.Position);
                });
                // 连接蓝牙设备
                _adapter.ConnectToDeviceAsync(_device);

            };
            //成功连接设备事件
            _adapter.DeviceConnected += (s, e) =>
            {
                Console.WriteLine("DeviceConnected: " + e.Device.Name);

            };

七、启动服务发现

     这里我们已经有serviceUUID和characteristicUUID,所以此步省略。

八、获取Characteristic

                //连接到指定服务
                var service = await _device.GetServiceAsync(ServiceId);
                //接收用的特征
                var _receive = await service.GetCharacteristicAsync(ReceiveCharId);
                //发送用的特征

                var _transmit = await service.GetCharacteristicAsync(TransmitCharId);

九、读Characteristic

                _receive.ValueUpdated += (ss, ee) =>
                {
                    var bytes = ee.Characteristic.Value;
                    if (bytes == null || bytes.Length == 0)
                        return;
                    lock (readBuffer)
                    {
                        if (readBuffer.Count + bytes.Length > 1000)
                        {
                            readBuffer.RemoveRange(0, 1000 / 2);
                        }
                        readBuffer.AddRange(bytes);
                    }
                };

                _receive.StartUpdatesAsync();

十、写Characteristic

                //发送数据

                await _transmit.WriteAsync(new byte[] { 0x01, 0x02 });

注:蓝牙单次只能最多传输20个字节。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

DIY使用ESP32的手持游戏手柄并通过BLE进行通信 硬件部件: esp32× 1个 ws2812b× 6 游戏杆× 2 角度按钮× 2 按钮× 8 18560电池和电池座× 2 三向拨动开关× 1个 TP4056带保护的电池充电电路× 1个 MT3608升压转换器× 1个 软件应用程序和在线服务: Arduino IDE 手动工具和制造机: 烙铁(通用) 这是一个使用ESP32微控制器制作的DIY手持游戏手柄。您可能之前已经看过这样的游戏控制器。但大多数使用Arduino。或更具体地说,是Arduino pro micro或Leonardo开发板。因为这些板支持HID或通过USB的人机接口设备。但是esp32没有这种功能。那么我们该怎么做呢?嗯,esp32确实具有BLE或低功耗蓝牙,我们可以使用它通过蓝牙进行无线通信。 因此,我们有ESP32模块作为中央控制器,然后有USB C型端口和一个3.3v稳压器,可将5v转换为3.3v。然后我们有了编程电路,使用具有自动编程模式的ch340c usb到串行转换器和使用双工晶体管的自动复位电路。我们还具有电池充电电路,以及过充电和过放电保护功能。然后使用升压转换器ic将其升压至5v。接下来,我们有操纵杆,D-Pad按钮,触发按钮,Neopixel LED和i2c端口。最后是3向开关,可在USB电源和电池电源之间切换。 游戏手柄有 2个模拟游戏杆 2个触发按钮 2个D-Pads 6个可寻址RGB LED 和一个i2c端口 它可以使用2个18650锂离子电池运行,可以使用USB C型端口对其进行更改。它也可以用来对微控制器进行编程。该设计的灵感来自新的ps5控制器,以使其外观更好。GPIO4使用分压器连接到电池。这样我们就可以测量电池电压了。NeoPixel LED将指示控制器是否连接到设备或电池电压是否低。 该代码基于lemmingDev的BLE Gamepad库。在代码中,我为不同的输入定义了所有GPIO引脚。然后在设置中有一些初始的led动画。板子一旦连接到设备,所有的LED就会变成绿色。并且它将按先前定义的时间间隔检查电池电压。然后我们获得按钮状态,并相应地设置游戏手柄按钮。然后,我们采用模拟输入,并将其映射到合适的值。最后根据我们收到的值设置轴。上载代码后,在智能手机或PC上打开蓝牙菜单,您会看到一个新设备弹出。单击该按钮将其连接,就可以开始游戏了。
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值