Zig WiFi Scan 示例

功能说明

该示例演示如何在 Zig 中初始化底层 WiFi、等待硬件就绪、启用 STA 模式并扫描周围可见的 AP。示例会将扫描结果以表格形式打印到日志中,用于验证 Zig 对 WiFi 相关 C API 的调用、异步初始化流程以及扫描结果读取逻辑。

硬件连接

本示例使用芯片内部 WiFi 外设,无需额外接线。

建议准备:

  • 可正常工作的 arcs_evb 开发板

  • 周围存在可扫描到的 WiFi 热点环境

  • 串口日志接收工具

示例步骤

  1. 初始化 Zig 日志系统

  2. 初始化 MAC Manager

  3. 通过 lisa_wifi_init() 启动 WiFi 硬件初始化

  4. 等待 Zig 回调标记 WiFi ready

  5. 启用 STA 模式

  6. 发起全频道扫描

  7. 等待扫描完成事件

  8. 打印扫描到的 AP 列表

编译

重要提示:在编译前,请先确认您使用的开发板型号。SDK 目前支持以下开发板:

  • arcs_evb - ARCS EVB 评估板

  • arcs_mini - ARCS Mini 开发板

根据您的开发板型号,选择对应的编译命令:

在 SDK 根目录执行编译:

# 使用 arcs_evb 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_evb

# 或使用 arcs_mini 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_mini

Note

确保已安装对应的工具链。

建议将示例路径替换为:

./build.sh -C -S samples/libraries/zig/wifi_demo -DBOARD=arcs_evb

烧录

编译完成后,使用 SDK tools 目录下的 cskburn 工具烧录固件:

./tools/burn/cskburn -s /dev/ttyUSB0 -b 3000000 0x0 build/arcs.bin -C arcs

Note

烧录参数说明

  • -s /dev/ttyUSB0:串口设备路径,需要根据实际情况修改 - Linux 系统:通常是 /dev/ttyUSB0/dev/ttyACM0 - 可通过 ls /dev/tty* 命令查看可用串口设备 - 不同开发板或 USB 转串口芯片可能使用不同的设备名

  • -b 3000000:烧录波特率(3Mbps)

  • 0x0:烧录起始地址

  • build/arcs.bin:编译生成的固件路径

  • -C arcs:芯片类型

注意事项

  • 确保开发板已正确连接到电脑

  • 如果无法识别串口设备,请检查 USB 连接线是否正常,或尝试其他 USB 端口

预期输出

串口中可看到类似日志:

=== Zig WiFi Scan Demo ===
MAC manager OK
WiFi init started...
WiFi hardware ready!
MAC: xx:xx:xx:xx:xx:xx
STA mode enabled
Starting WiFi scan...
Scan done!
Found 5 AP(s)
╔════╦══════════════════════════════════╦═══════╦══════╦════════╗
║ #  ║ SSID                             ║ RSSI  ║  CH  ║  AUTH  ║
...
=== WiFi Scan Complete: 5 AP(s) displayed ===
=== WiFi Scan PASSED ===

核心 API

API

说明

lisa_wifi_init()

初始化底层 WiFi 模块

wifi_sta_mode_enable()

启用 STA 模式

wifi_scan_start()

发起 WiFi 扫描

wifi_event_wait()

等待扫描完成事件

wifi_sta_scanlist_dump()

读取扫描结果

arcs.sleep()

在等待硬件 ready 时轮询休眠

关键代码

while (!wifi_init_ready) {
    arcs.sleep(100);
}

if (wifi_sta_mode_enable() != 0) {
    return -1;
}

var scan_params = WifiScanParams{};
if (wifi_scan_start(&scan_params) != 0) {
    return -2;
}

if (wifi_event_wait(EVENT_WIFI_SCAN_DONE, 10000) != 0) {
    return -3;
}

注意事项

  • 接口层级: 该示例使用的是底层 WiFi 接口,而不是更上层的 WiFi Manager

  • 配置依赖: 需要开启 CONFIG_LISA_WIFICONFIG_MAC_MANAGER 等相关配置,当前 sample 的 prj.conf 已包含必要选项

  • 环境差异: 运行结果与现场无线环境相关,扫描到的 AP 数量、RSSI 和认证类型会有所不同,因此当前 sample 继续保持 build-only

  • 真机调试: 现在会在 WiFi 初始化等待超过 10 秒时明确报超时失败,便于定位板级 WiFi 未 ready 的问题

  • 后续 CI 方向: 若未来要接入真机 CI,建议改为受控 AP 环境下的固定 SSID / DHCP 成功判定,而不是直接使用扫描结果数量

  • 故障排查: 若 WiFi 初始化失败,可先检查板级 WiFi 配置、日志输出和相关驱动是否正常