由于微信小程序只支持BLE每次发送数据不大于20个字节,ESP32则有经典蓝牙、低功耗蓝牙两种模式。

要解决发送数据大于20个字节的问题,最简单实用的方式就是分包发送。如下图所示:

1、什么起始字符和结束字符

  起始字符用来通知接收端,当接收端接收到起始字符之后开始通过循环拼接字符,当接收端接收到结束字符之后得就能得到本次接收的所有字符。

2、如何选择起始字符和结束字符

  参考ASCII码选择要发送的字符中没有的字符。

2、为什么小于18字符

  由于每次最多发送20个字符,那么为了保证安全和效率不要打擦边球,所有选择每个包最多18个字符。

参考小程序代码:

 //要发送的字符串(要在起始位置添加起始字符,结束位置添加结束字符)
let order = that.stringToBytes(recs);
let byteLen = order.byteLength;//长度
let pos = 0; //字符位置
let tempBuffer; //一次发送的数据
var i = 0; //计数 //为了安全每次发送18个字节 (每次最多20个)
//发送之前
while (byteLen > 0) {
i++;
if (byteLen > 18) {
tempBuffer = order.slice(pos, pos + 18);
pos += 18;
byteLen -= 18;
console.log("第", i, "次发送:", tempBuffer);
that.writeBLECharacteristicValue(tempBuffer);
} else {
tempBuffer = order.slice(pos, pos + byteLen);
pos += byteLen;
byteLen -= byteLen;
console.log("第", i, "次发送:", tempBuffer);
that.writeBLECharacteristicValue(tempBuffer);
}
}
console.log("发送结束");

ESP32接收端参考代码:

   void onWrite(BLECharacteristic *pCharacteristic) {
std::string rxValue = pCharacteristic->getValue(); if (rxValue.length() > 0) { for (int i = 0; i < rxValue.length(); i++){ //防止 意外字符串过长
if(bleReslen>1024){
bleReslen=0; } //开始标志
if((int)rxValue[i]==ASCII_STR){//ASCII 起始符
bleReslen=0; //结束标志
}else if((int)rxValue[i]==ASCII_END){//ASCII 结束符
extractData();//提取数据结束
bleReslen=0; }else{
//拼接字符串
encBefor[bleReslen]=(char)rxValue[i];//赋值
bleReslen++; } } } }

ESP32 BLE蓝牙 微信小程序通信发送大于20字符数据的更多相关文章

  1. 微信小程序中发送模版消息注意事项

    在微信小程序中发送模版消息 参考微信公众平台Api文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html#模版消息管理 此参考地址 ...

  2. 微信小程序结合后台数据管理实现商品数据的动态展示、维护

    微信小程序给我们提供了一个很好的开发平台,可以用于展现各种数据和实现丰富的功能,本篇随笔介绍微信小程序结合后台数据管理实现商品数据的动态展示.维护,介绍如何实现商品数据在后台管理系统中的维护管理,并通 ...

  3. 微信小程序通过api接口将json数据展现到小程序示例

    这篇文章主要介绍了微信小程序通过api接口将json数据展现到小程序示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧实现知乎客户端的一个重要知识前提就是,要知道怎么通过 ...

  4. 微信小程序wx.request请求服务器json数据并渲染到页面

    [原文出自]: https://blog.csdn.net/weixin_39927850/article/details/79766259 微信小程序的数据总不能写死吧,肯定是要结合数据库来做数据更 ...

  5. 微信小程序如何发送短信验证码,无需搭建服务器

    自从微信小程序提供云开发支持,开发者无需搭建后台服务器,使用微信提供的核心API就可以实现应用功能,此时就需要小程序能够自己发送短信,比如短信验证码,榛子云短信(http://smsow.zhenzi ...

  6. 原创:【微信小程序】发送消息模板教程(后台以PHP示例)

    1.本教程对外开放,未经博主同意,禁止转载. 2.准备材料:1)公众号|小程序,添加选择的模板消息,2)在设置>开发设置页面,开通消息模板功能:如: 3.因为调用微信发送模板的接口是:https ...

  7. (三)微信小程序之发送服务通知(模板消息)

    1.后端获取AccessToken返回给微信端 微信小程序端请求后端得到AccessToken   2.后端获取openid返回给微信端   微信小程序端登录请求后端得到openid   3.发送消息 ...

  8. 微信小程序火车票查询 直取12306数据

    最终效果图: 样式丑哭了,我毕竟不是前端,宗旨就是练练手,体验微信小程序的开发,以最直接的方式获取12306数据查询火车票. 目录结构: search1是出发站列表,search2是目的站列表,命名没 ...

  9. 微信小程序之微信登陆 —— 微信小程序教程系列(20)

    简介: 微信登陆,在新建一个微信小程序Hello World项目的时候,就可以看到项目中出现了我们的微信头像,其实这个Hello World项目,就有一个简化版的微信登陆.只不过是,还没有写入到咱们自 ...

随机推荐

  1. 码农飞升记-Java是什么?

    1.Java概述 Java 原名 Oak 是 Sun Microsystems 公司的 James Gosling 及其团队于 1995 年 5 月推出的 Java 程序设计语言 和 Java 平台 ...

  2. jenkins.war

    一准备工作 首先你得打开SSH 二将jenkins.war转移到jenkins.war /usr/local/tomcat/apache-tomcat-7.0.63/webapps/中 然后启动tom ...

  3. PyQt(Python+Qt)学习随笔:QTreeWidgetItem项是否禁用disable、隐藏isHidden和允许选中isSelected

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 树型部件QTreeWidget的项QTreeWidgetItem对象具有是否禁用disable.是否 ...

  4. PyQt(Python+Qt)学习随笔:Qt Designer中部件mimimumSize和maximumSize的含义

    1.mimimumSize mimimumSize表示部件能被缩小到的最小尺寸,单位为像素,缩小到该尺寸后不能再进一步缩小了.如果部件在布局管理器中,且布局管理器也设置了最小尺寸,则部件本身的最小尺寸 ...

  5. 性能测试学习之路 (三)jmeter常见性能指标(相关术语、聚合报告 && 服务器性能监控配置 && 图形结果 && 概要报告)

    1 性能测试目的 性能测试的目的:验证软件系统是否能够达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈,以优化软件. 最后起到优化系统的目的性能测试包括如下几个方面: 1.评估系统的能力:测试 ...

  6. 从输入 URL 到页面展示,这中间发生了什么?

    当面试官问到,请你说说看"从输入 URL 到页面展示,这中间发生了什么?" 以前的我是这样回答的: 用户输入URL后,向服务器端发起请求.如果顺利,得到网络响应之后,浏览器对资源进 ...

  7. VS调试相关

    1.查看DataSet的数据

  8. 使用公钥私钥加密实现单点登录(SSO)

    Oauth2+Gateway+springcloud+springcloud-alibaba-nacos+jwt ,使用公钥私钥加密实现单点登录(OSS) github地址点这里 注意事项 GET: ...

  9. 学习笔记: mysql增删改查基础语句

    mysql基础入门语句 增: INSERT INTO 表名(字段1, 2, 3) VALUES('值1', '2', '3') 删: DELETE FROM 表明 WHERE 删除条件 不提供更新条件 ...

  10. KafkaMirrorMaker 的不足以及一些改进

    背景 某系统使用 Kafka 存储实时的行情数据,为了保证数据的实时性,需要在多地机房维护多个 Kafka 集群,并将行情数据同步到这些集群上. 一个常用的方案就是官方提供的 KafkaMirrorM ...