news 2026/4/16 5:29:53

工业场景实战案例--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/12 10:19:01

ATI显卡驱动下载与安装方法 新手必看指南

ATI 显卡&#xff08;现归属于 AMD&#xff09;因其良好的图形处理能力和性价比&#xff0c;被广泛应用于办公电脑、设计工作站及游戏设备中。显卡驱动作为连接硬件与系统的重要桥梁&#xff0c;若版本不匹配或安装异常&#xff0c;容易导致分辨率异常、画面卡顿甚至系统崩溃。…

作者头像 李华
网站建设 2026/4/7 6:02:26

《Vue 项目路由 + Layout 的最佳实践》

[toc] 前言&#xff1a;路由乱&#xff0c;本质是“页面结构没设计” 很多项目后期路由文件看起来像这样&#xff1a; 一个文件 1000 行Layout 套 Layout新页面不知道该放哪 说白了就是一句话&#xff1a;路由和页面结构是“边写边凑”的。一、Layout 的职责一定要收紧 一句话…

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

一文搞懂鲸鱼优化算法Whale Optimization Algorithm(WOA)!!!(核心原理+数学模型+代码实战+实际应用)

文章目录 文章脉络 1 生物灵感与核心思想 1.1 座头鲸的泡泡网捕食法 1.2 从自然行为到优化算法 2 算法流程与数学模型 2.1 算法前提与初始化 2.2 数学模型与核心公式 1. 包围猎物机制 2. 气泡网攻击(螺旋更新位置) 3. 搜索猎物(全局探索) 2.3 算法完整流程 3 Python代码实现…

作者头像 李华
网站建设 2026/4/8 13:38:51

2026年度必藏!国内TOP9免费免版权可商用音频素材网站排行榜,个人/企业首选,彻底规避侵权风险,速看宝藏清单!

在视频制作、广告宣传、内容创作等场景中&#xff0c;音频素材是不可或缺的核心元素。与图片、字体等素材相同&#xff0c;音频作品受版权法保护&#xff0c;未经授权使用&#xff08;无论商用还是非商用&#xff09;都可能引发侵权纠纷。免费下载不等于免费使用&#xff0c;付…

作者头像 李华
网站建设 2026/4/13 17:37:47

结构光三维视觉与激光条纹提取方法,以及高斯模拟

结构光三维视觉与激光条纹提取方法总结第一部分&#xff1a;结构光三维视觉技术基础核心概念解析什么是结构光三维视觉&#xff1f;结构光&#xff1a;有特定几何形状的光&#xff08;这里指激光投射的平面光束/条纹&#xff09;三维视觉&#xff1a;获取物体表面的三维几何信息…

作者头像 李华
网站建设 2026/4/15 12:24:12

轻松搞定Apache Doris JDBC连接:Java应用集成实战指南

轻松搞定Apache Doris JDBC连接&#xff1a;Java应用集成实战指南 【免费下载链接】doris Apache Doris is an easy-to-use, high performance and unified analytics database. 项目地址: https://gitcode.com/gh_mirrors/dori/doris 还在为Java应用如何高效连接Apache…

作者头像 李华