04 蓝牙模块 - MiEcosystem/miot-plugin-sdk GitHub Wiki

蓝牙模块

MHBluetooth模块 AL-[100,)

废弃

我们提供了一个蓝牙示例插件,见 com.xiaomi.bledemo.ios 目录

常量

MHBluetooth 的回调机制

参考 BluetoothEvent

API

discoverServices()

Device.getBluetoothLE(perUUID).discoverServices //perUUID 在ios下需要

discoverCharacteristicsOfServiceUUID(serviceUUID)

Device.getBluetoothLE(perUUID).getService("a-b-c-d-e").startDiscoverCharacteristics

readBase64DataWithCallback(characteristicUUID, serviceUUID, callback)

蓝牙获取特征之后 read()

writeBase64DataWithCallback(data, characteristicUUID, serviceUUID, type, callback)

蓝牙获取特征之后 write()

writeHexDataWithCallback(hexString, characteristicUUID, serviceUUID, type, callback) AL-[113,)

蓝牙获取特征之后 write()

setNotifyWithCallback(needNotify, characteristicUUID, serviceUUID, callback)

蓝牙获取特征之后 setNotify

serviceUUIDsWithCallback(callback)

废弃

characteristicUUIDsOfServiceUUIDWithCallback(serviceUUID, callback)

废弃

startListeningBroadcast()

废弃

startListeningBroadcastWithoutDuplicatedPeripheral() AL-[112,)

废弃

stopListeningBroadcast()

废弃

reconnectDeviceWithCallback(callback)

retrievePeripheralsWithServicesForIOS

disconnectDevice()

Device.getBluetoothLE(perUUID).disconnect

scanDeviceWithCallback(callback)

Bluetooth.startScan

scanAndConnectForSeconds(double seconds, callback)

Bluetooth.startSca

registerWithCallback(callback)

废弃

base64ManufactureDataWithCallback(callback)

startScan 之后自行获取

setOfflineStatusDescription(desc)

废弃

setOnlineStatusDescription(desc)

废弃

setStatusDescription(desc)

废弃

getBluetoothStateCallback(callback) AL-[112,)

Bluetooth.checkBluetoothIsEnabled

getPeripheralInfo:(callback) AL-[116,)

废弃,直接获取外设对象

readRSSI AL-[116,)

Device.getBluetoothLE(perUUID).readRSSI

MHXiaomiBLE模块 AL-[111,)

废弃

常量

####didFoundXiaoMiBLEDevice 发现小米某model的蓝牙设备通知

MHXiaomiBLE.didFoundXiaoMiBLEDevice

API

getDefaultDevice(callback)

Device.getBluetoothLE(perUUID)

scanXiaoMiBLE(model, timeout, callback)

Bluetooth.startScan

registerXiaoMiBLE(did,mac, timeout, callback)

废弃

loginXiaoMiBLE(did,mac, timeout, callback)

废弃

disconnectXiaoMiBLE(did, mac, callback)

Device.getBluetoothLE(perUUID).disconnect

encryptMessageXiaoMiBLE(message, callback) AL-[125,)

Bluetooth.encryptMessage

decryptMessageXiaoMiBLE(encrypted, callback) AL-[125,)

Bluetooth.decryptMessage

toggleLockXiaoMiBLE(cmd,timeoutInterval,callback) AL-[125,)

Bluetooth.createBluetoothLE(...).connect(...).then(device => {device.securityLock().toggle(0,5000).then(lock => {console.log('toggle success')}).catch(err => {console.log('toggle failed'})})

secureTokenMD5(callback)AL-[125,)

废弃

isShareSecureKeyValid(callback)AL-[125,)

Bluetooth.createBluetoothLE(...).securityLock().isShareKeyValid

getBindKey(callback)AL-[137,)

废弃

oneTimePassword(interval, digits, callback)AL-[137,)

Bluetooth.createBluetoothLE(...).securityLock().getOneTimePassword

MHBluetoothLE

已废弃

其他

callback和event

主要参考 Bluetooth.BluetoothEvent

读/写数据

MHBluetoothLE模块中JavaScript to Objective-c的数据的传递都是以16进制字符串的方式进行的,例如向设备端写入一个字符串'1111',那么需要把字符串'1111' 转换成16进制字符串'30303030';设备端向外发生数据时也会被MHBluetoothLE模块转换成16进制字符串的形式,例如设备端发送数据是数字123, 那么MHBluetoothLE就会转换为'7B'

在com.xiaomi.corebledemo.ios/Main/XiaoMiBLEMainPage.js示例中提供了两个方法:

  • _hexStrToByteArr(hexStr); //16进制字符串转换为10进制数数组
  • _byteArrToHexStr(byteArr); //10进制数组转换为16进制字符串(10进制数接受范围是0~255, 包含0和255)

方法的超时

在connect等方法中,配置超时参数,具体参见API文档

config.plist

废弃

更多代码示例请看com.xiaomi.corebledemo.ios

开发非小米蓝牙协议设备说明

无变化

蓝牙设备固件升级说明

  1. 获取当前固件最新版本

    Service.smarthome.getLatestVersion
  2. 获取固件当前的版本号 通过蓝牙service、character读出当前固件版本号(成功连接的固件sdk会读取一次,通过MHPluginSDK.getDevicePropertyFromMemCache读取version属性可以获得,如果有问题,可以自行通过蓝牙读取)

  3. 固件下载、解压缩等操作在 Host.file 模块文档中有下载文件、解压缩等的接口

  4. 读写数据到固件的流程不变,写入升级数据

插件支持蓝牙网关说明

蓝牙网关设备具有米家 WiFi + BLE 双模通信能力,允许支持米家蓝牙协议的纯 BLE 设备通过其接入互联网。大致原理如下:

蓝牙网关工作原理示意

更多蓝牙网关信息请参考小米 IoT 开发者平台。

作为支持米家蓝牙协议的纯蓝牙设备,若处于蓝牙网关可扫描的范围内,则认为该蓝牙设备已经与蓝牙网关“连接”,蓝牙网关会实时接收蓝牙设备广播的数据,上报至云端。则:

1,用户通过米家 App 查看该蓝牙设备时,无需跟设备直接建立蓝牙连接,可查看设备上报的历史数据;

2,设备显示为在线,无需手机与设备建立连接。

注意,蓝牙设备“连接”蓝牙网关的前提是,两者处于同一小米账号下。

蓝牙设备

蓝牙设备插件可以通过 MHPluginSDK 模块中以下接口支持蓝牙网关功能:

isBtGateWaySubDeviceWithMac(mac, callback) AL-[130,)

废弃

callSmartHomeAPI(api, params, callback)

调用米家云端 API ,查询蓝牙设备上报至云端的历史数据。

Service.smarthome.getDeviceData

蓝牙网关

openBtGatewayPage() AL-[130,)

Host.ui.openBtGatewayPage

如遇问题请提交 issue

⚠️ **GitHub.com Fallback** ⚠️