ATK BLE 01低功耗蓝牙配对调试经验

本文详细介绍了如何配置正点原子的低功耗蓝牙模块(BLE01或BLE02),包括确定主从模块、配置MAC地址及配对过程。通过实际操作步骤,帮助读者掌握BLE模块的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

首先配置主机

配置从机

配对

最终效果 

BLE调试心得


首先看好哪个是主机,哪个是从机,正点原子的低功耗蓝牙模块(BLE01或BLE02)是主从一体的,任何一个模块都可以配置为主模块或从模块。

我们将两个模块都通过USB转TTL与电脑相连。

主机MASTER的指示灯闪烁快,从机SLAVE的指示灯闪烁慢。

首先配置主机

我们先查看一下查看主机的MAC地址

打开正点原子提供的BLE串口调试助手后,首先点击扫描波特率

然后点击MAC地址

可以看到,主机的MAC地址为

B9AC4A4F3C0F

如果这个时候主机还不是主机模式,那就点击主机模式

配置从机

接下来配置从机,再次打开正点原子提供的BLE串口调试助手,打开对应的串口,首先我们仍然是扫描波特率

查看从机的MAC地址

可以看到,MAC地址为

B9AC4A3FEBDA

设置为从模块

配对

再次打开主机,这里设置一下

主机输入AT+SCAN并选择,记得命令以回车结尾

找到从机的MAC地址,并输入对应的设备号,回车即可

最后,两个模块都重新插拔即可

再次上电时,两个模块自动连接(重新上电意味着BLE模块从配置模式退出,上电RESET进入透传模式)

最终效果 

此时两个BLE模块的黄色指示灯都是常亮的,没有闪烁,说明此时模块已连接

BLE调试心得

  • 调试前首先保证桌面整洁,各类元器件归位。不比我们大家都熟悉的HC05,06这些现有的模块,我们去调试一个新的BLE模块,一定要做好打持久战的准备。桌面乱糟糟地只会影响工作效率!
  • BLE和HC05模块有很大的区别,首先HC05可以直接与电脑自带的蓝牙模块相连,但是BLE模块不行,BLE只能与另一个BLE模块相连,那个模块再通过USB转TTL连接到电脑。手机方面,HC05和BLE模块都是可以直接与手机相连的。
  • 正常工作时,BLE模块的WKUP和STD两个引脚是输出高电平的,我使用的MiniF103 STM32开发板,主控芯片STM32F103RCT6,将他的VCC GND RX TX与BLE模块的对应4条线相连,也可以完成正常的串口操作,配对成功后在下位机代码处理方面,BLE与HC05、USB转串口直连没有区别。
  • 调试BLE模块,我最大的感受就是说明书上的未必对,我也遇到了很多的问题,一定要自己多试,自己多想,多看说明书但不迷信说明书,多问正点原子的技术客服,然后一定要冷静下来综合思考!正点原子的技术客服只能告诉你思路,不能告诉你解决方案,以上的总结全部是我自己归纳的,一条BLE模块说明书上没有的配对包括使用的方法。
### ESP32-C3 BLE Mesh 网络配置教程 #### 设备角色定义 为了建立一个BLE Mesh网络,至少需要两个ESP32-C3设备分别担任Provisioner和Node的角色。Provisioner负责初始化网络并将其他节点加入其中;而Node则是接受管理并参与数据交换的一员。 #### 软件环境搭建 确保已安装最新版本的Espressif IoT Development Framework (ESP-IDF),并且能够正常工作于Windows操作系统之上[^3]。对于项目创建而言,推荐采用CMake工具链来加速编译过程,这相较于传统的makefile方式有着显著的速度优势。 #### 配置文件调整 进入`menuconfig`界面完成必要的选项设定,比如开启BLE Mesh协议栈支持等功能特性。此步骤至关重要,它决定了硬件资源分配以及软件行为模式的选择。 #### 初始化代码片段 以下是用于启动BLE Mesh服务的基础框架: ```c #include "nvs_flash.h" #include "esp_bt.h" #include "esp_ble_mesh_provisioning_api.h" #include "esp_ble_mesh_networking_api.h" void app_main(void){ nvs_flash_init(); esp_err_t ret; /* Initialize the Bluetooth NVS */ ret = esp_bt_controller_mem_release(ESP_BT_MODE_CLASSIC_BT); if(ret != ESP_OK) { printf("Error initializing BT controller\n"); return; } esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT(); ret = esp_bt_controller_init(&bt_cfg); if(ret != ESP_OK) { printf("BT Controller init failed\n"); return; } // ...继续添加更多初始化逻辑... } ``` 这段程序首先完成了NVS闪存区初始化操作,并释放了经典蓝牙占用的空间以便给低功耗蓝牙让位。接着按照默认参数表设置了控制器实例化条件。 #### Provisioner端核心函数调用 当扮演Provisioner身份时,需执行如下关键动作序列以引导新成员入网: ```c static void provision_device(const uint8_t *uuid, const char *device_name){ esp_ble_mesh_client_model_t root_models[] = { /* 客户端模型数组 */ }; esp_ble_mesh_elem_t elements[] = {{0, ARRAY_SIZE(root_models), root_models}}; esp_ble_mesh_comp_t composition = {elements}; esp_ble_mesh_node_t node_info = {/* 填充目标节点信息结构体*/}; esp_ble_mesh_provisioner_add_unprov_dev(uuid, device_name, strlen(device_name), &node_info); // 发送邀请消息给未认证过的装置尝试将其纳入当前mesh体系内 } // 注册provision成功后的回调处理方法 static void prov_complete(uint16_t net_idx, uint16_t addr, uint8_t status){ if(status == ESP_BLE_MESH_PROV_SUCCESS){ printf("Device has been successfully provisioned!\n"); }else{ printf("Failed to provision device with error code:%d\n",status); } } ``` 上述代码展示了怎样向指定UUID对应的候选对象发出接纳请求,同时指定了成功的响应机制。 #### Node端主要流程控制 针对充当普通节点的情况,则应关注自身的定位声明及其属性上报环节: ```c #define ELEMENT_COUNT 1 #define MODEL_COUNT_PER_ELEMENT 2 const esp_ble_mesh_model_pub_t pub = {/* 出版物设置 */ }; /* Server Models */ const esp_ble_mesh_gen_onoff_srv_t on_off_server = {/* 开关服务器模型实例化 */ }; esp_ble_mesh_model_t models[ELEMENT_COUNT][MODEL_COUNT_PER_ELEMENT]={ [{ESP_BLE_MESH_MODEL_GEN_ONOFF_SRV(&on_off_server)}, {ESP_BLE_MESH_MODEL_CFG_CLI()}, ] }; esp_ble_mesh_elem_t element_list[ELEMENT_COUNT]= {[0]={.model_count=ARRAY_SIZE(models[0]), .models=models[0]}}; esp_ble_mesh_comp_t comp={ .element_count=ELEMENT_COUNT,.element_list=element_list }; void setup_as_node(){ esp_ble_mesh_register_prov_callback(prov_complete); // 设置预验证完毕通知监听器 esp_ble_mesh_set CompositionData(&comp); // 提交组件描述符记录 esp_ble_mesh_start_provisioning(); // 正式激活成为可被探测到的新成员 } ``` 这里说明了一个典型的节点如何准备自己供外部访问,并准备好接收来自Provisioner的消息指令。 #### 数据传输实践案例 最后给出一段基于Generic OnOff Model实现灯控效果的小例子: ```c extern esp_ble_mesh_gen_onoff_srv_t my_light; void handle_generic_onoff_get(esp_ble_mesh_model_t *model, esp_ble_mesh_msg_ctx_t *ctx, esp_ble_mesh_gen_onoff_get_t *msg){ esp_ble_mesh_gen_onoff_status_t rsp={my_light.onoff_state}; esp_ble_mesh_send_rsp(model, ctx, ESP_BLE_MESH_GENERIC_ONOFF_STATUS_MSG,&rsp,sizeof(rsp)); } void handle_generic_onoff_set(esp_ble_mesh_model_t *model, esp_ble_mesh_msg_ctx_t *ctx, esp_ble_mesh_gen_onoff_set_t *msg){ my_light.onoff_state=msg->onoff; update_physical_switch(my_light.onoff_state); // 更新实际开关状态 handle_generic_onoff_get(model,ctx,NULL); // 反馈变更结果给发送方 } ``` 通过这些接口可以轻松模拟灯具类产品的远程操控场景。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值