## 功能模块介绍 1、main.lua:主程序入口,负责初始化系统环境和加载移动网络测试模块; 2、mobile_test.lua:移动网络功能测试模块,演示Air780EPM的移动网络相关功能; 3、sim_switch_test.lua:SIM卡自动切换功能测试模块,实现卡1/卡2网络异常自动切换; ## 演示功能概述 1、mobile_test:演示以下几种应用场景的使用方式 - SIM卡配置和管理功能演示; - 基站数据查询(订阅式和轮询式)功能演示; - SIM卡状态订阅功能演示; - 频段(Band)测试和修改功能演示; - 移动网络信息获取(IMEI/IMSI/信号强度等)功能演示; 2、sim_switch_test:演示以下三种SIM卡切换方式: - 轮询主动指定simid切换sim卡:定期检查网络状态,网络异常时主动切换到指定SIM卡 - 轮询自适应切换sim卡:系统自动选择最优SIM卡,无需手动指定(注:自适应模式需要设备使用V2022及以上固件才可以使用) - 中断方式主动指定simid切换sim卡:按键触发(WAKEUP0引脚)中断切换SIM卡 ## 演示硬件环境 1、Air780EPM开发板一块 + 可上网的SIM卡一张 + 4G天线一根: - SIM卡插入开发板的SIM卡槽 - 天线装到开发板上 2、TYPE-C USB数据线一根,Air780EPM开发板和数据线的硬件接线方式为: - Air780EPM开发板通过TYPE-C USB口供电;(外部供电/USB供电 拨动开关 拨到 USB供电一端) - TYPE-C USB数据线直接插到核心板的TYPE-C USB座子,另外一端连接电脑USB口; ## 演示软件环境 1、Luatools下载调试工具 2、Air780EPM 版本固件:[Air780EPM 版本固件](https://docs.openluat.com/air780epm/luatos/firmware/version/) ## 演示核心步骤 ### 5.1 mobile_test 演示步骤 1、搭建好硬件环境 2、确保SIM卡已正确插入开发板 3、确保main.lua中加载了mobile_test模块(默认加载): ```lua -- 加载 mobile_test 功能模块 require "mobile_test" -- 加载 sim_switch_test 功能模块(双卡切换功能) -- require "sim_switch_test" ``` 4、Luatools烧录内核固件和demo脚本代码 5、烧录成功后,自动开机运行,通过串口日志可以观察到以下信息: - SIM卡状态监控信息 - 基站数据查询结果 - 移动网络信息(IMEI/IMSI/信号强度等) - 频段测试和修改结果 ``` lua [2025-10-23 15:58:31.141][000000000.361] I/user.main project name is mobiledemo version is 001.000.000 [2025-10-23 15:58:31.142][000000000.370] I/mobile sim set to 2 , ret 0 [2025-10-23 15:58:31.144][000000000.373] I/user.************开始测试band************ [2025-10-23 15:58:31.161][000000001.774] I/user.当前使用的band: [2025-10-23 15:58:31.163][000000001.775] I/user.band 1 [2025-10-23 15:58:31.165][000000001.775] I/user.band 3 [2025-10-23 15:58:31.167][000000001.775] I/user.band 5 [2025-10-23 15:58:31.169][000000001.776] I/user.band 8 [2025-10-23 15:58:31.170][000000001.776] I/user.band 34 [2025-10-23 15:58:31.172][000000001.776] I/user.band 38 [2025-10-23 15:58:31.173][000000001.776] I/user.band 39 [2025-10-23 15:58:31.175][000000001.777] I/user.band 40 [2025-10-23 15:58:31.176][000000001.777] I/user.band 41 [2025-10-23 15:58:31.178][000000001.791] I/user.修改后使用的band: [2025-10-23 15:58:31.179][000000001.792] I/user.band 38 [2025-10-23 15:58:31.180][000000001.792] I/user.band 39 [2025-10-23 15:58:31.182][000000001.793] I/user.band 40 [2025-10-23 15:58:31.183][000000001.799] I/user.修改回默认使用的band: [2025-10-23 15:58:31.184][000000001.800] I/user.band 1 [2025-10-23 15:58:31.186][000000001.800] I/user.band 3 [2025-10-23 15:58:31.187][000000001.800] I/user.band 5 [2025-10-23 15:58:31.189][000000001.800] I/user.band 8 [2025-10-23 15:58:31.190][000000001.801] I/user.band 34 [2025-10-23 15:58:31.191][000000001.801] I/user.band 38 [2025-10-23 15:58:31.193][000000001.801] I/user.band 39 [2025-10-23 15:58:31.195][000000001.802] I/user.band 40 [2025-10-23 15:58:31.196][000000001.802] I/user.band 41 [2025-10-23 15:58:31.198][000000001.802] I/user.************band测试完毕************ [2025-10-23 15:58:48.147][000000018.809] I/user.imei 864793080175404 [2025-10-23 15:58:48.149][000000018.809] I/user.imsi 460240452233401 [2025-10-23 15:58:48.151][000000018.810] I/user.status 1 [2025-10-23 15:58:48.153][000000018.810] I/user.iccid 89860855102480513401 [2025-10-23 15:58:48.155][000000018.810] I/user.csq 27 [2025-10-23 15:58:48.157][000000018.811] I/user.rssi -58 [2025-10-23 15:58:48.158][000000018.811] I/user.rsrq -9 [2025-10-23 15:58:48.160][000000018.811] I/user.rsrp -87 [2025-10-23 15:58:48.161][000000018.812] I/user.snr 16 [2025-10-23 15:58:48.163][000000018.812] I/user.simid 0 [2025-10-23 15:58:48.169][000000018.812] I/user.apn cmiot.MNC024.MCC460.GPRS [2025-10-23 15:58:48.171][000000018.813] I/user.lua 4194296 56552 56552 [2025-10-23 15:58:48.172][000000018.813] I/user.sys 3202992 355468 360724 [2025-10-23 15:58:56.722][000000027.379] I/user.cell [{"mnc":0,"dlbandwidth":5,"tdd":0,"earfcn":1300,"ulbandwidth":5,"band":3,"mcc":460,"pci":219,"rsrp":-86,"tac":18511,"rssi":-57,"rsrq":-9,"snr":16,"cid":190213964},{"mnc":15,"earfcn":1300,"pci":219,"rsrp":-86,"tac":18511,"mcc":460,"rsrq":-9,"snr":16,"cid":190213964},{"mnc":0,"earfcn":40936,"pci":368,"rsrp":-103,"tac":18511,"mcc":460,"rsrq":-7,"snr":0,"cid":192844432}] [2025-10-23 15:58:56.726][000000027.382] I/user.sim status SIM_WC [2025-10-23 15:58:56.728][000000027.383] I/user.sim write counter 2 ``` 6、日志中会实时显示移动网络相关信息的变化,可通过观察日志来验证功能是否正常工作 ### 5.2 sim_switch_test 演示步骤 1、硬件准备:Air780EPM开发板一块 + 可上网的SIM卡两张 + 4G天线一根 2、确保两张SIM卡已正确插入开发板的卡1和卡2插槽 #### 5.2.2 软件配置 1、修改main.lua,注释掉mobile_test模块,启用sim_switch_test模块: ```lua -- 加载 mobile_test 功能模块 -- require "mobile_test" -- 加载 sim_switch_test 功能模块(双卡切换功能) require "sim_switch_test" ``` 2、选择切换方式:在sim_switch_test.lua文件末尾,选择您想要使用的切换方式(三选一): ```lua -- 启动双卡切换任务(三选一) -- 轮询主动指定simid切换sim卡 sys.taskInit(sim_switch_task) -- 轮询自适应切换sim卡 -- sys.taskInit(sim_switch_adaptive_task) -- 中断方式主动指定simid切换sim卡 -- sys.taskInit(sim_switch_irq_task) ``` #### 5.2.3 烧录和运行 1、使用Luatools烧录内核固件和demo脚本代码 2、烧录成功后,自动开机运行 #### 5.2.4 三种切换方式说明 ##### 1. 轮询主动指定simid切换sim卡(默认启用) - 功能:定期检查网络状态,网络异常时主动切换到指定SIM卡 - 特点:使用mobile.simid()直接指定SIM卡索引进行切换,切换逻辑明确可控 - 日志示例: ``` lua [2026-01-14 13:14:00.055][000000000.230] I/user.main project name is mobiledemo version is 001.000.000 [2026-01-14 13:14:00.057][000000000.239] I/mobile sim set to 0 , ret 0 [2026-01-14 13:14:00.060][000000000.240] I/user.sim_switch 初始SIM卡: 0 [2026-01-14 13:14:00.063][000000000.240] I/user.sim_switch 当前SIM卡: 0 网络状态: 0 [2026-01-14 13:14:00.066][000000000.240] I/user.sim_switch 正在等待网络连接... [2026-01-14 13:14:00.222][000000000.727] I/user.sim_switch SIM卡正常 [2026-01-14 13:14:01.727][000000002.246] D/mobile cid1, state0 [2026-01-14 13:14:01.731][000000002.246] D/mobile bearer act 0, result 0 [2026-01-14 13:14:01.734][000000002.247] D/mobile NETIF_LINK_ON -> IP_READY [2026-01-14 13:14:01.738][000000002.273] D/mobile TIME_SYNC 0 [2026-01-14 13:14:14.700][000000015.241] I/user.sim_switch 网络连接成功 [2026-01-14 13:14:24.704][000000025.241] I/user.sim_switch 当前SIM卡: 0 网络状态: 1 [2026-01-14 13:14:24.713][000000025.241] I/user.sim_switch 网络已经连接 -- 此时将SIM卡从SIM0换到SIM1,模拟SIMO网络异常 [2026-01-14 13:14:30.556][000000031.085] I/user.sim_switch 无SIM卡 [2026-01-14 13:14:30.680][000000031.222] D/mobile cid1, state2 [2026-01-14 13:14:30.686][000000031.222] D/mobile NETIF_LINK_OFF -> IP_LOSE [2026-01-14 13:14:34.706][000000035.242] I/user.sim_switch 当前SIM卡: 0 网络状态: 0 [2026-01-14 13:14:34.713][000000035.242] I/user.sim_switch 正在等待网络连接... [2026-01-14 13:14:40.533][000000041.083] prvSimCheck 494:sim error and reset stack [2026-01-14 13:14:40.728][000000041.258] I/user.sim_switch 无SIM卡 [2026-01-14 13:14:49.695][000000050.243] I/user.sim_switch 网络连接失败,切换到SIM卡 1 [2026-01-14 13:14:49.759][000000050.300] I/mobile sim set to 1 , ret 0 [2026-01-14 13:14:50.126][000000050.648] I/user.sim_switch SIM卡正常 [2026-01-14 13:14:51.782][000000052.304] D/mobile cid1, state0 [2026-01-14 13:14:51.786][000000052.304] D/mobile bearer act 0, result 0 -- SIM1联网成功 [2026-01-14 13:14:51.790][000000052.305] D/mobile NETIF_LINK_ON -> IP_READY [2026-01-14 13:14:51.795][000000052.331] D/mobile TIME_SYNC 0 [2026-01-14 13:14:59.763][000000060.301] I/user.sim_switch 当前SIM卡: 1 网络状态: 1 [2026-01-14 13:14:59.766][000000060.301] I/user.sim_switch 网络已经连接 [2026-01-14 13:15:09.763][000000070.302] I/user.sim_switch 当前SIM卡: 1 网络状态: 1 [2026-01-14 13:15:09.765][000000070.302] I/user.sim_switch 网络已经连接 [2026-01-14 13:15:19.761][000000080.303] I/user.sim_switch 当前SIM卡: 1 网络状态: 1 [2026-01-14 13:15:19.765][000000080.303] I/user.sim_switch 网络已经连接 ``` ##### 2. 轮询自适应切换sim卡 - 功能:系统自动选择最优SIM卡,无需手动指定 - 特点:设置mobile.simid(2)启用自适应模式,由系统智能选择最佳SIM卡 - 注意事项:自适应模式需要设备使用V2022及以上固件才可以使用 - 日志示例: ```lua [2026-01-14 13:58:25.030][000000000.205] I/user.main project name is mobiledemo version is 001.000.000 [2026-01-14 13:58:25.031][000000000.212] I/mobile sim set to 2 , ret 0 [2026-01-14 13:58:25.080][000000000.538] I/user.sim_switch 无SIM卡 [2026-01-14 13:58:25.348][000000000.881] I/user.sim_switch SIM卡正常 [2026-01-14 13:58:27.159][000000002.698] D/mobile cid1, state0 [2026-01-14 13:58:27.161][000000002.699] D/mobile bearer act 0, result 0 [2026-01-14 13:58:27.162][000000002.700] D/mobile NETIF_LINK_ON -> IP_READY [2026-01-14 13:58:27.195][000000002.760] D/mobile TIME_SYNC 0 [2026-01-14 13:58:27.662][000000003.213] I/user.sim_switch 初始SIM卡: 0 [2026-01-14 13:58:27.666][000000003.213] I/user.sim_switch 当前SIM卡: 0 网络状态: 1 [2026-01-14 13:58:27.667][000000003.214] I/user.sim_switch 网络已经连接 [2026-01-14 13:58:37.650][000000013.214] I/user.sim_switch 当前SIM卡: 0 网络状态: 1 [2026-01-14 13:58:37.653][000000013.214] I/user.sim_switch 网络已经连接 -- 此时将SIM卡从SIM0换到SIM1,模拟SIMO网络异常 [2026-01-14 13:58:55.744][000000031.288] I/user.sim_switch 无SIM卡 [2026-01-14 13:58:55.977][000000031.535] D/mobile cid1, state2 [2026-01-14 13:58:55.979][000000031.535] D/mobile NETIF_LINK_OFF -> IP_LOSE [2026-01-14 13:58:57.660][000000033.216] I/user.sim_switch 当前SIM卡: 0 网络状态: 0 [2026-01-14 13:58:57.665][000000033.216] I/user.sim_switch 正在等待网络连接... [2026-01-14 13:59:05.734][000000041.286] prvSimCheck 494:sim error and reset stack [2026-01-14 13:59:05.928][000000041.467] I/user.sim_switch 无SIM卡 [2026-01-14 13:59:06.300][000000041.813] I/user.sim_switch SIM卡正常 [2026-01-14 13:59:07.839][000000043.369] D/mobile cid1, state0 [2026-01-14 13:59:07.841][000000043.370] D/mobile bearer act 0, result 0 -- SIM1联网成功 [2026-01-14 13:59:07.842][000000043.370] D/mobile NETIF_LINK_ON -> IP_READY [2026-01-14 13:59:07.860][000000043.426] D/mobile TIME_SYNC 0 [2026-01-14 13:59:12.655][000000048.217] I/user.sim_switch 网络连接成功 [2026-01-14 13:59:22.664][000000058.217] I/user.sim_switch 当前SIM卡: 0 网络状态: 1 [2026-01-14 13:59:22.668][000000058.217] I/user.sim_switch 网络已经连接 [2026-01-14 13:59:32.654][000000068.218] I/user.sim_switch 当前SIM卡: 0 网络状态: 1 [2026-01-14 13:59:32.658][000000068.218] I/user.sim_switch 网络已经连接 ``` ##### 3. 中断方式主动指定simid切换sim卡 - 功能:按键触发(WAKEUP0引脚)中断切换SIM卡 - 特点:下降沿触发中断,带有500ms防抖,实时打印当前SIM卡状态和网络状态 - 硬件要求:需连接WAKEUP0引脚到按键或触发设备 - 日志示例: ```lua [2026-01-14 14:14:37.858][000000000.215] I/user.main project name is mobiledemo version is 001.000.000 [2026-01-14 14:14:37.860][000000000.224] I/user.sim_switch 初始SIM卡: 0 [2026-01-14 14:14:37.862][000000000.224] I/mobile sim set to 0 , ret 0 [2026-01-14 14:14:37.864][000000000.224] I/user.sim_switch 当前SIM卡: 0 网络状态: 0 [2026-01-14 14:14:38.035][000000000.713] I/user.sim_switch SIM卡正常 [2026-01-14 14:14:39.150][000000001.822] D/mobile cid1, state0 [2026-01-14 14:14:39.152][000000001.823] D/mobile bearer act 0, result 0 [2026-01-14 14:14:39.153][000000001.824] D/mobile NETIF_LINK_ON -> IP_READY [2026-01-14 14:14:39.177][000000001.881] D/mobile TIME_SYNC 0 [2026-01-14 14:14:47.524][000000010.225] I/user.sim_switch 当前SIM卡: 0 网络状态: 1 [2026-01-14 14:14:57.532][000000020.226] I/user.sim_switch 当前SIM卡: 0 网络状态: 1 -- 此时将SIM卡从SIM0换到SIM1,模拟SIMO网络异常 [2026-01-14 14:15:08.373][000000031.055] I/user.sim_switch 无SIM卡 [2026-01-14 14:15:08.611][000000031.300] D/mobile cid1, state2 [2026-01-14 14:15:08.613][000000031.301] D/mobile NETIF_LINK_OFF -> IP_LOSE [2026-01-14 14:15:17.526][000000040.226] I/user.sim_switch 当前SIM卡: 0 网络状态: 0 [2026-01-14 14:15:18.348][000000041.054] prvSimCheck 494:sim error and reset stack [2026-01-14 14:15:18.540][000000041.228] I/user.sim_switch 无SIM卡 [2026-01-14 14:15:27.526][000000050.226] I/user.sim_switch 当前SIM卡: 0 网络状态: 0 [2026-01-14 14:15:28.532][000000051.226] prvSimCheck 494:sim error and reset stack [2026-01-14 14:15:28.725][000000051.401] I/user.sim_switch 无SIM卡 -- 此时将WAKEUP0短接,模拟按键按下 [2026-01-14 14:15:56.795][000000079.501] I/user.sim_switch 按键触发,开始切换到SIM卡: 1 [2026-01-14 14:15:56.798][000000079.508] I/mobile sim set to 1 , ret 0 [2026-01-14 14:15:56.799][000000079.508] I/user.sim_switch SIM卡切换成功,当前使用SIM卡: 1 [2026-01-14 14:15:57.250][000000079.857] I/user.sim_switch SIM卡正常 [2026-01-14 14:16:14.280][000000096.961] D/mobile cid1, state0 [2026-01-14 14:16:14.282][000000096.961] D/mobile bearer act 0, result 0 -- SIM1联网成功 [2026-01-14 14:16:14.283][000000096.962] D/mobile NETIF_LINK_ON -> IP_READY [2026-01-14 14:16:14.334][000000097.031] D/mobile TIME_SYNC 0 [2026-01-14 14:16:17.519][000000100.226] I/user.sim_switch 当前SIM卡: 1 网络状态: 1 [2026-01-14 14:16:27.527][000000110.226] I/user.sim_switch 当前SIM卡: 1 网络状态: 1 ```