一、环境配置:
哔哩哔哩搜索WIN10-idf,手把手教学,版本可能有点低,但大同小异。
不相信看完这个视频还有人不会Win10搭建ESP-IDF环境_哔哩哔哩_bilibili
二、以一个蓝牙例程为基准
这里以
Espressif\frameworks\esp-idf-v5.0.1\examples\bluetooth\bluedroid\
ble_50\ble50_security_server
为模板,在此基础上添加WiFi事件。
WiFi.c 完成最基础的连接WiFi
#include <wifi.h>
wifi_config_t cfg1;
void wifi_init(void)
{
esp_netif_init(); // 用于初始化tcpip协议栈
esp_event_loop_create_default(); // 函数用于创建一个默认的事件循环
esp_netif_create_default_wifi_sta(); // 创建wifi sta
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); // 用于获取wifi的默认配置
esp_wifi_init(&cfg); // 用于初始化wifi
esp_wifi_set_config(WIFI_IF_STA, &cfg1); // 设置wifi参数;
esp_wifi_set_mode(WIFI_MODE_STA); // 配置wifi工作模式
esp_wifi_start();//开启wifi
esp_wifi_connect();//连接WiFi
}
WiFi.h
#include <esp_event.h>
#include <esp_wifi.h>
#include <esp_log.h>
#include <esp_netif.h>
#include <esp_netif_ip_addr.h>
#include <nvs_flash.h>
#include <string.h>
extern void wifi_init(void);
ble50_sec_gatts_demo.c 找到里面的gatts_profile_event_handler函数,处理事件;找到里面的从客户端写事件
extern wifi_config_t cfg1;//定义WiFi参数结构体为全局
...
case ESP_GATTS_WRITE_EVT:
if (param->write.len == 4)//wifi账号为4位
{
bzero(&cfg1.sta, sizeof(cfg1.sta));
memcpy(cfg1.sta.ssid, param->write.value, param->write.len);
ESP_LOGI("WIFI", "ssid:%s", cfg1.sta.ssid);
esp_wifi_disconnect();
}
if (param->write.len == 8)//密码为8位
{
memcpy(cfg1.sta.password, param->write.value, param->write.len);
ESP_LOGI("WIFI", "password:%s", cfg1.sta.password);
wifi_init();
}
break;
至此,就能用蓝牙客户端配置输入WiFi的ssid和password,连接上热点。
可以借助微信小程序 谷雨蓝牙 测试。