目录
开发环境
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
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)主程序
- 初始化WiFi;
- 初始化蓝牙控制器;
- 使能蓝牙控制器;
- 初始化bluedroid;
- 使能bludroid;
- 获取蓝牙地址;
- 获取blufi版本号;
- 创建蓝牙网关处理事件;
- 创建blufi事件;
更多blufi配网功能函数的介绍参考文档:BLUFI API
代码调试
工程代码烧录完成以后,打开EspBluFi软件,选中核心板蓝牙名称(BLUFI_DEVICE_NAME),本例程的设备名称为“EP32C3”,进入配置界面,点击“连接”;
界面显示连接成功且打印蓝牙信号强度等信息之后,选中“配网”,输入本地WiFi账号与密码,点击确定,待板子连接上WiFi之后,将反馈WiFi各项状态信息;
整个调试过程,开发板数据接收情况如下:
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
保存成功以后,在配置开发板信息的时候,选择分区表为用户分区表,操作如下:
回到主配置界面,选择“component config”
最后,输入“S”保存,退出配置界面,然后编译烧录。