首页 理论教育 一步步学习设定ESP8266的AP模式

一步步学习设定ESP8266的AP模式

时间:2026-01-26 理论教育 安安 版权反馈
【摘要】:在user_init中,调用ESP8266_AP_Init_JX()用户函数来设置8266AP 模式及其相关参数,如图1-3-9 所示。图1-3-9ESP8266_AP_Init_JX()函数先调用wifi_set_opmode的API 函数。将参数设为2,8266 设置为AP 模式,并且保存到Flash。图1-3-11宏定义这里设置的WiFi 名为ESP8266_YOU,WiFi 密码为YOU123。os_strlenAPI 函数的作用是计算参数字符串的长度。os_printf()API 串口打印8266 的工作模式。调用wifi_get_ip_infoAPI 来获取8266 AP 模式下的IP地址。图1-3-13struct ip_info ST_ESP8266_IP 结构体struct ip_addr ip 为ip 地址,struct ip_addr netmask 为子网掩码,struct ip_addr gw 为网关。

ESP8266 的AP 模式是什么呢?AP 就是Access Point(接入点),由ESP8266 自己开启热点,供别的设备接入,组成一个WiFi 局域网。这些局域网内的数据可以上传、下载。要进行程序设计,那就必不可少地要参考SDK API 参考手册的WiFi 接口章节,里面提供了很多关于WiFi 的API 函数,此处主要讲解关于AP 模式的常用设置。

在user_init(void)中,调用ESP8266_AP_Init_JX()用户函数来设置8266AP 模式及其相关参数,如图1-3-9 所示。

图示

图1-3-9 ESP8266_AP_Init_JX()函数

先调用wifi_set_opmode(0x02)的API 函数。将参数设为2,8266 设置为AP 模式,并且保存到Flash。之后调用wifi_softap_set_config(&AP_Config)API 函数来设置8266 AP模式的相关参数。但这里需要注意,这个API 的参数是AP 参数结构体的指针,所以需要定义一个 AP 参数结构体(struct softap_config AP_Config)。这个结构体包含的成员如图1-3-10 所示。

图示

图1-3-10 struct softap_config 结构体

数组uint8 ssid[32]用来存放WiFi 名称,数组uint8 password[64]用来存放WiFi 密码,uint8 ssid_len 为WiFi 名长度,uint8 channel 为通道号,AUTH_MODE authmode 为加密方式,uint8 ssid_hidden 为是否隐藏 WiFi 名标志,uint8 max_connection 为最大连接数,uint16 beacon_interval 为信标间隔时槽,AP 参数设置就是要把这些变量一一赋值。

通过执行os_memset(&AP_Config, 0, sizeof(struct softap_config))这条语句,将AP 参数结构体全部清零。它是如何实现的呢?首先看一下C 函数库提供的sizeof(),它的作用是返回参数所占空间的大小,是以自己为单位的,它的作用是返回AP 参数结构体所占空间的大小。而os_memset(void *s, int c, size_t n)这个API 的作用是在一段内存块中填充某个指定值,参数void *s 是内存块的指针,参数int c 是填充值,参数size_t n 是填充大小。所以将&AP_Config AP 参数结构体指针作为参数1,0 作为参数2,sizeof(struct softap_config) AP参数结构体的大小作为参数3,这样这条语句就会将AP 参数结构体清零。

os_strcpy(char *s1,char *s2)API 函数的作用是将参数s2 指向的字符串复制到参数s1所指向的地址处。打开宏定义,看一下具体的内容,如图1-3-11 所示。

图示

图1-3-11 宏定义

这里设置的WiFi 名为ESP8266_YOU,WiFi 密码为YOU123。利用这个API,os_strcpy(AP_Config.ssid,ESP8266_AP_SSID)将WiFi 名字符串复制到AP 参数结构体中,存放WiFi名的成员数组。os_strcpy(AP_Config.password,ESP8266_AP_PASS)将WiFi 密码字符串复制到AP 参数结构体中,存放WiFi 密码的数组成员。

os_strlen(ESP8266_AP_SSID)API 函数的作用是计算参数字符串的长度。所以这条语句的作用就是设置WiFi 名的长度。

后面的参数就是一些默认的参数,通道号设置为1,加密模式设为不隐藏WiFi 名,最大连接数设为4,信标间隔石槽设为100 ms,最后调用wifi_softap_set_config(&AP_Config) API来设置8266 AP 模式的相关参数。

【程序1.3.1】在设置完8266AP 模式的相关参数之后,紧接着定义了定时1 s 的软件定时,定时之后通过串口打印8266 的IP 地址后,结束程序。

图示

图示

图示(https://www.xing528.com)

图示

图示

上面程序中的AP 模式设置在这儿就不复述了,我们来看一下在user_init 函数中AP 设置结束后,用软件定时器定时1s 里的定时回调函数void ICACHE_Flash_ATTR OS_Timer_1_cb(void),如图1-3-12 所示。

图示

图1-3-12 定时回调函数

在定时回调函数中调用wifi_get_opmode()API 来查询8266 的工作模式。os_printf()API 串口打印8266 的工作模式。

调用wifi_get_ip_info(SOFTAP_IF,&ST_ESP8266_IP)API 来获取8266 AP 模式下的IP地址。这里需要注意它的参数一必须设为1,这样才能获取到8266AP 模式下的IP 地址;参数二必须是IP 信息结构体指针,所以在回调函数中定义了一个IP 信息结构体struct ip_info ST_ESP8266_IP。结构体如图1-3-13 所示。

图示

图1-3-13 struct ip_info ST_ESP8266_IP 结构体

struct ip_addr ip 为ip 地址,struct ip_addr netmask 为子网掩码,struct ip_addr gw 为网关。这样就获取了8266 AP 模式下的IP 地址。ST_ESP8266_IP.ip.addr 就是8266 的IP 地址,它是一个32 位的二进制数据,在这里将它转化为点分十进制的形式,之后通过串口窗口打印,并且通过OLED 显示8266 的IP 地址。这里需要注意,8266 在AP 模式下是默认开启DHCP,如果我们并没有设置IP,8266 的IP 地址默认是192.168.4.1。

又通过调用wifi_softap_get_station_num()API 来查询接入此WiFi 的设备数量,并将其打印出来。

运行程序,将程序下载到ESP8266。通过串口助手和开发板上的OLED 屏幕把相关的网络信息打印出来,如图1-3-13、图1-3-14 所示。8266 当前的工作模式是AP 模式,它的IP地址是192.168.4.1。当前接入此WiFi 的设备数量是0。

图示

图1-3-14 打印网络信息

将笔记本计算机接入到8266 创建的WiFi 局域网,连接输入密码YOU123。此时接入此WiFi 的设备数量变成1,如图1-3-15 所示,也就是计算机已经接入8266 创建的WiFi 局域网当中。这样ESP866 成功设为AP 模式,并且相关参数也设置成功。在这里需要提醒一下,虽然我们调用了API 来将8266 设为AP 模式,并设置8266AP 模式的相关参数,这个函数是在user Init 函数中执行的,但是它并不是一直实现我们想要的功能的。也就是说即使我们这里调用的API,也不会立即执行AP 模式的相关设置。

图示

图1-3-15 接入此WiFi 的设备数量变成1

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈