这个实验的功能演示 ESP32 STA 功能,连接到一个真实存在的 wifi 热点。 这个实验的代码为工程“4_2_wifi_STA”目录。
4.2.1. 实验内容
(1) 学习 STA 连接方法
(2) 学习 STA 的静态 IP 设置方法
(3) 掌握 wifi 状态机机制
4.2.2. STA 简介
TA 站点,每一个连接到无线网络中的终端(如笔记本电脑、手机及其它可以联网的用户设备)都可称为 一个站点。站点(STA,Station)在无线局域网(WLAN,WirelessLocalAreaNetworks)中一般为客户端,可以是装有无线 网卡的计算机,也可以是有 WiFi 模块的智能手机,可以是移动的,也可以是固定的。
4.2.3. ESP32 wifi 编程相关
流程图,状态机和使用的函数,请参考 4.1.3,实际使用的时候只是参数不一样。
4.2.4. 代码讲解
使用 vs code 展开本实验的工程目录,如下图:
我们的这个实验,启动 STA 连接的代码是写在源文件 app_main.c 里,components 文件夹是关于 LCD
的驱动代码,LCD 显示屏在 3.4 章有比较详情的讲解。
WifiSTA 初始化
STA 的初始化和 AP 类似,部分的参数不一样,不一样的地方全部使用蓝色的字标出来。
//启动 WIFI 的 STA
void wifi_init_sta()
{
tcpip_adapter_init();//tcp/IP 配置
#ifdef ESP32_STATIC_IP
//静态 IP 部分 tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA); tcpip_adapter_ip_info_t ipInfo;
inet_pton(AF_INET,DEVICE_IP,&ipInfo.ip); inet_pton(AF_INET,DEVICE_GW,&ipInfo.gw); inet_pton(AF_INET,DEVICE_NETMASK,&ipInfo.netmask); tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_STA,&ipInfo);
#endif
ESP_ERROR_CHECK(esp_event_loop_init(event_handler, NULL));//设置 wifi 事件回调函数
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init(&cfg));//wifi 默认初始化
代码里的 DEFAULT_SSID 和 DEFAULT_PWD 是要连接的 wifi 的用户名和密码,在 app_main.c 最开头有定义:
#define DEFAULT_SSID "TP_LINK"
#define DEFAULT_PWD "12345678"
代码里的宏定义 ESP32_STATIC_IP,如果定义这个宏表示使用静态 IP,静态的 IP 必须和连接的 AP 的网
段一致。在 app_main.c 最开头有定义:
//需要设置静态 IP,必须知道连接的 WIFI 的网段
//#define ESP32_STATIC_IP //是否使用静态 IP
#ifdef ESP32_STATIC_IP
//IP 地址。
#define DEVICE_IP "192.168.1.199"
//网关地址
#define DEVICE_GW "192.168.1.1"
//掩码
#define DEVICE_NETMASK "255.255.255.0"
#endif
(3) Wifi 回调函数状态机处理
STA 模式和 AP 模式处理的事 ID 不一样。
static esp_err_t event_handler(void *ctx, system_event_t *event)
{
switch (event->event_id)
{
case SYSTEM_EVENT_STA_START://STA 启动 printf("sta start.\r\n");
//修改设备的名字
ESP_ERROR_CHECK(tcpip_adapter_set_hostname(TCPIP_ADAPTER_IF_STA, "sz-yy.taobao.com")); esp_wifi_connect();//开始连接 wifi
lcd_display(1); break;
case SYSTEM_EVENT_STA_CONNECTED://STA 已连接上 printf("SYSTEM_EVENT_STA_CONNECTED.\r\n"); break;
case SYSTEM_EVENT_STA_GOT_IP://STA 取得 IP
//通过 LOG 输出 IP 信息
printf("\r\nip:%s.\r\n",ip4addr_ntoa(&event->event_info.got_ip.ip_info.ip)); printf("gw:%s.\r\n",ip4addr_ntoa(&event->event_info.got_ip.ip_info.gw)); printf("netmask:%s.\r\n",ip4addr_ntoa(&event->event_info.got_ip.ip_info.netmask));
//保存 IP 信息用于 LCD 显示
s_ip_addr = event->event_info.got_ip.ip_info.ip;//保存 IP s_gw_addr = event->event_info.got_ip.ip_info.gw;//保存网关
s_netmask_addr = event->event_info.got_ip.ip_info.netmask;//保存掩码
//LCD 显示 lcd_display(2); break;
case SYSTEM_EVENT_STA_DISCONNECTED://STA 断开连接 esp_wifi_connect();//开始连接 wifi lcd_display(1);
break; default:
return ESP_OK;
}
4.2.5. 实验过程
配置下载串口、波特率、编绎和程序下载的详细过程请往回看 3.1.4,在这个实验里都是一笔带过。 (1) 请先打开 app_main.c,修改要连接 SSID 和密码,修改为真实存在的 wifi 热点:
(2) 把开发板通过 USB 线接到电脑上,通过设备管理器查看生成的串口。开发板在我们演示电脑上生 成的是 COM3。
(3) 在 menuconfig 菜单里配置下载程序串口。提供的例程配置的串口是 COM3,波特率为 921600。
(4) 通过 make all 编绎工程。
(5) 当编绎通过之后,使用命令 make flash 把程序下载到开发板上。或者参考 2.3.2 节,使用工具 下载。
(6) 按下开发板的复位键,让程序运行起来,观察显示屏可以看到连接的信息。
(7) 使用串口工具打开开发板生成的串口,默认的波特率是 115200,观察串口工具的输出。串口工具在目录:.\开发软件\串口工具-sscom32.rar。