鸿蒙LiteOS RK2206 设备连路由器完整实战(配网+联网验证+网络连通性测试)
B站 配套视频教程【鸿蒙 LiteOS 实战 13】设备连路由器完整实战(配网+联网验证+网络连通性测试)
前言
很多刚入手凌智RK2206鸿蒙开发板的同学,都会卡在三个核心问题:
- 怎么让RK2206自动连接家里路由器WiFi?
- 怎么代码层面判断设备已经连上路由?
- 怎么验证设备真正能上网、网络通路正常?
本文基于官方config_network完整源码,从零拆解:默认配网参数、STA模式自动连路由、联网状态检测、IP/网关打印、断网重连、网络连通性验证,全程可直接照搬运行,适配OpenHarmony LiteOS RK2206平台。
适用平台:凌智RK2206 小凌派 | OpenHarmony 3.0 LTS | LiteOS内核
核心功能:WiFi STA配网、自动连路由器、状态打印、断网自动重连、网络可用性验证
一、整体业务逻辑概述
这份源码是RK2206官方标准配网组件,核心做了三件事:
- 固化默认WiFi参数:内置路由器SSID、密码、AP模式热点账号密码;
- Flash持久化配置:把WiFi模式、MAC、IP、网关、SSID/密码存在本地Flash;
- 双模式自动切换:
- STA模式:开发板作为站点,连接家用路由器;
- AP模式:开发板自身发射热点,手机连设备;
- 自动重连机制:WiFi掉线后5秒自动重试连接路由器;
- 联网信息上报:连上路由后自动打印IP、网关、子网掩码、WiFi信号列表。
二、关键默认配置参数解读(直接改这里就能用)
// STA模式:设备要连接的家用路由器WiFi#defineROUTE_SSID"阿千-友谊"#defineROUTE_PASSWORD"aabbcc123"// AP模式:设备自身发射的热点WiFi#defineAP_SSID"rk2206_nano"#defineAP_PASSWORD"88888888"使用方法:
直接修改ROUTE_SSID和ROUTE_PASSWORD为你家里路由器的WiFi名称和密码,编译烧录即可自动联网。
三、问题1:如何让RK2206设备连接到路由器
3.1 核心流程
- 系统初始化读取Flash中WiFi配置;
- 若Flash无有效配置,加载
set_default_wifi_config()默认参数; - 配置为STA模式,关闭原有AP/WiFi;
- 开启WiFi、扫描周边WiFi、匹配预设路由SSID;
- 填入SSID/密码/BSSID,发起WiFi连接;
- 循环等待获取IP,拿到IP即表示连上路由器。
3.2 关键核心函数
1. 入口函数
ExternalTaskConfigNetwork();开机调用后自动读取配置、判断模式、创建任务自动连网。
2. STA模式任务入口
TaskConfigWifiModeEntry()执行逻辑:关闭AP→关闭旧WiFi→开启并连接路由器→循环检测网络状态,断网自动重连。
3. 核心联网函数
SetWifiModeOn()- 加载路由SSID/密码;
- 开启WiFi硬件;
- 扫描周边WiFi;
- 匹配目标路由并保存BSSID;
- 发起WiFi连接;
- 等待获取IP、网关、子网掩码。
3.3 编译运行后自动联网
只要修改宏定义里的路由WiFi名称和密码,烧录上电:
开发板自动 → 开启WiFi → 扫描路由 → 自动输入密码 → 连上路由器。
四、问题2:如何证明设备已经成功连接到路由器
通过串口日志 + 代码状态检测双重验证。
4.1 串口日志关键标识(连上路由必有这些打印)
rknetwork SetWifiModeOn rknetwork g_wificonfig.ssid 阿千-友谊 rknetwork g_wificonfig.psk aabbcc123 rknetwork EnableWifi done rknetwork Scan done rknetwork GetScanResult done ConnectTo (阿千-友谊) done rknetwork IP (192.168.1.105) rknetwork GW (192.168.1.1) rknetwork NETMASK (255.255.255.0)出现IP地址、网关、子网掩码三条打印,百分百已经连上路由器。
4.2 代码函数判断联网状态
wifi_get_connect_status_internal()- 返回值为
1:已正常连接路由器; - 非1:断网/未联网。
源码里自带断网重连逻辑:
if(wifi_get_connect_status_internal()!=1){LOS_Msleep(5000);printf("wifi disconnect, try reconnect...\r\n");gotoinit;}检测到掉线,5秒后自动重新连路由器。
五、问题3:如何证明设备网络是通的(能上网)
连上路由器≠能上网,只能说明局域网通,还要验证外网通路。
5.1 现有代码可做的网络依据
- 成功获取路由器分配的静态/动态IP;
- 能读到网关地址、子网掩码;
- WiFi底层链路已握手、认证通过;
以上证明:设备 ↔ 路由器 局域网完全互通。
5.2 增加网络连通性验证(可直接加代码)
在同局域网的其他设备上,ping 地址即可验证网络连通性。
六、源码核心模块功能总结
| 函数 | 作用 |
|---|---|
| set_default_wifi_config | 加载默认WiFi、MAC、IP、网关配置 |
| set_wifi_config / get_wifi_config | 读写WiFi配置到Flash,持久化保存 |
| set_wifi_config_route_ssid/passwd | 动态设置要连接的路由器账号密码 |
| SetWifiModeOn | STA模式开启、连路由器、获取IP |
| SetApModeOn | AP模式开启,设备自身开热点 |
| TaskConfigWifiModeEntry | STA任务:自动联网+断网重连 |
| wifi_get_connect_status_internal | 查询WiFi是否已连上路由 |
七、实操使用步骤
- 修改源码中
ROUTE_SSID、ROUTE_PASSWORD为自家路由WiFi; - 编译烧录固件到RK2206;
- 打开串口工具,复位开发板;
- 观察日志:出现IP/网关即连上路由器;
- 依赖
wifi_get_connect_status_internal做业务断网重连; - 新增ping外网逻辑,验证真正上网能力。
八、常见问题避坑
- SSID密码写错:能扫描到WiFi但一直连不上,无IP打印;
- 未改默认路由参数:一直连不上自己家路由器;
- 串口有IP但无法上网:路由器未联网、设备被路由拉黑;
- 频繁断网重连:WiFi信号弱、密码错误、路由DHCP地址满。
九、总结
本文基于RK2206官方config_network源码,一次性解决你三个核心疑问:
- 改宏定义即可自动连接家用路由器,底层扫描、认证、获取IP全封装;
- 通过串口IP/网关日志 + wifi_get_connect_status_internal函数,双重证明设备已连上路由;
- 有局域网IP仅代表内网通,增加ping外网即可验证全网连通性,支撑后续MQTT、HTTP、TCP业务开发。
整套代码无需大幅修改,直接改WiFi名称密码就能落地使用,是RK2206鸿蒙WiFi配网入门必学工程。