首发:Rice 嵌入式开发技术分享
作者:RiceDIY
简要
- 平衡车文章分为4篇进行说明:
- 《平衡车 - 硬件》:讲解平衡车的硬件设计。
- 《平衡车 - 软件》:讲解平衡车的软件设计,算法。
- 《平衡车 - 上位机》:讲解调参上位机的设计
- 《平衡车 - 微信小程序》:讲解微信小程序作为遥控器的实现。
- github连接:https://github.com/RiceChen/B...\_Car.git * 为了能够方便的控制小车,PC上位机虽然容易开发,但是不方便。安卓原生APP虽然方便,但是不懂安。所以我选择了微信小程序,虽然我不会JS,但是他的选择是最正确的。开发容易,而且方便。
- 因为平衡车板载BLE,微信小程序也支持BLE,所以完美搭配
软件设计
- 其实微信小程序我在之前已经写过一文章:
- 上面这篇描述了最基本BLE版本的微信小程序开发。
- 而在我的平衡车中,也是基于上面的代码进行补充,包括UUID的过滤,数据包的打包等功能。
- 过滤UUID, 获取对应UUID(0000FFE0-0000-1000-8000-00805F9B34FB)的属性:
// 获取要连接设备的服务
getBLEDeviceServices(deviceId) {
this.printLog("获取设备服务: " + deviceId)
wx.getBLEDeviceServices({
deviceId,
success: (res) => {
for (let i = 0; i < res.services.length; i++) {
if(res.services[i].uuid == "0000FFE0-0000-1000-8000-00805F9B34FB") {
this.getBLEDeviceCharacteristics(deviceId, res.services[i].uuid)
}
}
}
})
},
- 数据打包,协议上跟PC上位机与下位机通信协议一致,这样不用定义两套协议:
//发送前进命令
up_command() {
var that = this;
that.sendData = "bc,02,01,00,00,00,00,00,00,00,00,0a";
this.writeBLECharacteristicValue(that.sendData)
},
writeBLECharacteristicValue(sendData) {
var that = this;
let data = sendData.split(',')
let buffer = new ArrayBuffer(data.length)
let dataView = new DataView(buffer)
for (let j = 0; j < data.length; j++) {
dataView.setUint8(j, '0x' + data[j])
}
wx.writeBLECharacteristicValue({
deviceId: this._deviceId,
serviceId: this._serviceId,
characteristicId: this._characteristicId,
value: buffer,
success (res) {
// that.printLog("发送数据成功");
},
fail (res) {
that.printLog("发送数据失败")
}
})
},
效果:
关注微信公众号『Rice嵌入式开发技术分享』,后台回复“微信”添加作者微信,备注”入群“,便可邀请进入技术交流群。
推荐阅读
更多嵌入式技术干货请关注Rice 嵌入式开发技术分享