一、AP
概述:AP 是 (Wireless) AccessPoint 的缩写,即 (无线) 访问接入点。简单来讲就像是无线路由器一样,设备打开后进入 AP 模式,在手机的网络列表里面,可以搜索到类似TPLINK_XXX 的名字(SSID)。ESP32 创建的 AP 热点,最多可以被 4 个 STA 设备连接,我们的手机和笔记本电脑均可连接到创建的AP 热点。
二、编程流程
结合官方API查阅
- 初始化 TCP/IP 协议栈使用 wifi、有线、网络编程前必须先调用这个函数进行初始化。
tcpip_adapter_init();
#ifdef ESP32_STATIC_IP
ESP_ERROR_CHECK(tcpip_adapter_dhcps_stop(TCPIP_ADAPTER_IF_AP));
tcpip_adapter_ip_info_t ipInfo;
inet_pton(AF_INET,DEVICE_IP,&ipInfo.ip); //ip地址
inet_pton(AF_INET,DEVICE_GW,&ipInfo.gw); //网关
inet_pton(AF_INET,DEVICE_NETMASK,&ipInfo.netmask);//子网淹码
ESP_ERROR_CHECK(tcpip_adapter_set_ip_info
(TCPIP_ADAPTER_IF_AP,&ipInfo));
tcpip_adapter_dhcps_start(TCPIP_ADAPTER_IF_AP)
;#endif
- 设置wifi事件回调函数,这部分没开源,知道设置了创建任务,会自动循环检测回调函数事件,每个事件对应处理在回调函数中编写,每个事件又会返回一个值作为函数返回值,整个函数是作为形参传递给wifi事件回调函数
`ESP_ERROR_CHECK
(esp_event_loop_init(event_handler, NULL));
//设置wifi事件回调函数
- 初始化AP
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));//wifi默认初始化
wifi_config_t wifi_config = {
.ap = {
.ssid = DEFAULT_SSID,
.password = DEFAULT_PWD,
.ssid_len = 0,
.max_connection = 1,//最多只能被4个station同时连接
.authmode = WIFI_AUTH_WPA_WPA2_PSK, },
};
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP));//设置wifi工作模式为AP
ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_AP,
&wifi_config));//配置AP参数
ESP_ERROR_CHECK(esp_wifi_start()); //wifi启动
整个流程完成了AP初始化
然后编写回调函数
static esp_err_t event_handler(void *ctx, system_event_t *event){
switch (event->event_id)
{ case SYSTEM_EVENT_AP_START://AP启动 {
tcpip_adapter_ip_info_t ipInfo;
printf("\nwifi_softap_start\n");
//修改设备名字,可以不写
ESP_ERROR_CHECK(tcpip_adapter_set_hostname(TCPIP_ADAPTER_IF_AP, "yueweidianzi"));
ESP_ERROR_CHECK(tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_AP,&ipInfo));
//取出设备的IP,网关和掩码 s_ip_addr=ipInfo.ip;
s_gw_addr=ipInfo.gw;
s_netmask_addr=ipInfo.netmask; //显示
lcd_display(2); }
break;
case SYSTEM_EVENT_AP_STACONNECTED://有设备连接
printf("station:"MACSTR" join, AID=%d.\r\n",
MAC2STR(event->event_info.sta_connected.mac),
event->event_info.sta_connected.aid);
break;
case SYSTEM_EVENT_AP_STADISCONNECTED://连接的设备断开
printf("station:"MACSTR"leave, AID=%d.\r\n",
MAC2STR(event->event_info.sta_disconnected.mac), event->event_info.sta_disconnected.aid);
break;
default:
break;
}
return ESP_OK;
}