esp32学习笔记2:将esp32作为BLE服务端,开启透传模式

原文链接

esp32学习笔记2:将esp32作为BLE服务端,开启透传模式 - 程序员大本营 (pianshen.com)

先说下蓝牙客户端和服务端的区别。

例如:手机1做客户端,手机2服务端

手机1要连手机2,就要自己发起搜索,搜索到手机2,然后发起连接

而手机2什么都不要做,只要开启广播,让手机1连就可以。

所以,如果我们想让esp32处于别人随时可以搜索和连接的状态,就要将esp32设置成BLE服务端,买来的芯片所带程序并不能满足要求,在他的数据手册里有这样一段话,意思就是要想用蓝牙作为服务端,需要下载他所需的bin文件,才能正常使用。详细见下图。

需要下载原厂的bin程序,如何官网下载,可以翻阅我写的esp32学习笔记1,里面详细写了如何查找和下载。

下载到bin文件以后,打开文件夹,需要将at_customize.bin和目录customized_partitions下的ble_data.bin、server_ca.bin、server_cert.bin、server_key.bin下载到esp32中。

如何下载程序看上一篇笔记,这里,着重要注意他们的地址,曾经我因为不小心写错地址,捣鼓了很久重新下载原厂程序,才疏学浅踩坑不少,也因此整理了第一篇笔记。

不同版本地址不一样,我这篇的版本是ESP32-WROOM-32_AT_Bin_V2.0,打开下载工具,将bin导入,记得打钩,电机START,将这些bin文件下载到esp32中。下载完之后,就可以设置成蓝牙服务端了。

完成这些步骤,就可以配置成服务端了。

这时我们可以发送一下命令,让esp32作为服务端并将数据透传给收

AT+BLEINIT=2 //将esp32设置成蓝牙服务端

AT+BLEGATTSSRVCRE //GATTS 创建服务

AT+BLEGATTSSRVSTART //GATTS 开启全部服务。

AT+BLEGATTSCHAR? //GATTS 发现服务特征

AT+BLEADVSTART //打开广播

AT+BLESPPCFG=1,1,6,1,5 //配置 BLE 透传模式

AT+BLESPP //打开透传模式

发送数据

在这里有好几个坑:

1.打开广播后,手机设置里面的蓝牙怎么都无法扫描到

原因:这是以为,BLE不支持手机蓝牙,他需要下载BLE蓝牙调试工具,只有在BLE蓝牙调试工具中才能查找到esp32的蓝牙。

其次,在BLE蓝牙调试工具中,esp32并不能显示蓝牙的名称,只能显示地址。

2.在配置透传模式后,再发送AT+BLESPP回复ERROR,无法打开数据透传

原因,这是在配置AT+BLESPPCFG就已经错误。我们来看下收据手册:

在esp32现有的例程里,将1号服务的第7号设置为写通道,经过我的测试,我的板子设置成这样无法开启透传,而1号服务的第6号可以,具体机制还不是很清楚,仅供参考。

3.在打开透传模式之后,esp32无法同时接收手机发送过来的数据,只有退出透传模式才可以

这个主要是设置蓝牙透传模式AT+BLESPPCFG所决定的,这里经过我的验证,esp32有两种模式:

只能发送:AT+BLESPPCFG=1,1,6,1,5或AT+BLESPPCFG=1,1,6,1,3

可以接收和发送(双向透传):AT+BLESPPCFG=1,1,6,1,4

可能还有只接收的模式,我没有去验证。

4.如何才能在手机端的BLE调试助手中显示esp32的蓝牙名称

要将esp32作为蓝牙服务端,无法用AT+BLENAME设置名字,根据手册提示,如下:

可知,要设置名称需要用AT+BLEADVDATA指令,根据例程:

这样可以将蓝牙的名称设置成Espressif,这是因为457370726573736966是Espressif的hex码,打开http://stool.chinaz.com/hex,由下面解码工具可以得出:

如果想要设置蓝牙名字,只要将要设的名字输入上图框中,然后点击Hex编码,就会生成对应的hex码:

AT+BLEADVDATA=“0201060A09457370726573736966030302A0”

/* The adv data is

  • 02 01 06 //,,

  • 0A 09 457370726573736966 //,,

  • 03 03 02A0 //,,
    */
    其中,第一列表示长度,第二列表示命令,要将0A改成设置后的长度;
    将加黑部分替换成生成的hex码,其他不变,接着分成以下两步:
    1、AT+BLEADVPARAM=32,64,0,0,7
    2、AT+BLEADVDATA=“0201060A09457370726573736966030302A0”
    这样名字设置就完成了。
    这时候,打开广播之后,名字就设置成自己想要的了。
    AT+BLEINIT=2 //将esp32设置成蓝牙服务端
    AT+BLEGATTSSRVCRE //GATTS 创建服务
    AT+BLEGATTSSRVSTART //GATTS 开启全部服务。
    AT+BLEADVSTART //打开广播

猜你喜欢

转载自blog.csdn.net/m0_38012497/article/details/129667566