微信小程序的特点是无需下载App,只要是安装有微信的一部智能手机,几乎就可以运行微信小程序。基于这个特点,我设计了一款小程序版的蓝牙串口助手,适用于简单的蓝牙串口调试工作。
从事蓝牙相关产品开发的兄弟们,手机端的LightBlue、BLE Scanner、Nordic的nRF Connect等软件已经做得很好,但是使用起来,有些东西不能满足我的需求例如,UUID是一个长字符串,一般很难记住为110个字符,但实际操作时,请扫描Service UUID,单击后扫描相应的ymdxlb UUID,判断是否为notify,读取或写入read没事。 对于wirte,必须选择ASCII码还是HEX数。 这个时候,如果系统里出现中文键盘,你几乎崩溃了……
无论如何,这些软件都可以扫描ymdxlb,但其操作(读/通告,写)很困难。 基于这些痛点,我设计了一个串行调试接口UI,像普通的串行调试助手一样发送和接收数据,并根据ASCII、HEX的不同场景定制键盘。 像HEX键盘一样,输入时可以根据是否自动添加字节来添加空格,操作和视觉上都很简单。
详细信息在这里不要太渲染,谈谈蓝牙操作的流程吧。 微信小程序蓝牙的API有三个位置(两个部分)与蓝牙有关。
一、以手机为周边广播,让其他设备连接手机。
二、是以手机为主设备,扫描周边设备连接的。 这里谈谈这一部分。
三、接下来是蓝牙的开关操作。
复制并列出相应的API。 其中,“bluetooth”部分是也作为主从站使用的API。
另一方面,外围设备(手机作为外围设备对应的API ) :
wx.onbleperipheralconnectionstatechanged
wx.offbleperipheralconnectionstatechangedwx.createbleperipheralserver
bleperipheralserverbleperipheralserver.addservice
BLEPeripheralServer.close
bleperipheralserver.offymdxlbreadrequest
bleperipheralserver.offymdxlbsubscribed
bleperipheralserver.offymdxlbunsubscribed
bleperipheralserver.offymdxlbwriterequest
bleperipheralserver.onymdxlbreadrequest
bleperipheralserver.onymdxlbsubscribed
bleperipheralserver.onymdxlbunsubscribed
bleperipheralserver.onymdxlbwriterequest
bleperipheralserver.removeservicebleperipheralserver.start advertising
bleperipheralserver.stop advertising
bleperipheralserver.writeymdxlbvalue
二、低功耗蓝牙(手机作为主设备相应的扫描API ) :
wx.writebleymdxlbvaluewx.setblemtu
wx.readbleymdxlbvaluewx.onbleconnectionstatechange
wx.onbleymdxlbvaluechangewx.offbleconnectionstatechange
wx.offBLEymdxlbValueChange
wx.notifybleymdxlbvaluechangewx.makebluetoothpair
wx.getBLEDeviceServices
wx.getBLEDeviceRSSI
wx.getbledeviceymdxlbswx.createbleconnection
wx.closeBLEConnection
三.蓝牙:
wx.stopbluetoothdevicesdiscoverywx.startbluetoothdevicesdiscovery
wx.openBluetoothAdapter
wx.onBluetoothDeviceFound
wx.onbluetoothadapterstatechangewx.offbluetoothdevicefound
wx.offbluetoothadapterstatechangewx.getconnectedbluetoothdevices
wx.getBluetoothDevices
wx.getBluetoothAdapterState
wx.closeBluetoothAdapter
在通信操作中,一般被连接的设备叫「从机」,从机的程序相对比较“难”写,这里的难是加引号的,不是代码难写,是逻辑功能要考虑的比较全面,主机要什么,从机该回什么,这一切都要设置好。而主机在逻辑功能上可以选择“想要就要,不要想就不要”的操作逻辑。所以在这一方面,个人认为主机代码是相对简单的。但主机既然可以选择性要东西,那就需要有一个交互的UI,比如键盘交互,输入长度等内容,所以主机一般需要有一块屏幕。
所以今天我们来谈谈手机作为蓝牙主机,蓝牙模块作为蓝牙从机。 其中,蓝牙外围设备有两项服务。 一个是透明的数据服务,另一个是用于设置波特率等信息的配置服务
手机端流程:
1 .打开蓝牙
wx.openBluetoothAdapter
2 .打开蓝牙sucess回调以开始扫描蓝牙设备
wx.startbluetoothdevicesdiscovery
扫描sucess回调以发现蓝牙设备(发现的设备位于devices数组中,该变量保持不变。 应该在库中定义。 将其设置在页面上显示即可) )。
wx.onBluetoothDeviceFound
4 .选择蓝牙设备建立连接
wx.createBLEConnection
5 .享受设备服务
wx.getBLEDeviceServices
6 .获取器件特性值
wx.getBLEDeviceymdxlbs
到此为止,您可以获得设备服务的特征值。 对其进行读写操作。 各软件的区别也主要在这里。 以前按顺序运行没有问题,但有一些服务。 每个服务都有不同的特征值,每个特征值都有不同的读写特性。 大多数软件允许用户像操作列表一样一个接一个地访问。 不然的话,我会再一次退出。 我在这里改进了检查和保存所有的特征值
如上图所示,右图上方为所有服务的特征值,下方为操作picker选择notify/indecate、write、read,避免相互干扰。 如图所示,正常的发送/接收操作基于这种串行调试接口,并且可以单独地仅读取read属性的特征值。
蓝牙设备的连接调试现在已经完成,但串行助手还不够。 今天写在这里。 另外,还附上小程序的代码。 请体验交流。