目录

  • 开发环境
  • 工程代码
  • 操作过程
  • 程序结构
  • 代码调试
  • Notice:


开发环境

esp-idf:v4.3-beta3

开发环境搭建以及使用参考链接:
ESP-IDF开发环境搭建

工程代码

链接:BluFi工程代码 提取码:axke
调试软件——EspBluFi
软件下载链接:EspBluFi(for android or IOS)

操作过程

程序结构

(1)四个事件处理
1)wifi部分的事件处理

static void wifi_event_handler(void* arg, esp_event_base_t event_base,
                                int32_t event_id, void* event_data)

设置WiFi模式(STA模式、AP模式以及STA/AP模式);
连接WiFi;
WiFi断开重连处理;

2)netif部分的事件处理

static void ip_event_handler(void* arg, esp_event_base_t event_base,
                                int32_t event_id, void* event_data)

获取网络IP地址,完成IP接口搭建(默认IO口);
更多netif功能介绍与使用参考链接:ESP-NETIF

3)blufi配网部分的事件处理(此过程事件的处理均按照收到的请求作相应的功能处理,可按照个人需求进行修改)

static void example_event_callback(esp_blufi_cb_event_t event, esp_blufi_cb_param_t *param)

完成blufi功能初始化,设置 设备名称(Device Name) 并发送特定的 adv data 广播;

  • 处理deinit配置事件;
  • 连接Blufi Ble,并设备进入安全模式;
  • 设置ble断开重连;
  • 设置WiFi进入运行模式——op_mode;
  • 设置断开核心板原有的WiFi连接,并连接指定WiFi;
  • 断开当前WiIFi连接到的AP;
  • 上报错误信息;
  • 获取WiFi状态信息,包括:WiFi当前模式、以及是否连接成功;
  • 关闭blufi的gatt服务连接;
  • 设置核心板进入STA模式,获取目标AP的bssid;
  • 设置核心板进入STA模式,获取目标AP的WiFi账号;
  • 设置核心板进入STA模式,获取目标AP的WiFi密码;
  • 设置核心板进入soft AP模式,获取AP自定义账号;
  • 设置核心板进入soft AP模式,获取AP自定义密码;
  • 设置核心板soft AP模式下最大可连接设备数量;
  • 设置核心板soft AP模式下进入认证模式;
  • 设置核心板soft AP模式下的通讯通道;
  • 获取扫描到的空中WiFi账号、通信通道以及站点MAC地址;
  • 将接收到的数据打印出来;

相关事件标志位的含义可参考定义文件:

esp-idf-v4.3-beta3\components\bt\host\bluedroid\api\include\api\esp_blufi_api.h

esp32怎么获取蓝牙状态 esp32蓝牙配置wifi_核心板


4)ble网关事件处理

static void example_gap_event_handler(esp_gap_ble_cb_event_t event, 
										esp_ble_gap_cb_param_t *param)

用于当adv data数据报组装完成以后发送adv data广播
(2)主程序

  1. 初始化WiFi;
  2. 初始化蓝牙控制器;
  3. 使能蓝牙控制器;
  4. 初始化bluedroid;
  5. 使能bludroid;
  6. 获取蓝牙地址;
  7. 获取blufi版本号;
  8. 创建蓝牙网关处理事件;
  9. 创建blufi事件;

更多blufi配网功能函数的介绍参考文档:BLUFI API

代码调试

工程代码烧录完成以后,打开EspBluFi软件,选中核心板蓝牙名称(BLUFI_DEVICE_NAME),本例程的设备名称为“ESP32C3”,进入配置界面,点击“连接”;

esp32怎么获取蓝牙状态 esp32蓝牙配置wifi_esp32怎么获取蓝牙状态_02


界面显示连接成功且打印蓝牙信号强度等信息之后,选中“配网”,输入本地WiFi账号与密码,点击确定,待板子连接上WiFi之后,将反馈WiFi各项状态信息;

esp32怎么获取蓝牙状态 esp32蓝牙配置wifi_核心板_03


整个调试过程,开发板数据接收情况如下:

esp32怎么获取蓝牙状态 esp32蓝牙配置wifi_初始化_04

Notice:

该工程编译完成的bin文件过大,esp-idf的默认分区表中user区域不够,因此在编译的是将会报错,信息如下:

esp_image: Image length *** doesn’t fit in partition length 1048576

此时,要在工程目录下重新创建一个新的分区表文件:partitions.csv(默认名称)
表中填入如下内容:

# Name,   Type, SubType, Offset,   Size, Flags
# Note: if you change the phy_init or app partition offset, make sure to change the offset in Kconfig.projbuild
nvs,      data, nvs,     ,        0x4000,
otadata,  data, ota,     ,        0x2000,
phy_init, data, phy,     ,        0x1000,
ota_0,    app,  ota_0,   ,        0x180000,
fctry,    data, nvs,     ,        0x4000

保存成功以后,在配置开发板信息的时候,选择分区表为用户分区表,操作如下:

esp32怎么获取蓝牙状态 esp32蓝牙配置wifi_核心板_05


回到主配置界面,选择“component config

esp32怎么获取蓝牙状态 esp32蓝牙配置wifi_核心板_06


最后,输入“S”保存,退出配置界面,然后编译烧录。

esp32怎么获取蓝牙状态 esp32蓝牙配置wifi_事件处理_07