news 2026/4/23 9:57:11

工业场景实战案例--wifi联网

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
工业场景实战案例--wifi联网

我是嵌入式学习菌,一名热爱学习的嵌入式工程师

关注我,一起变得更加优秀!

嵌入式学习菌

CSDN、B 站视频号同名同步分享嵌入式学习点滴~ 无捷径唯有坚持,愿与你并肩稳步前行!

17篇原创内容

公众号

下面结合工业场景实战案例(ESP32 作为工厂网关,STA 模式连接车间路由器,DHCP 自动获取 IP,联网后上报设备在线状态),把 STA 联网流程拆成「实际操作 + 代码触发 + 现象 / 日志」的形式,让流程更易理解:

场景前提

路由器信息:SSID = Factory_Router,密码 = Factory@123,开启 DHCP(自动分配 IP);

ESP32 功能:STA 模式连路由器,联网后向上位机发送 “设备在线” 的工业协议包;

核心状态机:wifi_sta_wait(初始)→ wifi_sta_connect(连接中)→ wifi_sta_GotIP(联网成功)。

步骤1:前置配置(联网前的准备)

代码操作(主函数 / 初始化函数中):

// 1. 初始化WiFi配置结构体 wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init(&cfg)); // 初始化WiFi驱动 // 2. 配置STA模式参数(路由器SSID/密码) wifi_config_t wifi_sta_config = { .sta = { .ssid = "Factory_Router", // 车间路由器SSID .password = "Factory@123", // 路由器密码 .threshold.authmode = WIFI_AUTH_WPA2_PSK, // 加密方式 }, }; ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); // 设置为STA模式 ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_sta_config)); // 写入STA配置

现象:无明显日志,仅完成 WiFi 底层驱动和参数初始化,状态机初始为 wifi_sta_wait。

步骤2:启动STA →触发WIFI_EVENT_STA_START

// 启动WiFi(STA模式) ESP_ERROR_CHECK(esp_wifi_start()); 代码触发: esp_wifi_start() 执行后,ESP-IDF 自动触发 WIFI_EVENT_STA_START 事件; 回调函数 wifi_event_handler 捕获该事件,执行: case WIFI_EVENT_STA_START: wifi_set_state(wifi_sta_connect); // 状态机切换为“连接中” break;

现象 / 日志:

I (12345) wifi: wifi firmware version: xxxx

I (12346) wifi: config NVS flash: enabled

I (12347) wifi: config nano formating: disabled

I (12357) wifi_sta: start wifi sta success

W (12360) SCode: wifiStatus:0 (wait) → 1 (connect) // 自定义状态日志

核心意义:WiFi 硬件启动完成,状态机标记 “准备连接路由器”,接下来可以发起连接请求。

步骤3:发起连接→触发WIFI_EVENT_STA_CONNECTED

代码操作:

// 向路由器发起连接请求 ESP_ERROR_CHECK(esp_wifi_connect());

代码触发:

ESP32 与路由器完成 802.11 协议层握手(验证 SSID / 密码),触发 WIFI_EVENT_STA_CONNECTED 事件;

回调函数捕获该事件,执行:

​​​​​​​

case WIFI_EVENT_STA_CONNECTED: wifi_info.connectCnt = 0; // 重置连接失败计数 UTIL_LOG_I("WIFI","WIFI CONNECTED"); // 打印连接成功日志 if(!conf_sys.wifi.dhcp) { // 本例是DHCP模式,此分支不执行 wifi_set_static_ip(arg); } break;

现象 / 日志:

I (15678) wifi: new:<6,0>, old:<1,0>, ap:<255,255>, sta:<6,0>, prof:1

I (15679) wifi: state: init -> auth (b0)

I (15684) wifi: state: auth -> assoc (0)

I (15689) wifi: state: assoc -> run (10)

I (15700) WIFI: WIFI CONNECTED // 自定义Info日志

W (15702) SCode: WiFi已连接路由器,等待DHCP分配IP...

核心意义:ESP32 与路由器 “物理连接成功”,但此时还没有 IP 地址,无法访问网络(比如 ping 不通网关),需等待 DHCP 分配 IP。

步骤4:DHCP获取IP →触发IP_EVENT_STA_GOT_IP

底层操作:ESP32 内置的 DHCP 客户端向路由器发送 “IP 请求包”,路由器分配 IP(比如 192.168.1.100),触发 IP_EVENT_STA_GOT_IP 事件。

代码触发:回调函数捕获该事件,执行核心逻辑:

case IP_EVENT_STA_GOT_IP: { IP_EVENT_STA_GOT_IP_FUN(event_data); // 解析IP信息并打印 wifi_set_state(wifi_sta_GotIP); // 状态机切换为“联网成功” wifi_module_GetMac(DS_Sys.MAC,wifi_type_sta); // 获取MAC地址 // 业务逻辑:向上位机上报“设备在线” Scode_Send_Write_Pkg("DeviceOnline"); } break;

现象 / 日志:

I (16890) esp_netif_handlers: sta ip: 192.168.1.100, mask: 255.255.255.0, gw: 192.168.1.1

I (16891) IP_EVENT: STA GOT IP:192.168.1.100 // 自定义IP日志

W (16895) SCode: wifiStatus:1 (connect) → 2 (GotIP)

W (16900) SCode: Send:[68][30][30][20][31][32][33][68][01][05][00][01][01] // 上报在线状态的协议包

W (16920) SCode: Rcv:<68><30><30><20><31><32><33><68><01><05><00><01><00> // 上位机应答“接收成功”

核心意义:ESP32 拿到可用的 IP 地址,真正实现联网成功,可以执行所有网络操作(ping 外网、MQTT 连接、TCP 通信等)。

步骤5:联网成功后的业务落地

此时状态机为 wifi_sta_GotIP,可以执行工业场景的核心业务:

例 1:通过 TCP 连接工厂服务器(192.168.1.200:8080),上报设备运行数据;

例 2:订阅 MQTT 主题 factory/device/status,接收上位机的控制指令;

例 3:同步 NTP 网络时间(比如日志中出现 Current Time: 2025-12-11 16:15:34)。

流程总结(通俗版)

就像“手机连家里 WiFi” 的过程:

手机设置里输入 WiFi 名称 / 密码(对应 ESP32 配置 STA 参数);

点击“连接”(对应esp_wifi_start())→ 手机提示 “正在连接”(对应wifi_sta_connect);

手机显示“已连接”(对应WIFI_EVENT_STA_CONNECTED),但此时可能还没网(没 IP);

路由器给手机分配 IP(对应IP_EVENT_STA_GOT_IP)→ 手机右上角出现 “WiFi 图标 + 网速”(对应wifi_sta_GotIP),能刷视频 / 上网(对应 ESP32 上报数据)。

这个流程的核心是「事件驱动」:不用轮询“是否连接成功 / 是否有 IP”,而是等 ESP-IDF 主动触发事件,回调函数按需处理,这也是工业级应用的核心设计(高效、低资源占用)。

小编也为零基础小白整理了一份嵌入式学习资料大全。

思维导图、C语言学习、单片机、学习笔记、实例项目……你需要的知识都在这儿!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:56:47

S7-1500在洁净空调控制系统中的实战应用

西门子S7-1500暖通空调制药厂洁净空调PLC程序案例&#xff0c;硬件采用西门子1500CPUET200SP接口IO模块&#xff0c;HMI采用西门子触摸屏。具体为制药厂BMS&#xff08;洁净空调自控系统&#xff09;医药洁净室程序&#xff0c;程序结构采用SCL编程。 有详细注释&#xff0c;很…

作者头像 李华
网站建设 2026/4/23 12:57:34

精通开关电源设计(第2版)资源下载

精通开关电源设计&#xff08;第2版&#xff09;资源下载 【免费下载链接】精通开关电源设计第2版资源下载 本仓库提供经典书籍《精通开关电源设计&#xff08;第2版&#xff09;》的资源下载。本书由浅入深地介绍了开关电源设计的各个方面&#xff0c;从基础的电感知识到复杂的…

作者头像 李华
网站建设 2026/4/23 13:03:21

开关电源设计实战指南:从理论到工程应用的完整解决方案

还在为复杂的开关电源设计而苦恼吗&#xff1f;面对电感参数计算、电路拓扑选择、噪声抑制等关键问题&#xff0c;你是否常常感到无从下手&#xff1f;现在&#xff0c;一本被誉为电源设计领域经典著作的《精通开关电源设计&#xff08;第2版&#xff09;》将为你提供全方位的技…

作者头像 李华
网站建设 2026/4/23 13:02:58

Harmony之路:一多适配之道——响应式布局与资源限定

Harmony之路&#xff1a;一多适配之道——响应式布局与资源限定从单设备到多设备&#xff0c;让应用在手机、平板、智慧屏上都能完美呈现在上一篇中&#xff0c;我们学习了服务卡片的开发技术&#xff0c;让应用能力突破应用边界。现在&#xff0c;我们将深入探讨HarmonyOS的一…

作者头像 李华
网站建设 2026/4/23 10:19:39

RAG系统构建必看:8种文本分块策略全解析,收藏备用!

本文详细解析了RAG系统中的8种文本分块策略&#xff0c;从基础的固定大小、递归分块到前沿的语义分块、代理分块和后置分块。每种策略各有优缺点和适用场景&#xff0c;如固定大小分块适合简单文档&#xff0c;层级分块适合结构化知识库&#xff0c;语义分块和后置分块适合高价…

作者头像 李华
网站建设 2026/4/23 10:17:25

用 Go 像写 Web 一样做桌面应用:完全离线的手机号归属地查询工具

前阵子我做了一个小工具&#xff1a;一个完全离线的手机号归属地查询桌面应用 功能本身其实并不复杂&#xff0c;但在这个过程中&#xff0c;我反而重新认识了一次 用 Go 做桌面应用&#xff0c;其实可以非常像在写一个 Web 项目。 这篇文章不打算讲手机号归属地怎么查&…

作者头像 李华