LISA PM WiFi keep-alive MQTT 订阅示例

功能说明

本示例演示双核 LISA PM 场景下的 WiFi keep-alive + MQTT 订阅:

  • AP 核 (remote/):启动 CP,并初始化 lisa_pm 作为 PM 对端。

  • CP 核 (src/):连接 WiFi,建立 MQTT TCP 连接并订阅主题,随后开启 WiFi LISTEN 省电、网络 keep-alive 和 AUTO_LIGHT_SLEEP

示例保持最小链路,不包含 MQTT 重连、消息队列、复杂状态机等健壮性设计。

使用前修改

src/main.c 顶部:

#define TARGET_WIFI_SSID            "YOUR_WIFI_SSID"
#define TARGET_WIFI_PWD             "YOUR_WIFI_PASSWORD"

#define MQTT_BROKER_HOST            "192.168.1.100"
#define MQTT_BROKER_PORT            1883
#define MQTT_CLIENT_ID              "arcs_pm_keep_alive_sub"
#define MQTT_TOPIC_SUB              "arcs/pm/keep_alive"

其中 MQTT_BROKER_HOST 建议配置为 PC 在同一 WiFi 网络中的 IP 地址。

PC 端 MQTT 服务器

以下以 Ubuntu PC + Mosquitto 为例。PC 和开发板需要连接到同一个 WiFi 网络,并确认防火墙允许 TCP 1883 端口访问。

  1. 安装 Mosquitto:

sudo apt update
sudo apt install -y mosquitto mosquitto-clients
  1. 新建一个允许局域网匿名访问的临时配置:

cat > /tmp/mosquitto-arcs.conf <<'EOF'
listener 1883 0.0.0.0
allow_anonymous true
EOF
  1. 启动 MQTT broker:

mosquitto -c /tmp/mosquitto-arcs.conf -v
  1. 另开一个终端,查看 PC 的 WiFi IP:

ip -4 addr

找到 PC 在 WiFi 网卡上的地址,例如 192.168.1.100,然后把端侧 src/main.c 中的 MQTT_BROKER_HOST 改成这个 IP。

  1. 端侧烧录并启动后,在 PC 上向示例订阅的 topic 发布消息:

mosquitto_pub -h 127.0.0.1 -p 1883 -t arcs/pm/keep_alive -m "hello from pc"

如果希望确认 broker 可用,也可以在 PC 上先自测订阅:

mosquitto_sub -h 127.0.0.1 -p 1883 -t arcs/pm/keep_alive -v

端侧收到消息后会打印:

MQTT message topic=arcs/pm/keep_alive payload=hello from pc

编译

重要提示:编译前需要先确认当前示例支持的目标板型,然后将板型标识传给 -DBOARD。请按以下方式选择:

  1. 确认示例限制:查看当前示例 README 中的硬件连接和注意事项,确认是否限定板型。

  2. 参考示例配置:查看相关示例目录下的 sample.yaml,确认支持的板型。

  3. 填写板型标识:SDK 内置板型的标识为 boards/ 下的目录名。例如实际使用的板型目录为 boards/<板型名称>/,则编译参数填写为 -DBOARD=<板型名称>

在 SDK 根目录执行编译,并将命令中的 <示例路径><板型名称> 替换为实际值。

Linux 使用 build.sh

# 通用命令
./build.sh -C -S samples/<示例路径> -DBOARD=<板型名称>

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

Windows PowerShell 使用 build.ps1

# 通用命令
.\build.ps1 -C -S samples/<示例路径> -DBOARD=<板型名称>

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

Note

确保已安装对应平台的工具链和 ListenAI 开发工具包。Windows 环境请先执行 .\env.ps1 或直接使用 .\build.ps1 自动加载环境。

注意事项-DBOARD 填写的是板型标识,不是芯片系列名称。如果示例有板型专用配置或额外编译参数,以示例 README 中的说明为准。

也可以在 SDK 根目录直接执行:

./build.sh -C -S samples/subsys/lisa_pm/wifi_keep_alive_mqtt -DBOARD=arcs_evb

烧录

本工程产出两份固件,必须同时烧到 flash:

固件

路径

烧录地址

AP 固件

build/remote/ap.bin

0x0

CP 固件

build/arcs.bin

0x100000

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

预期输出

AP 侧关键日志:

=== LISA PM WiFi keep-alive MQTT AP ===
boot cp from flash: 0x30100000

CP 侧关键日志:

=== LISA PM WiFi keep-alive MQTT CP ===
lisa_wifi init done
WiFi connected
DHCP success on VIF-0: 192.168.x.x
Connected to MQTT broker 192.168.1.100:1883
MQTT subscribed: arcs/pm/keep_alive
AUTO_LIGHT_SLEEP enabled, WiFi keep-alive on
CP after_wake cause=WIFI
MQTT message topic=arcs/pm/keep_alive payload=...

核心 API

API

说明

lisa_pm_wifi_set_listen_interval()

连接 AP 前配置 WiFi LISTEN 监听周期

lisa_pm_wifi_set_ps_mode(LISA_PM_WIFI_PS_LISTEN)

启用 WiFi LISTEN 省电

net_enable_keep_alive()

打开网络 keep-alive

lisa_pm_set_system_policy(LISA_PM_SYSTEM_POLICY_AUTO_LIGHT_SLEEP)

允许系统空闲时进入 light sleep

MQTT_Subscribe() / MQTT_ProcessLoop()

订阅主题并接收下行消息