一. sim --SIM卡模块
import sim
1. 获取sim卡的imsi
sim.getImsi()
参数
无返回值
成功返回string类型的imsi,失败返回整型-1。
2. 获取sim卡的iccid
sim.getIccid()
参数
无返回值
成功返回string类型的iccid,失败返回整型-1。
3. 获取sim卡的电话号
sim.getPhoneNumber()
参数
无返回值
成功返回string类型的phone number,失败返回整型-1。
4. 获取sim卡的状态
sim.getStatus()
5. 启用sim卡PIN码验证
启用sim卡PIN码验证,开启后需要输入正确的PIN验证成功后,sim卡才能正常使用。只有3次输入PIN码机会,3次都错误,sim卡被锁定,需要PUK来解锁。
sim.enablePin(pin)
成功返回整型0,失败返回整型-1。
6. 关闭sim卡PIN码验证
sim.disablePin(pin)
7. sim卡PIN码验证
sim.verifyPin(pin)
8. sim卡解锁
sim卡解锁。当多次错误输入 PIN/PIN2 码后,SIM 卡状态为请求 PUK/PUK2 时,输入 PUK/PUK2 码和新的 PIN/PIN2 码进行解锁,puk码输入10次错误,SIM卡将被永久锁定自动报废。
sim.unblockPin(puk, newPin)
9. 更改sim卡PIN码
sim.changePin(oldPin, newPin)
10. 获取 SIM 卡上指定电话本中的一条或多条电话号码记录
sim.readPhonebook(storage, start, end, username)
11. 写入一条电话号码记录
sim. writePhonebook(storage, index, username, number)
二. dataCall - 数据拨号
模块功能:提供数据拨号相关接口。
import dataCall
1. 启动拨号,进行数据链路激活
我的模块是自动拨号上网的, 我也不知道中国电信的apn该怎么设
dataCall.start(profileIdx, ipType, apn, username, password, authType)
#举例:
dataCall.start(1, 0, "3gnet.mnc001.mcc460.gprs", "", "", 0)
2. 获取数据拨号信息
dataCall.getInfo(profileIdx, ipType)
返回值
错误返回整型-1,成功返回拨号信息,返回格式根据ipType的不同而有所区别:
-
ipType =0,返回值格式如下:
(profileIdx, ipType, [nwState, reconnect, ipv4Addr, priDns, secDns])- profileIdx:PDP索引,取值1-8
- ipType:IP类型,0-IPV4,1-IPV6,2-IPV4和IPV6
- nwState:拨号结果,0-失败,1-成功
- reconnect:重拨标志
- ipv4Addr:ipv4地址
- priDns:dns信息
- secDns:dns信息
-
ipType =1,返回值格式如下:
(profileIdx, ipType, [nwState, reconnect, ipv6Addr, priDns, secDns])
- profileIdx:PDP索引,取值1-8
- ipType:IP类型,0-IPV4,1-IPV6,2-IPV4和IPV6
- nwState:拨号结果,0-失败,1-成功
- reconnect:重拨标志
- ipv6Addr:ipv6地址
- priDns:dns信息
- secDns:dns信息
-
ipType =2,返回值格式如下:
(profileIdx, ipType, [nwState, reconnect, ipv4Addr, priDns, secDns], [nwState, reconnect, ipv6Addr, priDns, secDns])
3. apn信息配置接口
dataCall.setApn(profileIdx, ipType, apn, username, password, authType)
用户apn信息配置接口,用户调用该接口后,会在用户分区目录下创建user_apn.json文件,用于保存用户apn信息,并使用该apn信息启动拨号,进行数据链路激活
4. 用户回调函数
dataCall.setCallback(usrFun)
注册用户回调函数,当网络状态发生变化,比如断线、上线时,会通过该回调函数通知用户
>>> import dataCall
>>> import net
>>> def nw_cb(args):
pdp = args[0]
nw_sta = args[1]
if nw_sta == 1:
print("*** network %d connected! ***" % pdp)
else:
print("*** network %d not connected! ***" % pdp)
>>> dataCall.setCallback(nw_cb)
0
>>> net.setModemFun(4) # 进入飞行模式
0
>>> *** network 1 not connected! *** # 进入飞行模式导致断网,通过回调告知用户
>>> net.setModemFun(1) # 退出飞行模式
0
>>> *** network 1 connected! *** # 退出飞行模式,自动拨号,等待联网成功,通过回调告知用户
三. net - 网络相关功能
1. 获取csq信号强度
net.csqQueryPoll()
成功返回整型的csq信号强度值,失败返回整型值-1,返回值为99表示异常;
信号强度值范围0~31,值越大表示信号强度越好。
2. 获取详细信号强度
net.getSignal()
失败返回整型值-1,成功返回一个元组,包含两个List(GW 、LTE),返回值格式如下:
([rssi, bitErrorRate, rscp, ecno], [rssi, rsrp, rsrq, cqi])
返回值参数说明:
- GW list:
- rssi :接收的信号强度
- bitErrorRate :误码率
- rscp :接收信号码功率
- ecno :导频信道
- LTE list:
- rssi :接收的信号强度
- rsrp :下行参考信号的接收功率
- rsrq :下行特定小区参考信号的接收质量
- cqi :信道质量
3. 获取当前工作模式模式
net.getModemFun()
成功返回当前SIM模式:
0 :全功能关闭
1 :全功能开启(默认)
4 :飞行模式
失败返回整型值-1。
4. 设置当前SIM模式
net.setModemFun(function, rst)
5. 获取当前基站时间
net.nitzTime()
失败返回整型值-1,成功返回一个元组,包含基站时间与对应时间戳与闰秒数(0表示不可用)
6. 获取当前注网的运营商信息
net.operatorName()
格式为:
(long_eons, short_eons, mcc, mnc)
- long_eons :运营商信息全称,string类型
- short_eons :运营商信息简称,string类型
- mcc :移动设备国家代码,string类型
- mnc :移动设备网络代码,string类型
7. 获取当前网络注册信息
net.getState()
失败返回整型值-1,成功返回一个元组,包含注网的网络注册信息. 格式为:
([voice_state, voice_lac, voice_cid, voice_rat, voice_reject_cause, voice_psc], [data_state, data _lac, data _cid, data _rat, data _reject_cause, data _psc])
state :网络注册状态
lac :位置区码
cid :int类型id信息
rat :注网制式
reject_cause :注册被拒绝的原因
psc :Primary Scrambling Code
8. 获取附近小区ID
net.getCi()
成功返回一个list类型的数组,包含小区id,格式为:[id, ……, id]。数组成员数量并非固定不变,位置不同、信号强弱不同等都可能导致获取的结果不一样。
失败返回整型值-1。
9. 获取附近小区的mnc
net.getMnc()
成功返回一个list类型的数组,包含小区mnc,格式为:[mnc, ……, mnc]。数组成员数量并非固定不变,位置不同、信号强弱不同等都可能导致获取的结果不一样。
失败返回整型值-1
10. 获取附近小区的mcc
net.getMcc()
成功返回一个list类型的数组,包含小区mcc,格式为:[mcc, ……, mcc]。数组成员数量并非固定不变,位置不同、信号强弱不同等都可能导致获取的结果不一样。
失败返回整型值-1
11. 获取附近小区的Lac
net.getLac()
成功返回一个list类型的数组,包含小区lac,格式为:[lac, ……, lac]。数组成员数量并非固定不变,位置不同、信号强弱不同等都可能导致获取的结果不一样。
失败返回整型值-1
12. 获取邻近基站的信息
net.getCellInfo()
失败返回整型值-1,成功返回包含三种网络系统(GSM、UMTS、LTE)的信息的list,如果对应网络系统信息为空,则返回空的List。返回值格式如下:([(flag, cid, mcc, mnc, lac, arfcn, bsic, rssi)], [(flag, cid, licd, mcc, mnc, lac, arfcn, bsic, rssi)], [(flag, cid, mcc, mnc, pci, tac, earfcn, rssi),...])
13. 获取当前网络模式、漫游配置
net.getConfig()
失败返回整型值-1,成功返回一个元组,包含当前首选的网络制式与漫游打开状态。
14. 设置网络模式、漫游配置
net.setConfig(mode, roaming)
15. 获取网络配置模式
net.getNetMode()
失败返回整型值-1,成功返回一个元组,格式为:(selection_mode, mcc, mnc, act)
返回值参数说明: selection_mode :方式,0 - 自动,1 - 手动 mcc :移动设备国家代码 mnc :移动设备网络代码 act :首选网络的ACT模式
四. checkNet - 等待网络就绪
模块功能:checkNet模块主要用于【开机自动运行】的用户脚本程序,该模块提供API用来阻塞等待网络就绪,如果超时或者其他异常退出会返回错误码,所以如果用户的程序中有涉及网络相关的操作,那么在用户程序的开始应该调用 checkNet 模块中的方法以等待网络就绪。
import checkNet
1. 创建checkNet.CheckNetwork 对象
import checkNet
PROJECT_NAME = "QuecPython_Math_example"
PROJECT_VERSION = "1.0.0"
checknet = checkNet.CheckNetwork(PROJECT_NAME, PROJECT_VERSION)
创建checkNet对象。PROJECT_NAME 和 PROJECT_VERSION 是必须有的两个全局变量,用户可以根据自己的需要修改这两个变量的值。
2.开机时打印一些信息
checknet.poweron_print_once()
开机时打印一些信息,主要用于提示用户。打印内容如下:
PROJECT_NAME : 用户项目名称 PROJECT_VERSION : 用户项目版本号 FIRMWARE_VERSION : 固件版本号 POWERON_REASON : 开机原因 SIM_CARD_STATUS : SIM卡状态
3. 阻塞等待网络就绪
checknet.wait_network_connected(timeout)
阻塞等待网络就绪。超时时间内,只要检测到拨号成功,则会立即返回,否则阻塞到超时时间到才会退出。
4. 举例: 开机注网耗时统计
我们把下面的代码写入main.py
, 使其开机运行
import checkNet
import utime
PROJECT_NAME = "熊爸的quecpython联网测试"
PROJECT_VERSION = "1.0.0"
checknet = checkNet.CheckNetwork(PROJECT_NAME, PROJECT_VERSION)
time_spot1=utime.ticks_ms()
stagecode, subcode = checknet.wait_network_connected(30)
checknet.poweron_print_once()
if stagecode == 3:
time_spot2=utime.ticks_ms()
time_span = utime.ticks_diff(time_spot2, time_spot1)
print('开机注网耗时:',time_span)
else:
print('联网失败')
五. cellLocator - 基站定位
提供基站定位接口,获取坐标信息
注意: 此功能是收费功能
cellLocator.getLocation(serverAddr, port, token, timeout, profileID)
import cellLocator
cellLocator.getLocation("www.queclocator.com", 80, "1111111122222222", 8, 1)
# 上面使用的密钥仅为测试密钥