今天我们将探讨如何查找、设置和获取Mobile频段的参数,从介绍到准备等方面进行详细的探索。

1. 4G mobile概述

1.1 简介:4G mobile指的是第四代移动通信技术,常用于描述通过4G网络进行的高速无线数据传输和通信。4G网络最显著的特征是其高速数据传输能力。理论上,4G可以提供下行速率高达100Mbps(移动环境下)和上行速率达50Mbps(静止或低速移动环境下)。

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

1.3 采用技术:4g主要采用正交频分复用技术(OFDM)和多输入多输出技术(MIMO)。OFDM将宽频带划分为多个窄频带,从而提高了频谱的利用效率,并减少了信号间的干扰。它使得4G能够在同样的频谱下传输更多的数据,并具有更强的抗干扰能力。多输入多输出(MIMO)技术也广泛应用于4G网络中。MIMO使用多个天线来同时发送和接收数据,增加了信号的容量和覆盖范围,显著提高了数据传输速率。

关于4gmobile技术的详细使用方法,请参考:https://zh.wikipedia.org/wiki/4G

2. 演示功能概述:本demo演示了查找和设置mobile频段,以及获取相关参数。

3. 准备硬件环境

3.1 开发板准备:需要一个Air780E核心板(详见链接),以及该核心板的使用说明(详见文档链接)。如果在使用过程中遇到任何问题,可以直接参考这份使用说明pdf文档。

3.2 SIM卡:请准备一张可正常上网的SIM卡,该卡可以是物联网卡或您的个人手机卡。特别提醒:请确保SIM卡未欠费且网络功能正常,以便顺利进行后续操作。

3.3 数据通信线:使用typec接口USB数据线即可。

3.4 PC电脑:需要WINDOWS系统。

4. 准备软件环境

4.1 基本的下载调试工具:Luatools下载和详细使用请参考相关文档。

以下是重构后的内容:

# 5. 移动设备的使用资料

## 5.1 源码和工具

在本教程中,我们将使用LuatOS-SoC_V1112_EC618_FULL.soc固件版本以及LuatOS-Air780E模块。你可以在合宙文档中心找到SDK和Demo的相关信息。

本教程使用的demo链接如下:

https://gitee.com/openLuat/LuatOS-Air780E/tree/master/demo/mobile

将固件和脚本烧录到模块中,使用说明参考:Luatools下载和详细使用。源码和固件已打包,你可以点击这里下载完整压缩文件包。

## 5.2 常量消息

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

常量|类型|解释

---|---|---

mobile.UNREGISTER|number|未注册

mobile.REGISTERED|number|已注册

mobile.SEARCH|number|正在搜索中

mobile.DENIED|number|注册被拒绝

mobile.UNKNOW|number|未知

mobile.REGISTERED_ROAMING|number|已注册,漫游

mobile.SMS_ONLY_REGISTERED|number|已注册,仅SMS

mobile.SMS_ONLY_REGISTERED_ROAMING|number|已注册,漫游,仅SMS

mobile.EMERGENCY_REGISTERED|number|已注册,紧急服务

mobile.CSFB_NOT_PREFERRED_REGISTERED|number|已注册,非主要服务

mobile.CSFB_NOT_PREFERRED_REGISTERED_ROAMING|number|已注册,非主要服务,漫游

mobile.CONF_RESELTOWEAKNCELL|number|小区重选信号差值门限,需要飞行模式设置

mobile.CONF_STATICCONFIG|number|网络静态模式优化,需要飞行模式设置

mobile.CONF_QUALITYFIRST|number|网络切换以信号质量优先,需要飞行模式设置,0不开,1开启,2开启并加速切换,功耗会增加

mobile.CONF_USERDRXCYCLE

.3 本demo使用api简介

以下是本demo使用的API简介:

1. mobile.status():获取网络状态。

参数:无。

返回值:整型,表示当前网络状态。

重构后的内容如下:

```java

/**

* 获取当前使用/支持的band

* @param band 输出band

* @param is_default true默认支持,false当前支持的,默认是false,当前是预留功能,不要写true

* @return 成功返回true,失败返回false

*/

public boolean getBand(int band, boolean is_default) {

// 实现代码

}

/**

* 设置使用的band

* @param band 输入使用的band

* @param num band数量

* @return 成功返回true,失败返回false

*/

public boolean setBand(int band, int num) {

// 实现代码

}

/**

* 进出飞行模式

* @param index 编号,默认0.在支持双卡的模块上才会出现0或1的情况

* @param enable 是否设置为飞行模式,true为设置,false为退出,可选

* @return 原飞行模式的状态

*/

public boolean flymode(int index, boolean enable) {

// 实现代码

}

/**

* 切换内置虚拟卡和外置实体卡,2024年8月13日启用,虚拟卡需要固件支持,否则切换后无网络,需要在飞行模式下切换,或者切换后重启协议栈。

* @param enable 开启,true开启,false关闭

*/

public void vsimOnOff(boolean enable) {

// 实现代码

}

/**

* 获取到的默认APN值,失败返回nil

* @return APN值或nil

*/

public String getDefaultApn() {

// 实现代码

}

/**

* 设置RRC自动释放时间间隔,当开启时后,遇到极弱信号+频繁数据操作可能会引起网络严重故障,因此需要额外设置自动重启协议栈。

* @param time RRC自动释放时间,等同于Air724的AT+RTIME,单位秒,写0或者不写则是停用,不要超过20秒,没有意义

* @param auto_reset_stack 网络遇到严重故障时尝试自动恢复,和飞行模式/SIM卡切换冲突,true开启,false关闭,留空时,如果设置了时间则自动开启。本参数于2023年9月14日已废弃

* @param data_first 未提供具体含义的参数

*/

public void rtime(int time, boolean auto_reset_stack, boolean data_first) {

// 实现代码

}

```

是否启用数据传输优化,true启用,false关闭,留空为false,开启后必须等到TCP数据ACK或者超时失败,或者socketCONNECT完成(无论成功或者失败)才允许RRC提前释放,可能会增加功耗。本参数于2024年8月12日启用

返回值:

返回值类型

解释

nil

无返回值

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

作用:设置一些辅助周期性或者自动功能,目前支持SIM卡暂时脱离后恢复,周期性获取小区信息,网络遇到严重故障时尝试自动恢复。

参数:

传入值类型

解释

int

SIM卡自动恢复时间,单位毫秒,建议5000~10000,和飞行模式/SIM卡切换冲突,不能再同一时间使用,必须错开执行。写0或者不写则是关闭功能

int

周期性获取小区信息的时间间隔,单位毫秒。获取小区信息会增加部分功耗。写0或者不写则是关闭功能

int

每次搜索小区时最大搜索时间,单位秒。不要超过8秒

boolean

网络遇到严重故障时尝试自动恢复,和飞行模式/SIM卡切换冲突,true开启,false关闭,开始状态是false,留空则不做改变

int

设置定时检测网络是否正常并且在检测到长时间无网时通过重启协议栈来恢复,无网恢复时长,单位ms,建议60000以上,为网络搜索保留足够时间,留空则不做更改

返回值:

返回值类型

解释

nil

无返回值

mobile.imei(index)

获取:获取IMEI。

参数:

传入值类型

解释

int

编号,默认0.在支持双卡的模块上才会出现0或1的情况

返回值:

返回值类型

解释

string

当前的IMEI值,若失败返回nil

mobile.imsi(index)

作用:获取IMSI。

参数:

传入值类型

解释

int

编号,默认0.在支持双卡的模块上才会出现0或1的情况

返回值:

返回值类型

解释

string

当前的IMSI值,若失败返回nil

mobile.iccid(id)

作用:获取或设置ICCID。

参数:

传入值类型

解释

int

SIM卡的编号,例如0,1,默认0

返回值:

返回值类型

解释

string

ICCID值,若失败返回nil

mobile.csq()

重构后的内容如下:

```python

def get_csq():

# 获取当前CSQ值,若失败返回0.范围0-31,越大越好

pass

def get_rssi():

# 获取当前rssi值,若失败返回0.范围0到-114,越小越好

pass

def get_rsrp():

# 获取当前rsrp值,若失败返回0.取值范围:-44~-140,值越大越好

pass

def get_rsrq():

# 获取当前rsrq值,若失败返回0.取值范围:-3~-19.5,值越大越好

pass

def get_snr():

# 获取当前snq值,若失败返回0.范围0-30,越大越好

pass

def get_simid(id=None):

# 获取当前SIM卡槽,或者切换卡槽。传入参数以表格中的为准。

id = id if id is not None else ...

...

```

新的APN的username,如果APN不是空,那必须填写,如果没有则留空字符串"\"。如果APN是空的,则可以为nil

string

新的APN的password,如果APN不是空,那必须填写,如果没有则留空字符串"\"。如果APN是空的,则可以为nil

int

激活APN时的IPTYPE,1=IPV4,2=IPV6,3=IPV4V6,默认是1

int

激活APN时,如果需要username和password,就要写鉴权协议类型(0没有,1:PAP,2:CHAP),1~3,默认3。一般没有用户名密码的写0,反之写3,如果不行1和2都可以尝试。不需要鉴权的写0

boolean

是否删除APN,true表示是,其他都否。只有参数3新的APN不是string的时候才有效

返回值:

返回值类型

解释

string

获取到的默认APN值,失败返回nil

mobile.scell()

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

参数:

返回值:

返回值类型

解释

table

服务小区的信息

mobile.getCellInfo()

作用:获取基站信息。

参数:

返回值:

返回值类型

解释

table

包含基站数据的数组

mobile.config(item,value)

作用:网络特殊配置。

参数:

传入值类型

解释

int

配置项目,看mobile.CONF_XXX

int

配置值,根据具体配置的item决定

返回值:

返回值类型

解释

boolean

是否成功

mobile.reqCellInfo(timeout)

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

参数:

传入值类型

解释

int

超时时长,单位秒,默认15。最少5,最高60

返回值:

返回值类型

解释

nil

无返回值

mobile.number(id)

作用:获取手机卡号,注意,只有写入了手机号才能读出,因此有可能读出来是空的。

参数:

传入值类型

解释

int

SIM卡的编号,例如0,1,默认0

返回值:

返回值类型

解释

、功能验证

在本次demo中,实现了以下功能:

- 设置频率:通过调用相应的函数来设置所需的mobile频段。

- 查找相关参数:利用查找到的mobile相关参数,如imei、imsi、iccid、csq、rssi、rsrq、rsrp和snr等参数。

8、总结

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

9、常见问题

9.1 获取模块SN

出厂时可能未写入SN(序列号),通常SN是唯一标识符。在这种情况下,可以使用`mobile.imei()`函数作为替代方案。如果需要真正的唯一ID,请使用`mcu.unique_id()`函数。

9.2 专网卡如何上网

在使用`mobile.apn()`函数设置专网卡时,需要提供name、user和password参数。这些参数可以通过与卡商联系获取。