移远QuecPython(基于EC600s)开发物联网应用(七) QuecPython通讯相关模块

一. 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)
# 上面使用的密钥仅为测试密钥

你可能感兴趣的:(移远QuecPython(基于EC600s)开发物联网应用(七) QuecPython通讯相关模块)