ESP32使用MicroPython设置低功耗蓝牙广播通过微信小程序蓝牙通信

ESP32使用MicroPython设置低功耗蓝牙广播通过微信小程序蓝牙通信NO.1文档汇总微信小程序-蓝牙低功耗(BLE)文档这个文档已经把蓝牙的基础内容和代码片段都整理了,按照文档copy方法,基本能蓝牙通信http

欢迎大家来到IT世界,在知识的湖畔探索吧!


NO.1
文档汇总

微信小程序-蓝牙低功耗(BLE)文档

这个文档已经把蓝牙的基础内容和代码片段都整理了,按照文档copy方法,基本能蓝牙通信

https://developers.weixin.qq.com/miniprogram/dev/framework/device/ble.html

蓝牙-低功耗中心设备-API文档

https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.writeBLECharacteristicValue.html

ESP32使用MicroPython设置低功耗蓝牙广播通过微信小程序蓝牙通信

NO.2问题汇总

ESP32蓝牙代码

参加文章《ESP32使用MicroPython设置低功耗蓝牙广播,通过Chrome Web蓝牙通信》

可能涉及到的有

  1. 生成128位UUID(放置到ESP32代码)(默认大写)
  2. 把128位UUID英文字母转小写(Chrome Web Ble或者微信小程序等有些地方会要求小写UUID)
  3. 向蓝牙低功耗设备特征值中写入二进制数据(字符串和二进制数据转换处理)(本文使用Uint8Array,ESP32对应使用UTF-8)
  4. 读取蓝牙低功耗设备特征值的二进制数据(字符串和二进制数据转换处理)(本文使用Uint8Array,ESP32对应使用UTF-8)
  5. Android和Ios的蓝牙配置区别,微信小程序文档有提示

NO.3生成UUID

搜索引擎搜索UUID在线生成即可

根据蓝牙 4.2 协议规范(Vol 3, Part B, section 2.5.1 UUID),UUID 是一个 128 位的唯一标识符,用来标识 Service 和 Characteristic 等

ESP32使用MicroPython设置低功耗蓝牙广播通过微信小程序蓝牙通信

NO.4大写转小写

Chrome Web BLe使用的是小写UUID

微信小程序使用的是大写UUID

官方文档

https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.startBluetoothDevicesDiscovery.html

// 以微信硬件平台的蓝牙智能灯为例,主服务的 UUID 是 FEE7。传入这个参数,只搜索主服务 UUID 为 FEE7 的设备
wx.startBluetoothDevicesDiscovery({
services: ['FEE7'],
  success (res) {
console.log(res)
  }
})

欢迎大家来到IT世界,在知识的湖畔探索吧!

同样的搜索引擎搜索 英文字母小写转小写 找个在线工具站即可

ESP32使用MicroPython设置低功耗蓝牙广播通过微信小程序蓝牙通信

NO.5发送数据

字符串和二进制转码相对比较麻烦

微信小程序文档示例的二进制数据并不是我想要发送的字符串

https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.writeBLECharacteristicValue.html

官方的演示

欢迎大家来到IT世界,在知识的湖畔探索吧!// 向蓝牙设备发送一个0x00的16进制数据
let buffer = new ArrayBuffer(1)
let dataView = new DataView(buffer)
dataView.setUint8(0, 0)


wx.writeBLECharacteristicValue({
// 这里的 deviceId 需要在 getBluetoothDevices 或 onBluetoothDeviceFound 接口中获取
  deviceId,
// 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取
  serviceId,
// 这里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中获取
  characteristicId,
// 这里的value是ArrayBuffer类型
  value: buffer,
  success (res) {
console.log('writeBLECharacteristicValue success', res.errMsg)
  }
})

本文字符串转二进制数据方法

把函数返回的值给到上面方法的value参数即可

str参数是字符串

// 字符串转byte
    stringToBytes(str) {
var array = new Uint8Array(str.length);
for (var i = 0, l = str.length; i < l; i++) {
array[i] = str.charCodeAt(i);
      }
// console.log(array);
return array.buffer;
    },

注意这个方法使用的是Uint8Array,ESP32用的是buffer.decode(‘UTF-8’)

你也可以改为Uint16Array,buffer.decode(‘UTF-16’)之类的

备注:

ArrayBuffer作为内存区域,可以存放多种类型的数据。不同数据有不同的存储方式

类型

描述

长度

Int8Array

8位有符号整数

长度1个字节

Uint8Array

8位无符号整数

长度1个字节

Int16Array

16位有符号整数

长度2个字节

Uint16Array‍

16位无符号整数

长度2个字

Int32Array

32位有符号整数

长度4个字节

Uint32Array

32位无符号整数

长度4个字

Float32Array

32位浮点数

长度4个字

Float64Array

64位浮点数

长度8个字节

NO.6接收数据

微信小程序接收ESP32返回的蓝牙数据响应

官方文档

https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.onBLECharacteristicValueChange.html

官方代码

欢迎大家来到IT世界,在知识的湖畔探索吧!// ArrayBuffer转16进制字符串示例
function ab2hex(buffer) {
let hexArr = Array.prototype.map.call(
new Uint8Array(buffer),
function(bit) {
return ('00' + bit.toString(16)).slice(-2)
    }
  )
return hexArr.join('');
}

官方文档的代码仍然达不到我想要的字符信息转换

本文转码方法

ArrayBuffer转为字符串

ab2str(buf) {
return String.fromCharCode.apply(null, new Uint8Array(buf));
},

同样的上面的方法,也要和ESP32的发送格式一一对应,才能解码

ESP32 蓝牙发送数据

# 文档地址:
# https://docs.micropython.org/en/latest/library/bluetooth.html?highlight=irq#gatt-client
self.ble.gatts_notify(0, self.tx, data + '\n')

NO.7实际调试

本文已简单开发一个微信小程序

可以扫描蓝牙广播设备,选择设备后,可发送字符串并接收相应信息展示

主要是调试本文ESP32对应代码的设备

小程序

ESP32使用MicroPython设置低功耗蓝牙广播通过微信小程序蓝牙通信

使用演示

ESP32使用MicroPython设置低功耗蓝牙广播通过微信小程序蓝牙通信

NO.8Tips

这个微信小程序原本是用来写ESP32蓝牙配网和设置哔哩哔哔粉丝计数器配置

后来写着写着就变成扫描蓝牙列表和字符串发送接收调试,后期再逐步加上蓝牙配网之类

通信解决了,剩下就是代码配置和交互问题自定义

总之,微信小程序有以下特点

  1. Chrome Web BLE只能在Andorid手机和Windows电脑使用,微信小程序都可以(Iphone和Android没问题,桌面端小程序未测试)
  2. 避免了Iphone和Android各自写APP并适配蓝牙的问题,微信小程序写一次代码通用上架平台,大多数适配问题,微信官方来解决
  3. 个人也可以上架微信小程序,方便调试和产品开发等自定义设置

快速请尝试web蓝牙,兼容请尝试微信小程序,深度请开发APP

END

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/34012.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信