diff --git a/docs/sbs/zh/QuecPythonPlatform/media/Qp_modem_get_dev_info_01.png b/docs/sbs/zh/QuecPythonPlatform/media/Qp_modem_get_dev_info_01.png new file mode 100644 index 0000000000000000000000000000000000000000..898c2ff0b615f66e26166a8465b661ecd07db57e Binary files /dev/null and b/docs/sbs/zh/QuecPythonPlatform/media/Qp_modem_get_dev_info_01.png differ diff --git a/docs/sbs/zh/QuecPythonPlatform/media/Qp_modem_get_dev_info_02.png b/docs/sbs/zh/QuecPythonPlatform/media/Qp_modem_get_dev_info_02.png new file mode 100644 index 0000000000000000000000000000000000000000..4754b01a58814167259f5236522573f1ebc9ec78 Binary files /dev/null and b/docs/sbs/zh/QuecPythonPlatform/media/Qp_modem_get_dev_info_02.png differ diff --git a/docs/sbs/zh/QuecPythonPlatform/modem_get_dev_info.md b/docs/sbs/zh/QuecPythonPlatform/modem_get_dev_info.md new file mode 100644 index 0000000000000000000000000000000000000000..4f7338400ae55916846340aec67fd416585d6e72 --- /dev/null +++ b/docs/sbs/zh/QuecPythonPlatform/modem_get_dev_info.md @@ -0,0 +1,102 @@ + +## **QuecPython modem 获取设备信息** + +## 修订历史 + +| Version | Date | Author | Change expression | +| ------- | ---------- | ---------- | ----------------- | +| 1.0 | 2021-09-15 | David.Tang | Initial version | + +## 前言 + +本文主要基于EC600U-CN介绍如何使用QuecPython modem模块获取设备信息。通过本文您将了解到EC600U-CN线程的所有设置参数及使用方法。 + +## 软件设计 + +软件设计主要参考官网的wiki,具体位置为:[modem_API库](https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=%e8%8e%b7%e5%8f%96%e8%ae%be%e5%a4%87%e7%9a%84imei) + +## 交互操作 + +使用QPYcom工具和EC600S-CN进行交互,具体如下: + +```Python +>>> import modem +>>> help(modem) +object is of type module + __name__ -- modem + getDevSN -- + getDevImei -- + getDevModel -- + getDevFwVersion -- + getDevProductId -- +>>> from modem import * +>>> getDevSN() +'D1D20J60A0017870P' +>>> getDevImei() +'868540050393723' +>>> getDevModel() +'EC600S' +>>> getDevFwVersion() +'EC600SCNAAR01A01M16_OCPU_PY_BETA1211' +>>> getDevProductId() +'Quectel' +``` + +注意: + +1. import modem即为让 modem模块在当前空间可见。 + +2. 只有import modem模块,才能使用 modem内的函数和变量。 + +## 下载验证 + +#### 软件代码 + +下载.py文件到EC600S-CN上运行,代码如下: + +```python +import modem +import log + +state = 1 +log.basicConfig(level=log.INFO) # 设置日志输出级别 + +log = log.getLogger("QuecPython") + +def modem_msg(): + global state + modem_Imei = modem.getDevImei() + modem_DevModel = modem.getDevModel() + modem_DevSN = modem.getDevSN() + modem_DevFwVersion = modem.getDevFwVersion() + modem_DevProductId = modem.getDevProductId() + log.info("modem_Imei:{}".format(modem_Imei)) + log.info("modem_DevModel:{}".format(modem_DevModel)) + log.info("modem_DevSN:{}".format(modem_DevSN)) + log.info("modem_DevFwVersion:{}".format(modem_DevFwVersion)) + log.info("modem_DevProductId:{}".format(modem_DevProductId)) + state = 0 + +if __name__ == "__main__": + modem_msg() + while 1: + if state: + pass + else: + break +``` + +#### 硬件连接 + +无需硬件连接 + +#### 运行效果 + +打开QPYcom运行*modem_file.py*,如下图: + +![image-20210915170111036](media/Qp_modem_get_dev_info_01.png) + +运行结果如下: + +![image-20210915165947749](media/Qp_modem_get_dev_info_02.png) + diff --git a/docs/sbs/zh/QuecPythonWirelessNetwork/media/Qp_Sim_fun_01.png b/docs/sbs/zh/QuecPythonWirelessNetwork/media/Qp_Sim_fun_01.png new file mode 100644 index 0000000000000000000000000000000000000000..5e6bbcc8267d8a34062af3cf1913fa79e393e4f4 Binary files /dev/null and b/docs/sbs/zh/QuecPythonWirelessNetwork/media/Qp_Sim_fun_01.png differ diff --git a/docs/sbs/zh/QuecPythonWirelessNetwork/media/ntp_01.png b/docs/sbs/zh/QuecPythonWirelessNetwork/media/ntp_01.png new file mode 100644 index 0000000000000000000000000000000000000000..d3ff00fe6989a40b433d3c2a88feb41cdd47908f Binary files /dev/null and b/docs/sbs/zh/QuecPythonWirelessNetwork/media/ntp_01.png differ diff --git a/docs/sbs/zh/QuecPythonWirelessNetwork/media/ntp_02.png b/docs/sbs/zh/QuecPythonWirelessNetwork/media/ntp_02.png new file mode 100644 index 0000000000000000000000000000000000000000..cf01c852045c1a2b91b96c5498b7143e31ef16bc Binary files /dev/null and b/docs/sbs/zh/QuecPythonWirelessNetwork/media/ntp_02.png differ diff --git a/docs/sbs/zh/QuecPythonWirelessNetwork/media/ntp_03.png b/docs/sbs/zh/QuecPythonWirelessNetwork/media/ntp_03.png new file mode 100644 index 0000000000000000000000000000000000000000..01a07df983814ad728c799bfb93d48d33662da4a Binary files /dev/null and b/docs/sbs/zh/QuecPythonWirelessNetwork/media/ntp_03.png differ diff --git a/docs/sbs/zh/QuecPythonWirelessNetwork/media/ntp_04.png b/docs/sbs/zh/QuecPythonWirelessNetwork/media/ntp_04.png new file mode 100644 index 0000000000000000000000000000000000000000..ced3c491f839bb0aaf03315e37ba1433a7ba430d Binary files /dev/null and b/docs/sbs/zh/QuecPythonWirelessNetwork/media/ntp_04.png differ diff --git a/docs/sbs/zh/QuecPythonWirelessNetwork/media/ntp_05.png b/docs/sbs/zh/QuecPythonWirelessNetwork/media/ntp_05.png new file mode 100644 index 0000000000000000000000000000000000000000..489fc4e8e019475afad73bbde61b4f09212d1f3f Binary files /dev/null and b/docs/sbs/zh/QuecPythonWirelessNetwork/media/ntp_05.png differ diff --git a/docs/sbs/zh/QuecPythonWirelessNetwork/media/sim_02.png b/docs/sbs/zh/QuecPythonWirelessNetwork/media/sim_02.png new file mode 100644 index 0000000000000000000000000000000000000000..5e6bbcc8267d8a34062af3cf1913fa79e393e4f4 Binary files /dev/null and b/docs/sbs/zh/QuecPythonWirelessNetwork/media/sim_02.png differ diff --git a/docs/sbs/zh/QuecPythonWirelessNetwork/media/sim_03.png b/docs/sbs/zh/QuecPythonWirelessNetwork/media/sim_03.png new file mode 100644 index 0000000000000000000000000000000000000000..c69de7da003570f058d13bfe7394e6e9202f518b Binary files /dev/null and b/docs/sbs/zh/QuecPythonWirelessNetwork/media/sim_03.png differ diff --git a/docs/sbs/zh/QuecPythonWirelessNetwork/ntp.md b/docs/sbs/zh/QuecPythonWirelessNetwork/ntp.md new file mode 100644 index 0000000000000000000000000000000000000000..2720cf9892c0e44ae4241b423daa062cbca14948 --- /dev/null +++ b/docs/sbs/zh/QuecPythonWirelessNetwork/ntp.md @@ -0,0 +1,81 @@ +## 修订历史 +| 版本 | 日期 | 作者 | 变更表述 | +|------|------|------|------| +| 1.0 | 2021-4-1 | gary.zhou | 初版 | +| 1.1 | 2021-9-15 | David.Tang | 略作检查与修改 | + +## 前言 + +本文主要介绍NTP使用指导。 + +## 概述 + +NTP又称网络时间协议,用于同步计算机时间的一种协议。该协议可以使计算机对其服务器或时钟源(如石英钟,GPS等等)进行同步,同时提供高精准度的时间校正(LAN上与标准时间差小于 1 毫秒,WAN上与标准时间差大约有几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。NTP的目的是在无序的互联网环境中提供精确和健壮的时间服务。 + +NTP提供准确时间,首先要有准确的时间来源,即国际标准时间UTC。NTP获得UTC的时间来源可以是原子钟、天文台、卫星,也可以从互联网上获取。时间按NTP服务器的等级传播,按照离外部UTC时间源的远近将所有服务器归入不同的Stratum(层)中。Stratum- 1 在顶层,有外部UTC接入;Stratum- 2从Stratum- 1 获取时间;Stratum- 3 从Stratum- 2 获取时间,......,以此类推,但Stratum的总数限制在 15以内。所有这些服务器在逻辑上形成阶梯式的架构相互连接,而Stratum- 1 的时间服务器是整个系统的基础。计算机主机一般同多个时间服务器连接,利用统计学的算法过滤来自不同服务器的时间,以选择最佳的路径和来源来校正主机时间,即使主机在长时间无法与某一时间服务器相联系的情况下,NTP服务依然有效运转。 + +为防止对时间服务器的恶意破坏,NTP使用了识别(Authentication)机制,检查来对时的信息是否是真正来自所宣称的服务器并检查资料的返回路径,以提供对抗干扰的保护机制。NTP时间同步报文中包含的时间是格林威治时间,是从 1900 年开始计算的秒数。 + +## API介绍 + +具体的API详解请参考[QuecPython-ntptime-NTP对时](https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonThirdlib?id=ntptime-ntp对时) + +## 功能实现 + +NTP对时需要从NTP服务器上获取时间,故在实现NTP对时功能之前需连接网络。本文档以通过SIM卡进行联网为例。 + +### 操作一: +准备一张可用的SIM卡,插入SIM卡后通电,等待自动拨号。以EC600S-CN为例,EC600S_QuecPython_EVB_V1.1开发板配备的是NANO SIM卡座,自弹式,触点向下,缺口向内。SIM卡槽位置如图所示: + +![](media/ntp_01.png) + + ​ 图 1 :插入SIM卡 + +自动拨号后,可通过如下方法验证是否拨号成功: + +![](media/ntp_02.png) + +​ 图 2 :自动拨号成功验证 + +### 操作二: + +拨号成功后,导入ntptime模块,返回当前的NTP服务器,默认为"ntp.aliyun.com"。 + +![](media/ntp_03.png) + + ​ 图 3 :当前NTP服务器 + +### 操作三: + +设置NTP服务器。设置成功返回 0 ,设置失败返回- 1 。 + +![](media/ntp_04.png) + + ​ 图 4 :设置NTP服务器 + +### 操作四: + +使用 ntptime.settime() 同步NTP时间。同步成功返回 0 ,同步失败返回- 1 。 + +对时结果可使用utime.localtime()验证。执行utime.localtime()后返回当前时间,返回值为一个元组:(year, month, mday, hour, minute, second, weekday, yearday)。具体的API详解请参考[QuecPython-utime-与时间相关功能](https://python.quectel.com/wiki/#/zh-cn/api/pythonStdlib?id=utime-与时间相关功能)。 + +ntptime.settime()对时后返回时间为UTC时间,北京时间领先UTC八个小时,所以对时后,对比当前时间可发现时间后退八小时。 + +![](media/ntp_05.png) + + ​ 图 5 :对时成功 + +## 附录术语缩写 + +表 1 :术语缩写 + +|术语 | 英文描述 | 中文描述 | +| ---------- | --------------------------------- |----------- | +| GPS | Global Positioning System | 全球定位系统| +| LAN | Local Area Network | 局域网| +| NTP | Network Time Protocol | 网络时间协议| +| RTC | Real_Time Clock | 实时时钟| +| SIM | Subscriber Identity Module | 用户身份识别模块| +| UTC | Coordinated Universal Time | 协调世界时| +| WAN | Wide Area Network | 广域网| + diff --git a/docs/sbs/zh/QuecPythonWirelessNetwork/sim.md b/docs/sbs/zh/QuecPythonWirelessNetwork/sim.md new file mode 100644 index 0000000000000000000000000000000000000000..6c931616a6e34442c2e0a28b9df1f1ac5aa03d1d --- /dev/null +++ b/docs/sbs/zh/QuecPythonWirelessNetwork/sim.md @@ -0,0 +1,137 @@ +## 修订记录 + +| 版本 | 日期 | 作者 | 变更表述 | +| ---- | ---------- | ------ | ------------ | +| 1.0 | 2021-09-13 | Kayden | 初始版本修订 | + +## 前言 + +本文主要简介QuecPython SIM卡模块的使用。 具体的API 详解请参考[QuecPython_SIM](https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=sim-sim%e5%8d%a1) + +## SIM卡基本概述 + +SIM 分为手机卡和物联网卡。区别就是物联网卡没有电话号码不能收发短信,手机可以发短信。 常见的是手机卡。 + +第二代标准的Mini卡,国内用户俗称的大卡。 + +第三代标准的Micro卡,俗称小卡。 + +第四代标准的Nano卡。 + +Qp_Sim_fun_01 + +sim_02 + +需要的是第四代标准的 Nano 卡。 + +## 快速开始 +获取sim 卡信息之前,请首先确认sim卡状态是否完好, +```python +import sim +# 返回状态1 表示状态正确,其他错误码,请查阅 WIKI SIM API +sim.getStatus() +``` +### 获取imsi +IMSI全称为 Internation Mobile Subscriber Identity,即国际移动用户识别码。 + +- 前三位数字代表移动国家代码(MCC)。 +- 接下来的两位或三位数字代表移动网络代码(MNC)。E.212允许使用三位数的MNC代码,但主要在美国和加拿大使用。 +- 接下来的数字代表移动用户识别号(MSIN)。 +```python +import sim +sim.getImsi() +``` +### 获取iccid +ICCID全称为Integrated Circuit Card Identifier,即集成电路卡识别码。 + +- 可以简单理解为SIM卡的卡号(身份证号)。 + +- 编码格式为:XXXXXX 0MFSS YYGXX XXXX。 + +- 前六位运营商代码: + + 中国移动的为:898600;898602;898604;898607 , + + 中国联通的为:898601、898606、898609, + + 中国电信898603、898611。 +```python +import sim +sim.iccid() +``` + +### PIN码操作 + PIN码(PIN1)是电信名词,全称**Personal Identification Number**。是指SIM卡的个人识别密码. +手机的PIN码是保护SIM卡的一种安全措施,防止别人盗用SIM卡,如果启用了开机PIN码,那么每次开机后就要输入**4-8**位数PIN码。当输入PIN码错误超过三次时,将自动锁卡保护。解锁需要使用PUK码拨打运营商客服热线.需要注意的是,如果输入三次PIN码错误,手机便会自动锁卡,并提示输入PUK码解锁,这个时候已经接近了危险的边缘,如果你不知道你的PUK码就暂时不要动了,拿上服务密码拨打客服热线,客服会告诉你初始的PUK码,输入PUK码之后就会解锁PIN,就可以重置密码了。如果擅自修改了PIN码,一定要牢记。 + +#### PIN1码 + PIN1码是个人识别码。是SIM卡内部的一个存储单元,通过手机设置。 +开机时会要求输入PIN1码,错误地输入PIN1码3次,将会导致“锁卡”现象。此时需要运营商提供PUK码在手机键盘上输入,就可以解锁。如果错误输入PUK码10次,就会“烧卡”,您必须带机主有效证件到运营网络的营业厅补卡。 + +#### PIN2码 + 您的手机上如果显示“PIN2码限制通话”可能是由于您开启了PIN2码的相关功能, +但由于网络暂不支持PIN2码的相关功能,即便开启也不能使用其功能。如不慎将PIN2码锁死,也不会影响手机的正常使用,请您携带机主的有效证件到运营服务商营业厅办理免费解锁服务。启用sim卡PIN码验证,开启后需要输入正确的PIN验证成功后,sim卡才能正常使用。只有3次输入PIN码机会,3次都错误,sim卡被锁定,需要PUK来解锁。 + +#### 使能验证Pin码 +```python +import sim +# 1234 修改成为你的 Pin码, 一般是 4到8位,此类操作,请慎重。 +sim.enablePin("1234") +# 在使能 pin码以后,才能进行验证 Pin +sim.verifyPin("1234") +# 关闭Pin码 +sim.disablePin("1234") +``` +#### 修改PIN码 +```python +import sim +# 1234 为 久的PIN码, 4321 为 新的PIN码 +sim.changePin("1234", "4321") +``` + +### 重置pin码-PUK码 +当错误输入Pin码次数过多以后,不能再输入PIN码。此时需要使用PUK码来解锁。 + +#### PUK1码 +PUK码(PUK1)由8位数字组成 ,这是用户无法更改的,只有补换SIM卡后PUK码才会变更。当手机PIN码被锁,并提示输入PUK码时。千万不要轻举妄动,因为PUK码只有10次输入机会,10次都输错的话,SIM卡将会被永久锁死,也就是报废。部分SIM卡的PUK码是用户在购卡时随卡附带的。 + +#### PUK2码 +PIN2码是电信局用于计费的,一般不向用户提供 。如果输入三次错误,手机会需要用PUK2码解锁,过程与先前介绍的PIN码、PUK码相同。不过这两种密码与网络计费及SIM卡内部资料的修改有关,所以不会公开,而且即便PIN2密码锁死,也不会影响手机的正常使用。**因此,PIN2码和PUK2码不必去刻意理会**。 + +#### 解锁PIN码 +```python +import sim +# 12345678 为 PUK码, 0000 为新的 PIN码 +sim.unblockPin("12345678", "0000") +``` + +### 读写SIM内存区域 + +#### Phonebook Memory Storage +Phonebook Memory Storage即为SIM卡电话薄存储区域。详情可参考 [ts_127007v100300p.pdf](https://www.etsi.org/deliver/etsi_ts/127000_127099/127007/10.03.00_60/ts_127007v100300p.pdf) +![sim_03](media/sim_03.png) + +```python +>>> import sim +>>> sim.getStatus() +1 +>>> sim.getImsi() +'460110847679419' +>>> sim.getIccid() +'89860319747555431000' +# 写电话薄, +>>> sim.writePhonebook(9, 1, 'Tom', '18144786859') +0 +>>> sim.writePhonebook(9, 2, 'z', '18144786859') +0 +>>> sim.readPhonebook(9, 1, 4, "") +(1, [(1, 'Tom', '18144786859')]) +>>> sim.readPhonebook(9, 2, 4, "") +(1, [(2, 'z', '18144786859')]) +``` +## 参考资料 + +**[ts_127007v100300p.pdf](https://www.etsi.org/deliver/etsi_ts/127000_127099/127007/10.03.00_60/ts_127007v100300p.pdf)** + +**[Quecpython sim - SIM卡库]([QuecPython 类库 (quectel.com)](https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=sim-sim卡))** +