ESP32 BLE蓝牙 使用AT指令与其他BLE蓝牙模块透传 配置教程

前言

因项目需求,需要使用ESP32 BLE蓝牙同亿佰特蓝牙模块(型号:E104-BT5011A)建立透传。经查阅E104-BT5011A使用指南,可以通过UUID与其他厂商蓝牙模块建立连接。经过研究后成功实现同ESP32 BLE蓝牙透传。

提示:以下是本篇文章正文内容,下面案例可供参考

一、ESP32 AT固件下载

首先需要下载ESP32 AT固件并通过官方烧录工具烧录到芯片。

1.AT固件下载

https://www.espressif.com/zh-hans/support/download/at
需要根据自己的芯片型号下载不同的固件,因为我的是esp32-wroom-32,所以我下载对应固件。
下载完成解压后里面有个用户指南,这里有详细的固件烧录教程、连线方式、AT指令解释等。具体烧录过程参考官方教程,这里不再赘述。
在这里插入图片描述

2.烧录工具下载

https://www.espressif.com/zh-hans/support/download/other-tools
在这里插入图片描述

二、亿佰特蓝牙E104-BT5011A配置(服务端)

BLE蓝牙从机使用通知方式发送数据,数据发送速率较快,主机采用写响应的方式,数据发送速率较慢。
因为数据发送方是E104-BT5011A,所以我们首先对数据发送方(也可称作为:server,服务端,从机)进行蓝牙配置。

首先使用AT指令进行测试。出现乱码,原因一般是是波特率选择不对。出现错误,原因一般是勾选了发送新行。

在这里插入图片描述
然后配置为从机模式,并进行广播。

//测试指令
AT
//配置模块为从机
AT+ROLE=0
//开启广播
AT+ADV=1
//获取mac地址
AT+MAC?
//获取广播名字
AT+NAME?

注意事项:获取MAC地址时先勾选16进制显示,然后再发送指令,红框内6字节数即为MAC地址。

在这里插入图片描述

在这里插入图片描述

三、ESP32蓝牙配置(客户端)

将ESP32 配置为数据接收方(也可称为:client,客户端,主机),然后按照从机广播名字进行扫描,这里需要耐心等待一会才能扫描到。

指令如下:

AT+BLEINIT=1// 设置为客户端
这里我们有两种方式进行扫描,一使用MAC地址,二使用从机广播名字。推荐使用名字进行过滤。
之前用MAC地址进行过滤怎么也查询不到,最后发现能识别的MAC地址和从机显示的MAC地址是反过来的。
使用名字进行过滤就不用担心出现这个问题。
AT+BLESCAN=1,0,2,"E104-BT5011A" // 开始扫描,过滤类型为设备名称
AT+BLESCAN=1,0,1,"ef:f0:db:6a:7d:50" // 开始扫描,过滤类型为MAC 地址

注意事项: 这里与从机配置有些不同,需要勾选"发送新行"才能发送指令,否则会错误。

在这里插入图片描述
然后与从机建立连接

AT+BLECONN=0,"ef:f0:db:6a:7d:50"//与从机建立连接,0代表Bluetooth LE 连接号,下面我们还会用到

在这里插入图片描述
建立连接后就可以获取从机提供的服务啦,先获取从机提供的基本服务:

AT+BLEGATTCPRIMSRV=0//0代表Bluetooth LE 连接号

在这里插入图片描述
这里返回了三行数据,经过查询E104-BT5011A的UUID说明,我们可以发现,返回的第三行数据就包含需要的UUID服务序号,这里记清楚是第三行。下一条指令要用到。
在这里插入图片描述
然后使用指令获取 GATTC 服务特征

AT+BLEGATTCCHAR=0,3//0代表Bluetooth LE 连接号,3代表UUID服务序号,由上一条指令查询得到。

在这里插入图片描述

这里返回了好多信息,接下来是重点,我们需要根据E104-BT5011A的UUID说明和ESP32的AT+BLESPPCFG进行配置。
在这里插入图片描述

特征值SLAVE CHANNEL UUID FFF1 对应上边返回信息的+BLEGATTCCHAR:"char",0,3,1,0xFFF1,0x12
特征值MAST CHANNEL UUID FFF2 对应上边返回信息的+BLEGATTCCHAR:"char",0,3,2,0xFFF2,0x0a
特征值CONFIG CHANNEL UUID FFF3 对应上边返回信息的+BLEGATTCCHAR:"char",0,3,3,0xFFF3,0x1a
0代表Bluetooth LE 连接号,3代表UUID服务序号,1 2 3代表三个服务特征序号(下一条指令要用到)

我们看下ESP32 AT的透传配置说明,设置Bluetooth LE SPP透传参数。
这里的参数需要根据从机UUID说明进行配置。
在这里插入图片描述

AT+BLESPPCFG=1,3,2,3,1
第一个参数需要配置为1,
第二个参数是ESP32主机的tx服务序号,需要将其设置为3,
第三个参数是ESP32主机的tx服务特征序号,需要设置为2,也就是UUID为0xFFF2,主机发送,从机接受数据通道
第四个参数是ESP32主机的rx服务序号,需要将其设置为3,我这里是和tx服务序号相同
第五个参数是ESP32主机的rx服务特征序号,需要设置为1,也就是UUID为0xFFF1,从机发送,主机接收数据通道
//配置完成后就可以使用以下命令开启透传
AT+BLESPP

在这里插入图片描述
发送一些数据测试一下:

在这里插入图片描述
成功建立透传。

  • 9
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在STM32上配置BLE蓝牙,您可以参考以下步骤: 1. 确保您的STM32芯片支持BLE蓝牙功能。 2. 获取BLE模块并连接到STM32。 3. 配置UART串口。 4. 配置STM32的GPIO以控制BLE模块的状态。 5. 在STM32中编写BLE协议栈代码。 6. 使用BLE协议栈API进行通信。 下面是一些示例代码,以帮助您开始编写BLE协议栈代码: ```c #include "stm32f4xx.h" #include "ble.h" // define BLE module GPIO pins #define BLE_RESET_Pin GPIO_Pin_2 #define BLE_RESET_GPIO_Port GPIOA #define BLE_IRQ_Pin GPIO_Pin_3 #define BLE_IRQ_GPIO_Port GPIOA // define BLE module UART #define BLE_UART USART1 // BLE module IRQ handler void BLE_IRQ_Handler(void) { // handle BLE module IRQ } // initialize BLE module void BLE_Init(void) { // configure BLE module GPIO pins GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = BLE_RESET_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(BLE_RESET_GPIO_Port, &GPIO_InitStruct); GPIO_InitStruct.Pin = BLE_IRQ_Pin; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(BLE_IRQ_GPIO_Port, &GPIO_InitStruct); // reset BLE module HAL_GPIO_WritePin(BLE_RESET_GPIO_Port, BLE_RESET_Pin, GPIO_PIN_RESET); HAL_Delay(100); HAL_GPIO_WritePin(BLE_RESET_GPIO_Port, BLE_RESET_Pin, GPIO_PIN_SET); HAL_Delay(100); // configure BLE module UART UART_HandleTypeDef huart; huart.Instance = BLE_UART; huart.Init.BaudRate = 115200; huart.Init.WordLength = UART_WORDLENGTH_8B; huart.Init.StopBits = UART_STOPBITS_1; huart.Init.Parity = UART_PARITY_NONE; huart.Init.Mode = UART_MODE_TX_RX; huart.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart.Init.OverSampling = UART_OVERSAMPLING_16; HAL_UART_Init(&huart); // configure BLE module IRQ HAL_NVIC_SetPriority(EXTI3_IRQn, 0, 0); HAL_NVIC_EnableIRQ(EXTI3_IRQn); // initialize BLE protocol stack ble_init(); } // send data over BLE void BLE_SendData(uint8_t* data, uint16_t len) { ble_send_data(data, len); } // receive data over BLE uint16_t BLE_ReceiveData(uint8_t* data) { return ble_receive_data(data); } // main function int main(void) { // initialize STM32 and BLE module HAL_Init(); BLE_Init(); // send and receive data over BLE uint8_t data[] = "Hello, BLE!"; BLE_SendData(data, sizeof(data)); uint8_t buf[1024]; uint16_t len = BLE_ReceiveData(buf); // do something with received data if (len > 0) { // handle received data } // main loop while (1) { // do something } } ``` 这只是一个简单的示例代码,您需要根据您的具体情况进行修改和优化。该示例代码假设您使用了STM32F4系列芯片和BLE模块,且您已经熟悉了BLE协议栈和STM32的编程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值