# wifi_ps basic —— 最精简的 WiFi 自动轻睡眠示例 ## 功能说明 `lisa_pm` 框架下最小的 WiFi 省电 + 自动 light-sleep 工程,**不包含** GPIO 唤醒、不包含 MQTT。用于展示一个能正常进入自动轻睡眠所必需的全部步骤。 ### 关键流程 ``` lisa_pm_init() # 内部已自动跑 vrtc_init() + HAL pm_init() → mac_manager + DHCP 回调注册 → lisa_wifi_init(ops) → 等 EVENT_WIFI_CONNECTED + DHCP success → lisa_pm_wifi_set_ps_mode(LISTEN, listen_interval=10) → net_enable_keep_alive() → lisa_pm_set_system_policy(AUTO_LIGHT_SLEEP) → 主循环每 5 秒打印 lisa_pm_get_wakeup_cause() ``` ## 使用前修改 `src/main.c` 顶部: ```c #define TARGET_WIFI_SSID "YOUR_WIFI_SSID" #define TARGET_WIFI_PWD "YOUR_WIFI_PASSWORD" ``` ## 编译 ```{eval-rst} .. include:: /sample_build.rst ``` ## 烧录 本工程产出两份固件,必须**同时**烧到 flash 上才能正常运行: | 固件 | 路径 | 烧录地址 | |------|------|----------| | AP 固件 | `build/remote/ap.bin` | `0x0` | | CP 固件 | `build/arcs.bin` | `0x100000` | ```bash ./tools/burn/cskburn -s /dev/ttyUSB0 -b 3000000 \ 0x0 build/remote/ap.bin \ 0x100000 build/arcs.bin \ -C arcs ``` ## 预期输出 ``` === lisa_pm wifi_ps basic === Waiting for WiFi + IP... WiFi connected DHCP success: 192.168.x.x AUTO_LIGHT_SLEEP enabled (WiFi LISTEN interval=10) tick: last wakeup cause = WIFI tick: last wakeup cause = TIMER ... ``` 进入自动轻睡眠后,多数 tick 的唤醒原因会是 `WIFI`(LISTEN beacon)或 `TIMER`(FreeRTOS tick)。 ## 核心 API | API | 说明 | |-----|------| | `lisa_pm_init()` | 初始化 LISA PM 框架(内部自动启动 vrtc / HAL PM) | | `lisa_pm_wifi_set_ps_mode(LISTEN, &cfg)` | 启用 WiFi LISTEN PS,**必须在 connect 之前**调用 | | `lisa_pm_set_system_policy(AUTO_LIGHT_SLEEP)` | 允许系统空闲时自动轻睡 | | `lisa_pm_get_wakeup_cause()` | 读取最近一次归一化的唤醒原因 | ## 注意事项 1. **PS LISTEN 设置时机**:`lisa_pm_wifi_set_ps_mode(LISTEN, ...)` 必须在 `wifi_sta_connect()` **之前**调用,否则 listen_interval 不会下发到 chip。 2. **WiFi 是 AUTO_LIGHT_SLEEP 的硬依赖**:SDK 当前实现 light sleep 路径与 WiFi RF 状态绑定,WiFi 不连上不会真正进 light sleep。 3. **两份固件必须一起烧**:只烧 AP 不烧 CP,CP 跑不起来;只烧 CP 不烧 AP,PM 唤醒后无法把 CP 重启回 RAM 入口。