借助调试工具理解BLE协议_3.Windows BLE调试工具

1.调试工具下载 

         Windows BLE调试工具是一款运行在Windows下的BLE调试软件,实现了扫描、连接、获取BLE设备上的服务以及向服务写入和读取数据的功能。图1是Windows BLE调试工具主界面。资源地址:

https://download.csdn.net/download/mecompu/86508009?spm=1001.2014.3001.5501&login=from_csdn

图1 Windows BLE调试工具主界面 

 2.使用工具连接蓝牙设备并查看Service。

         在图1所示界面搜索到目标设备CMT4502-20240601后,点击连接按钮打开如下图2页面。

        图2 服务展示和操作页面 

         从上图可以看到从机CMT4502-20240601有7个服务。分别是1800、1801、180A、FFC0、FF90、FFE0、FF01。其中1800,1801,180a是由SIG指定的特定服务的标识号。FFC0、FF90、FFE0、FF01是自定义的服务UUID。        

         下面代码中GattNativeServiceUUID是一些常见的Service服务UUID。想要了解更多信息,可以登录网站:Assigned Numbers | Bluetooth® Technology Website

        public enum GattNativeServiceUuid : ushort
        {
            None = 0,
            AlertNotification = 0x1811,
            Battery = 0x180F,
            BloodPressure = 0x1810,
            CurrentTimeService = 0x1805,
            CyclingSpeedandCadence = 0x1816,
            DeviceInformation = 0x180A,
            GenericAccess = 0x1800,
            GenericAttribute = 0x1801,
            Glucose = 0x1808,
            HealthThermometer = 0x1809,
            HeartRate = 0x180D,
            HumanInterfaceDevice = 0x1812,
            ImmediateAlert = 0x1802,
            LinkLoss = 0x1803,
            NextDSTChange = 0x1807,
            PhoneAlertStatus = 0x180E,
            ReferenceTimeUpdateService = 0x1806,
            RunningSpeedandCadence = 0x1814,
            ScanParameters = 0x1813,
            TxPower = 0x1804,
            SimpleKeyService = 0xFFE0
        }

          以下代码中定义了一些常见的特征值:        

public enum GattNativeCharacteristicUuid : ushort
        {
            None = 0,
            AlertCategoryID = 0x2A43,
            AlertCategoryIDBitMask = 0x2A42,
            AlertLevel = 0x2A06,
            AlertNotificationControlPoint = 0x2A44,
            AlertStatus = 0x2A3F,
            Appearance = 0x2A01,
            BatteryLevel = 0x2A19,
            BloodPressureFeature = 0x2A49,
            BloodPressureMeasurement = 0x2A35,
            BodySensorLocation = 0x2A38,
            BootKeyboardInputReport = 0x2A22,
            BootKeyboardOutputReport = 0x2A32,
            BootMouseInputReport = 0x2A33,
            CSCFeature = 0x2A5C,
            CSCMeasurement = 0x2A5B,
            CurrentTime = 0x2A2B,
            DateTime = 0x2A08,
            DayDateTime = 0x2A0A,
            DayofWeek = 0x2A09,
            DeviceName = 0x2A00,
            DSTOffset = 0x2A0D,
            ExactTime256 = 0x2A0C,
            FirmwareRevisionString = 0x2A26,
            GlucoseFeature = 0x2A51,
            GlucoseMeasurement = 0x2A18,
            GlucoseMeasurementContext = 0x2A34,
            HardwareRevisionString = 0x2A27,
            HeartRateControlPoint = 0x2A39,
            HeartRateMeasurement = 0x2A37,
            HIDControlPoint = 0x2A4C,
            HIDInformation = 0x2A4A,
            IEEE11073_20601RegulatoryCertificationDataList = 0x2A2A,
            IntermediateCuffPressure = 0x2A36,
            IntermediateTemperature = 0x2A1E,
            LocalTimeInformation = 0x2A0F,
            ManufacturerNameString = 0x2A29,
            MeasurementInterval = 0x2A21,
            ModelNumberString = 0x2A24,
            NewAlert = 0x2A46,
            PeripheralPreferredConnectionParameters = 0x2A04,
            PeripheralPrivacyFlag = 0x2A02,
            PnPID = 0x2A50,
            ProtocolMode = 0x2A4E,
            ReconnectionAddress = 0x2A03,
            RecordAccessControlPoint = 0x2A52,
            ReferenceTimeInformation = 0x2A14,
            Report = 0x2A4D,
            ReportMap = 0x2A4B,
            RingerControlPoint = 0x2A40,
            RingerSetting = 0x2A41,
            RSCFeature = 0x2A54,
            RSCMeasurement = 0x2A53,
            SCControlPoint = 0x2A55,
            ScanIntervalWindow = 0x2A4F,
            ScanRefresh = 0x2A31,
            SensorLocation = 0x2A5D,
            SerialNumberString = 0x2A25,
            ServiceChanged = 0x2A05,
            SoftwareRevisionString = 0x2A28,
            SupportedNewAlertCategory = 0x2A47,
            SupportedUnreadAlertCategory = 0x2A48,
            SystemID = 0x2A23,
            TemperatureMeasurement = 0x2A1C,
            TemperatureType = 0x2A1D,
            TimeAccuracy = 0x2A12,
            TimeSource = 0x2A13,
            TimeUpdateControlPoint = 0x2A16,
            TimeUpdateState = 0x2A17,
            TimewithDST = 0x2A11,
            TimeZone = 0x2A0E,
            TxPowerLevel = 0x2A07,
            UnreadAlertStatus = 0x2A45,
            AggregateInput = 0x2A5A,
            AnalogInput = 0x2A58,
            AnalogOutput = 0x2A59,
            CyclingPowerControlPoint = 0x2A66,
            CyclingPowerFeature = 0x2A65,
            CyclingPowerMeasurement = 0x2A63,
            CyclingPowerVector = 0x2A64,
            DigitalInput = 0x2A56,
            DigitalOutput = 0x2A57,
            ExactTime100 = 0x2A0B,
            LNControlPoint = 0x2A6B,
            LNFeature = 0x2A6A,
            LocationandSpeed = 0x2A67,
            Navigation = 0x2A68,
            NetworkAvailability = 0x2A3E,
            PositionQuality = 0x2A69,
            ScientificTemperatureinCelsius = 0x2A3C,
            SecondaryTimeZone = 0x2A10,
            String = 0x2A3D,
            TemperatureinCelsius = 0x2A1F,
            TemperatureinFahrenheit = 0x2A20,
            TimeBroadcast = 0x2A15,
            BatteryLevelState = 0x2A1B,
            BatteryPowerState = 0x2A1A,
            PulseOximetryContinuousMeasurement = 0x2A5F,
            PulseOximetryControlPoint = 0x2A62,
            PulseOximetryFeatures = 0x2A61,
            PulseOximetryPulsatileEvent = 0x2A60,
            SimpleKeyState = 0xFFE1
        }

2.1 Service UUID_1800 (GenericAccess = 0x1800)

        现在打开1800Service查看其中的特征值,如下图3所示,可以看到2a00,2a01,2a04是由SIG指定的特征UUID的标识号:

图3 服务(GenericAccess = 0x1800)                 

       读取2a00的值:        

图4 特征值(DeviceName = 0x2A00)

        特征值UUID_2a00(DeviceName = 0x2A00)设备名 :

                十六进制:0x43 0x4D 0x54 0x34 0x35 0x30 0x32 0x2D 0x32 0x30 0x32 0x34 0x30 0x36

                对应ASCII字符串:CMT4502-202406

           读取2a01的值: 

图5 特征值(Appearance = 0x2A01) 

                 特征值UUID_2a01(Appearance = 0x2A01)外观 :

        读取返回:

                十六进制: 0x00 0x00

         读取2a04:

图6 特征值(PeripheralPreferredConnectionParameters = 0x2A04) 

                特征值UUID_2a04(PeripheralPreferredConnectionParameters = 0x2A04)外设最佳连接参数。

2.2Service UUID_1801(GenericAttribute = 0x1801)

        现在打开1801Service查看其中的特征值,如下图7所示,可以看到2a05是由SIG指定的特征UUID的标识号:

图7 服务(GenericAttribute = 0x1801)                       

        2A0F( ServiceChanged = 0x2A05),是从机推送消息。

2.3Service UUID_180A(DeviceInformation = 0x180A)

        现在打开180AService查看其中的特征值,如下图3所示,可以看到2a23、2a26是由SIG指定的特征UUID的标识号:

图8 服务(DeviceInformation = 0x180A) 

        图9中2a03是read,读取返回值: 0x01 0x06 0x24 0x00 0x00 0x20 0x00 0x00

图9  特征值( ReconnectionAddress = 0x2A03) 

        其中2a06: FirmwareRevisionString = 0x2A26是固件版本号。

 2.4Service UUID_FFC0(防劫持密钥)

       自定义服务防劫持密钥【服务 UUID:0xFFC0】

图10 防劫持密钥【服务 UUID:0xFFC0】

2.5Service UUID_FF90(模块参数设置) 

         自定义服务模块参数设置【服务 UUID:0xFF90】 

图11 模块参数设置【服务 UUID:0xFF90】

2.6Service UUID_FFE0(透传数据通道) 

        透传数据通道【服务 UUID:0xFFE0】,勾选Write,Notify选择框,可以发送数据到从句,并接收从机的Notify信息。如下图12是透出HDLC协议报文,并收到从机回复的数据报文截图。

         图12 透传数据通道【服务 UUID:0xFFE0】

        

        

        

        

        

### 蓝牙低功耗(BLE调试工具使用教程 #### 工具概述 对于蓝牙低功耗(BLE)技术而言,选择合适的调试工具至关重要。常见的BLE调试工具包括硬件设备如nRF Sniffer、Bluegiga Dongle等以及软件平台如nRF Connect for Desktop、LightBlue等。 #### nRF Sniffer配置方法 为了捕获并分析空中传输的数据包,可以采用nRF Sniffer这一流行的选择。安装过程涉及下载专用驱动程序和应用程序,并将其与PC端相连以便于监控BLE流量[^1]。 ```bash sudo apt-get install libpcap-dev # 安装依赖库 (Linux环境) ``` #### 使用nRF Connect进行交互操作 nRF Connect是一款功能全面的应用程序,适用于Android和iOS操作系统。此应用不仅能够扫描周围存在的BLE设备,还能查看服务特征值详情,发送读写指令给目标装置完成参数调整或命令下发等功能。 #### 设备仿真与测试框架搭建 针对开发者来说,在不具备实际物理器件的情况下也可以利用模拟器来进行初步验证工作。例如,借助MBED OS提供的在线IDE集成的虚拟串口终端实现简单的通信逻辑演练;或是运用Python编写脚本来调用pybluez库构造自定义的服务端实例[^3]。 ```python from pybluetooth import BluetoothSocket, RFCOMM server_sock=BluetoothSocket( RFCOMM ) server_sock.bind(("",PORT_ANY)) server_sock.listen(1) client_sock,address = server_sock.accept() print("Accepted connection from ",address) data = client_sock.recv(1024) print ("received [%s]"% data) client_sock.close() server_sock.close() ``` #### 功耗优化实践指导 当涉及到具体产品设计时,了解如何有效降低系统整体能耗显得尤为重要。以NXP BLE SOC为例,其具备多种省电状态可供选用——比如PD0模式允许保持蓝牙核心活跃从而维持持续广播能力而不必担心过度消耗电量;而切换至更深一层休眠级别(PD1),则可进一步减少静态电流直至微安级水平[^2]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值