4G模组如何查找和设置mobile频段,并获取相关参数?

4g主要采用正交频分复用技术(OFDM)和多输入多输出技术(MIMO)。OFDM将宽频带划分为多个窄频带,从而提高了频谱的利用效率,并减少了信号间的干扰。

4G网络采用了全IP网络架构,所有数据和语音通信都是通过IP(InternetProtocol)传输的。相比之前的移动通信技术(如2G和3G),4G能够更有效地处理数据流量,尤其是用于互联网服务和多媒体应用。

今天我们一起来学习查找和设置mobile频段,并获取相关参数。

一、准备硬件环境

1 .1开发板准备

1)Air780E核心板一个:

https://item.taobao.com/item.htm?id=693774140934

2)此核心板的详细使用说明参考:

https://docs.openluat.com/air780e/product/

Air780E产品手册中的《开发板Core_Air780E使用说明V1.0.5.pdf》,核心板使用过程中遇到任何问题,可以直接参考这份使用说明pdf文档。

1.2 SIM卡

请准备一张可正常上网的SIM卡,该卡可以是物联网卡或您的个人手机卡。

特别提醒:
请确保SIM卡未欠费且网络功能正常,以便顺利进行后续操作。

1.3 数据通信线

typec接口USB数据线即可。

1.4 PC电脑

Windows系统。

 

二、准备软件环境

2.1 基本的下载调试工具

使用说明参考:
Luatools下载和详细使用:

Luatools新手必看:从下载开始的保姆级教程!-CSDN博客

三、mobile 的使用软硬件资料

3.1 常量消息

这里是发布的消息,可以使用 sys.waitUntil()或者 sys.subscribe()函数来获取消息是否发布。

常量类型解释
mobile.UNREGISTERnumber未注册
mobile.REGISTEREDnumber已注册
mobile.SEARCHnumber正在搜索中
mobile.DENIEDnumber注册被拒绝
mobile.UNKNOWnumber未知
mobile.REGISTERED_ROAMINGnumber已注册,漫游
mobile.SMS_ONLY_REGISTEREDnumber已注册,仅 SMS
mobile.SMS_ONLY_REGISTERED_ROAMINGnumber已注册,漫游,仅 SMS
mobile.EMERGENCY_REGISTEREDnumber已注册,紧急服务
mobile.CSFB_NOT_PREFERRED_REGISTEREDnumber已注册,非主要服务
mobile.CSFB_NOT_PREFERRED_REGISTERED_ROAMINGnumber已注册,非主要服务,漫游
mobile.CONF_RESELTOWEAKNCELLnumber小区重选信号差值门限,需要飞行模式设置
mobile.CONF_STATICCONFIGnumber网络静态模式优化,需要飞行模式设置
mobile.CONF_QUALITYFIRSTnumber网络切换以信号质量优先,需要飞行模式设置,0 不开,1 开启,2 开启并加速切换,功耗会增加
mobile.CONF_USERDRXCYCLEnumberLTE 跳 paging,需要飞行模式设置,谨慎使用,0 是不设置,1~7 增大或减小 DrxCycle 周期倍数,1:1/8 倍 2:1/4 倍 3:1/2 倍 4:2 倍 5:4 倍 6:8 倍 7:16 倍,8~12 配置固定的 DrxCycle 周期,仅当该周期大于网络分配的 DrxCycle 周期时该配置才会生效,8:320ms 9:640ms 10:1280ms 11:2560ms 12:5120ms
mobile.CONF_T3324MAXVALUEnumberPSM 模式中的 T3324 时间,单位 S
mobile.CONF_PSM_MODEnumberPSM 模式开关,0 关,1 开
mobile.CONF_CE_MODEnumberattach 模式,0 为 EPS ONLY 2 为混合,遇到 IMSI detach 脱网问题,设置为 0,注意设置为 EPS ONLY 时会取消短信功能
mobile.CONF_SIM_WC_MODEnumberSIM 写入次数的配置和读取
mobile.CONF_FAKE_CELL_BARTIMEnumber伪基站禁止接入的时间,取值为 0 时取消,0xffff 永久
mobile.CONF_RESET_TO_FACTORYnumber删除已保存的协议栈参数,重启后会使用默认配置
mobile.CONF_USB_ETHERNETnumber蜂窝网络模块的 usb 以太网卡控制,bit0 开关, 1开,0关,bit1 模式, 1NAT,0独立IP(在 usb 以太网卡开启前可以修改,开启过就不行),bit2 协议 1ECM,0RNDIS,飞行模式里设置
mobile.CONF_DISABLE_NCELL_MEASnumber关闭邻区测量 1 关,0 开,除了功耗测试外不建议使用
mobile.PIN_VERIFYnumber验证 PIN 码操作
mobile.PIN_CHANGEnumber更换 PIN 码操作
mobile.PIN_ENABLEnumber使能 PIN 码验证
mobile.PIN_DISABLEnumber关闭 PIN 码验证
mobile.PIN_UNBLOCKnumber解锁 PIN 码

3.2 源码和工具

3.3 demo使用api介绍

mobile.status()

作用:获取网络状态。

参数:

返回值:

返回值类型解释
int当前网络状态

mobile.getBand(band, is_default)

作用:获取当前使用/支持的 band

参数:

参数传入值类型解释
bandzbuff输出 band
is_defaultbooleantrue 默认支持,false 当前支持的,默认是 false,当前是预留功能,不要写 true

返回值:

返回值类型解释
boolean成功返回 true,失败返回 false

mobile.setBand(band, num)

作用:设置使用的 band

参数:

参数传入值类型解释
bandzbuff输入使用的 band
numintband 数量

返回值:

返回值类型解释
boolean成功返回 true,失败返回 false

mobile.flymode(index, enable)

作用:进出飞行模式

参数:

参数传入值类型解释
indexint编号,默认 0。在支持双卡的模块上才会出现 0 或 1 的情况
enablebool是否设置为飞行模式,true 为设置,false 为退出,可选

返回值:

返回值类型解释
boolean原飞行模式的状态

mobile.vsimOnOff(enable)

作用:切换内置虚拟卡和外置实体卡

参数:

参数传入值类型解释
enablebooltrue 开启,false 关闭

返回值:

返回值类型解释
nil无返回值

mobile.rtime(time, auto_reset_stack, data_first)

作用:设置 RRC 自动释放时间间隔

参数:

参数传入值类型解释
timeintRRC 自动释放时间,等同于 Air724 的 AT+RTIME,单位秒,写 0 或者不写则是停用,不要超过 20 秒
auto_reset_stackboolean网络遇到严重故障时尝试自动恢复,与飞行模式/SIM 卡切换冲突,true 开启,false 关闭。本参数于 2023 年 9 月 14 日已废弃。
data_firstboolean是否启用数据传输优化,true 启用,false 关闭,开启后在 ACK 或超时失败时才允许 RRC 提前释放。此功能于 2024 年 8 月 12 日启用。

返回值:

返回值类型解释
nil无返回值

mobile.setAuto(check_sim_period, get_cell_period, search_cell_time, auto_reset_stack, network_check_period)

作用:设置一些辅助周期性或自动功能

参数:

参数传入值类型解释
check_sim_periodintSIM 卡自动恢复时间,单位毫秒,建议 5000~10000。写 0 或不写则关闭功能
get_cell_periodint周期性获取小区信息的时间间隔,单位毫秒。写 0 或不写则关闭功能
search_cell_timeint每次搜索小区时最大搜索时间,单位秒,不要超过 8 秒
auto_reset_stackboolean网络故障时尝试自动恢复,和飞行模式/SIM 卡切换冲突,true 开启,false 关闭
network_check_periodint设置定时检测网络是否正常的间隔,单位毫秒,建议 60000 以上,留空则不做更改。

返回值:

返回值类型解释
nil无返回值

mobile.imei(index)

作用:获取 IMEI。

参数:

参数传入值类型解释
indexint编号,默认 0。支持双卡模块上才会出现 0 或 1 的情况

返回值:

返回值类型解释
string当前的 IMEI 值,失败返回 nil

mobile.imsi(index)

作用:获取 IMSI。

参数:

参数传入值类型解释
indexint编号,默认 0。支持双卡模块上才会出现 0 或 1 的情况

返回值:

返回值类型解释
string当前的 IMSI 值,失败返回 nil

mobile.iccid(id)

作用:获取或设置 ICCID。

参数:

参数传入值类型解释
idintSIM 卡的编号,例如 0,1,默认 0

返回值:

返回值类型解释
stringICCID 值,失败返回 nil

mobile.csq()

作用:获取 CSQ。

参数:

返回值:

返回值类型解释
int当前 CSQ 值,失败返回 0。范围 0 - 31,值越大越好

mobile.rssi()

作用:获取 RSSI。

参数:

返回值:

返回值类型解释
int当前 RSSI 值,失败返回 0。范围 0 到 -114,值越小越好

mobile.rsrp()

作用:获取 RSRP(参考信号接收功率)。

参数:

返回值:

返回值类型解释
int当前 RSRP 值,失败返回 0。取值范围 -44 ~ -140,值越大越好

mobile.rsrq()

作用:获取 RSRQ(参考信号发送功率)。

参数:

返回值:

返回值类型解释
int当前 RSRQ 值,失败返回 0。取值范围 -3 ~ -19.5,值越大越好

mobile.snr()

作用:获取 SNR(信噪比)。

参数:

返回值:

返回值类型解释
int当前 SNR 值,失败返回 0。范围 0 - 30,值越大越好

mobile.simid(id, prefer_sim0)

作用:获取当前 SIM 卡槽或切换卡槽。

参数:

参数传入值类型解释
idintSIM 卡的编号,例如 0,1。支持双卡模块可填 2 自适应,但会占用特定 IO 口。如果不填,默认读取当前卡槽
prefer_sim0boolean是否优先使用 SIM0,仅在 SIM 卡编号为 2 时有效。true 表示优先使用 SIM0,false 表示按平台默认设置,必须开机时配置才能有效

返回值:

返回值类型解释
int当前 SIM 卡槽编号,失败返回 -1

mobile.apn(index, cid, new_apn_name, user_name, password, ip_type, protocol, delete_apn)

作用:获取或设置 APN。

参数:

参数传入值类型解释
indexint编号,默认 0。支持双卡的模块上才会出现 0 或 1 的情况
cidintCID,默认 0。如果要使用非默认 APN 激活,必须大于 0
new_apn_namestring新的 APN 名称,不填表示获取 APN,填入表示设置 APN,设置是否支持取决于底层实现
user_namestring新的 APN 的用户名,如果 APN 不为空,必须填写。如果没有则留空 "";如果 APN 为空,则可为 nil
passwordstring新的 APN 的密码,同上
ip_typeint激活 APN 时的 IP 类型,1=IPv4,2=IPv6,3=IPv4v6,默认 1
protocolintAPN 鉴权协议类型,0 表示无,1= PAP,2=CHAP,3=自动选择,默认 3。一般无用户名密码时填 0,有时填 3。如果不行可尝试 1 或 2
delete_apnboolean是否删除 APN,仅当参数 new_apn_name 不为 string 时有效

返回值:

返回值类型解释
string获取到的默认 APN 值,失败返回 nil

mobile.scell()

作用:获取当前服务小区的详细信息。

参数:

返回值:

返回值类型解释
table服务小区的详细信息

mobile.getCellInfo()

作用:获取基站信息。

参数:

返回值:

返回值类型解释
table包含基站数据的数组

mobile.config(item, value)

作用:网络特殊配置。

参数:

参数传入值类型解释
itemint配置项目,参照 mobile.CONF_XXX
valueint配置值,依据具体配置的 item 决定

返回值:

返回值类型解释
boolean是否配置成功

mobile.reqCellInfo(timeout)

作用:发起基站信息查询,包含临近小区信息。

参数:

参数传入值类型解释
timeoutint超时时长,单位秒,默认 15,范围 5 - 60

返回值:

返回值类型解释
nil无返回值

mobile.number(id)

作用:获取手机卡号。

参数:

参数传入值类型解释
idintSIM 卡的编号,例如 0,1,默认 0

返回值:

返回值类型解释
string手机卡号,失败返回 nil

四、代码示例介绍

4.1 查询 mobile 的 band 和 iccid 和 csq 等信息。

4.1.1 查询、更改、和恢复 band 的设置

 

log.info("status", mobile.status())
    local band = zbuff.create(40)
    local band1 = zbuff.create(40)
    mobile.getBand(band)
    log.info("当前使用的band:")
    for i=0,band:used()-1 do
        log.info("band", band[i])
    end
    band1[0] = 38
    band1[1] = 39
    band1[2] = 40
    mobile.setBand(band1, 3)    --改成使用38,39,40
    band1:clear()
    mobile.getBand(band1)
    log.info("修改后使用的band:")
    for i=0,band1:used()-1 do
        log.info("band", band1[i])
    end
    mobile.setBand(band, band:used())    --改回原先使用的band,也可以下载的时候选择清除fs

    mobile.getBand(band1)
    log.info("修改回默认使用的band:")
    for i=0,band1:used()-1 do
        log.info("band", band1[i])
    end
4.1.2 查询 mobile 相关数据
log.info("imei", mobile.imei())
        log.info("imsi", mobile.imsi())
        local sn = mobile.sn()
        if sn then
            log.info("sn",   sn:toHex())
        end
        log.info("status", mobile.status())


        log.info("iccid", mobile.iccid())
        log.info("csq", mobile.csq()) -- 4G模块的CSQ并不能完全代表强度
        log.info("rssi", mobile.rssi()) -- 需要综合rssi/rsrq/rsrp/snr一起判断
        log.info("rsrq", mobile.rsrq())
        log.info("rsrp", mobile.rsrp())
        log.info("snr", mobile.snr())
        log.info("simid", mobile.simid()) -- 这里是获取当前SIM卡槽
        log.info("apn", mobile.apn(0,1))
        log.info("ip", socket.localIP())
        log.info("lua", rtos.meminfo())
        -- sys内存
        log.info("sys", rtos.meminfo("sys"))
4.1.3 订阅查询的信息:
-- 订阅式, 模块本身会周期性查询基站信息,但通常不包含临近小区
sys.subscribe("SCELL_INFO", function()
    log.info("cell", json.encode(mobile.scell()))
end)
-- 基站数据的查询

-- 订阅式, 模块本身会周期性查询基站信息,但通常不包含临近小区
sys.subscribe("CELL_INFO_UPDATE", function()
    log.info("cell", json.encode(mobile.getCellInfo()))
end)
4.1.4 轮询搜索小区信息
-- 轮询式, 包含临近小区信息,这是手动搜索,和上面的自动搜索冲突,开启一个就行
sys.taskInit(function()
    sys.wait(5000)
    mobile.config(mobile.CONF_SIM_WC_MODE, 2)
    while 1 do
        mobile.reqCellInfo(10)
        sys.wait(11000)
        log.info("cell", json.encode(mobile.getCellInfo()))
        mobile.config(mobile.CONF_SIM_WC_MODE, 2)
    end
end)
4.1.5 获取 SIM 卡状态
-- 获取sim卡的状态

sys.subscribe("SIM_IND", function(status, value)
    log.info("sim status", status)
    if status == 'GET_NUMBER' then
        log.info("number", mobile.number(0))
    end
    if status == "SIM_WC" then
        log.info("sim", "write counter", value)
    end
end)

五、功能验证

实现了设置频率和查找到的 mobile 相关参数的功能。

 

六、总结

本 demo 实现了查找和设置 mobile 频段,和获取 imei、imsi、iccid、csq、rssi、rsrq、rsrp、snr 等相关参数。

七、常见问题

1、获取模块 SN

出厂未必有写 SN,一般用途的唯一 id, 可以用 mobile.imei()代替,如需要真正的唯一 ID, 使用 mcu.unique_id()。

2、专网卡如何上网

使用函数 mobile.apn()时,专网卡设置的 demo,name,user,password 联系卡商获取。

mobile.csq()

作用:获取 CSQ。

参数:

返回值:

返回值类型解释
int当前 CSQ 值,失败返回 0。范围 0 - 31,值越大越好
mobile.rssi()

作用:获取 RSSI。

参数:

返回值:

返回值类型解释
int当前 RSSI 值,失败返回 0。范围 0 到 -114,值越小越好

mobile.rsrp()

作用:获取 RSRP(参考信号接收功率)。

参数:

返回值:

返回值类型解释
int当前 RSRP 值,失败返回 0。取值范围 -44 ~ -140,值越大越好

mobile.rsrq()

作用:获取 RSRQ(参考信号发送功率)。

参数:

返回值:

返回值类型解释
int当前 RSRQ 值,失败返回 0。取值范围 -3 ~ -19.5,值越大越好

mobile.snr()

作用:获取 SNR(信噪比)。

参数:

返回值:

返回值类型解释
int当前 SNR 值,失败返回 0。范围 0 - 30,值越大越好

mobile.simid(id, prefer_sim0)

作用:获取当前 SIM 卡槽或切换卡槽。

参数:

参数传入值类型解释
idintSIM 卡的编号,例如 0,1。支持双卡模块可填 2 自适应,但会占用特定 IO 口。如果不填,默认读取当前卡槽
prefer_sim0boolean是否优先使用 SIM0,仅在 SIM 卡编号为 2 时有效。true 表示优先使用 SIM0,false 表示按平台默认设置,必须开机时配置才能有效

返回值:

返回值类型解释
int当前 SIM 卡槽编号,失败返回 -1

mobile.apn(index, cid, new_apn_name, user_name, password, ip_type, protocol, delete_apn)

作用:获取或设置 APN。

参数:

参数传入值类型解释
indexint编号,默认 0。支持双卡的模块上才会出现 0 或 1 的情况
cidintCID,默认 0。如果要使用非默认 APN 激活,必须大于 0
new_apn_namestring新的 APN 名称,不填表示获取 APN,填入表示设置 APN,设置是否支持取决于底层实现
user_namestring新的 APN 的用户名,如果 APN 不为空,必须填写。如果没有则留空 "";如果 APN 为空,则可为 nil
passwordstring新的 APN 的密码,同上
ip_typeint激活 APN 时的 IP 类型,1=IPv4,2=IPv6,3=IPv4v6,默认 1
protocolintAPN 鉴权协议类型,0 表示无,1= PAP,2=CHAP,3=自动选择,默认 3。一般无用户名密码时填 0,有时填 3。如果不行可尝试 1 或 2
delete_apnboolean是否删除 APN,仅当参数 new_apn_name 不为 string 时有效

返回值:

返回值类型解释
string获取到的默认 APN 值,失败返回 nil

mobile.scell()

作用:获取当前服务小区的详细信息。

参数:

返回值:

返回值类型解释
table服务小区的详细信息

mobile.getCellInfo()

作用:获取基站信息。

参数:

返回值:

返回值类型解释
table包含基站数据的数组

mobile.config(item, value)

作用:网络特殊配置。

参数:

参数传入值类型解释
itemint配置项目,参照 mobile.CONF_XXX
valueint配置值,依据具体配置的 item 决定

返回值:

返回值类型解释
boolean是否配置成功

mobile.reqCellInfo(timeout)

作用:发起基站信息查询,包含临近小区信息。

参数:

参数传入值类型解释
timeoutint超时时长,单位秒,默认 15,范围 5 - 60

返回值:

返回值类型解释
nil无返回值

mobile.number(id)

作用:获取手机卡号。

参数:

参数传入值类型解释
idintSIM 卡的编号,例如 0,1,默认 0

返回值:

返回值类型解释
string手机卡号,失败返回 nil
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值