diff --git "a/docs/Advanced_development/zh/HeliosService/Helio_Service\346\214\207\345\215\227(1)_\345\205\245\351\227\250.pdf" "b/docs/Advanced_development/zh/HeliosService/Helio_Service\346\214\207\345\215\227(1)_\345\205\245\351\227\250.pdf"
deleted file mode 100644
index 9b7f3d7c7170a87fb8ef4154b47fcf464ac0f107..0000000000000000000000000000000000000000
Binary files "a/docs/Advanced_development/zh/HeliosService/Helio_Service\346\214\207\345\215\227(1)_\345\205\245\351\227\250.pdf" and /dev/null differ
diff --git "a/docs/Advanced_development/zh/HeliosService/Helio_Service\346\214\207\345\215\227(2)_\350\277\233\351\230\266.pdf" "b/docs/Advanced_development/zh/HeliosService/Helio_Service\346\214\207\345\215\227(2)_\350\277\233\351\230\266.pdf"
deleted file mode 100644
index a8f8eef69b83758a9202a44f7703642dddcb7526..0000000000000000000000000000000000000000
Binary files "a/docs/Advanced_development/zh/HeliosService/Helio_Service\346\214\207\345\215\227(2)_\350\277\233\351\230\266.pdf" and /dev/null differ
diff --git "a/docs/Advanced_development/zh/HeliosService/Helio_Service\346\214\207\345\215\227(3)_\351\253\230\347\272\247.pdf" "b/docs/Advanced_development/zh/HeliosService/Helio_Service\346\214\207\345\215\227(3)_\351\253\230\347\272\247.pdf"
deleted file mode 100644
index ae29e4972542e6de2702d2833d000ca44e9c373e..0000000000000000000000000000000000000000
Binary files "a/docs/Advanced_development/zh/HeliosService/Helio_Service\346\214\207\345\215\227(3)_\351\253\230\347\272\247.pdf" and /dev/null differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/Aliyun.md b/docs/Advanced_development/zh/QuecPythonCloud/Aliyun.md
index a0ed340e9329f0f2b8011b0e61fb7f9151c5b7af..ccb90cfcd22729fa7148cd2354997ffc72235118 100644
--- a/docs/Advanced_development/zh/QuecPythonCloud/Aliyun.md
+++ b/docs/Advanced_development/zh/QuecPythonCloud/Aliyun.md
@@ -1,3 +1,13 @@
+## 文档历史
+
+**修订记录**
+
+| **版本** | **日期** | **作者** | **变更表述** |
+| -------- | ---------- | -------- | ------------ |
+| 1.0 | 2021-09-29 | Chic | 初始版本 |
+
+
+
# QuecPython 接入阿里云
文档主要介绍如何使用“企业物联网平台”,企业物联网平台提供全托管的实例服务,无需自建物联网的基础设施即可便捷地接入和管理设备,具有低成本、高可靠、高性能、易运维的优势。下面主要从MQTT连接方式讲解,通过阅读本文,您将了解到QuecPython连接“企业物联网平台”的过程操作和验证实验理论。
@@ -40,6 +50,8 @@
http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/189223/cn_zh/1605168543507/MQTT_Password.7z?spm=a2c4g.11186623.2.19.373573a8XfigN5&file=MQTT_Password.7z
+#### 填入设备信息:
+
其中clientid是自定义,一般和deviceName同名即可,用于MQTT连接。
method加密方式要和连接MQTT时的设置一致。
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/AmazonCloud.md b/docs/Advanced_development/zh/QuecPythonCloud/AmazonCloud.md
index 11f22a23faf505eb828ea6a2eb115476acd85e80..1c10939da25c688f3bebda5cc9f8ac247d775f4b 100644
--- a/docs/Advanced_development/zh/QuecPythonCloud/AmazonCloud.md
+++ b/docs/Advanced_development/zh/QuecPythonCloud/AmazonCloud.md
@@ -1,3 +1,13 @@
+## 文档历史
+
+**修订记录**
+
+| **版本** | **日期** | **作者** | **变更表述** |
+| -------- | ---------- | -------- | ------------ |
+| 1.0 | 2021-09-29 | Chic | 初始版本 |
+
+
+
# QuecPython AmazonCloud实验介绍
本文主要介绍如何使用AWS IoT亚马逊物连网云。AWS IoT提供了可用于实施IoT解决方案的云服务和设备支持,同时提供众多云服务支持基于IoT的应用程序,用户可以访问IoT设备以及这些设备所连接的云服务所提供的功能。下面主要从MQTT连接方式讲解,通过阅读本文,您将了解到QuecPython连接AWS IoT的过程操作和验证实验理论。
@@ -14,7 +24,7 @@

-
+

diff --git a/docs/Advanced_development/zh/QuecPythonCloud/HuaweiCloud.md b/docs/Advanced_development/zh/QuecPythonCloud/HuaweiCloud.md
index f6919d3fde307cf5611e1abe0f112edbc5249c7e..1894bb649e64cce56f5637db46be4064aadc3a2a 100644
--- a/docs/Advanced_development/zh/QuecPythonCloud/HuaweiCloud.md
+++ b/docs/Advanced_development/zh/QuecPythonCloud/HuaweiCloud.md
@@ -1,3 +1,13 @@
+## 文档历史
+
+**修订记录**
+
+| **版本** | **日期** | **作者** | **变更表述** |
+| -------- | ---------- | -------- | ------------ |
+| 1.0 | 2021-09-29 | Chic | 初始版本 |
+
+
+
# QuecPython 接入华为云
文档主要介绍如何使用HuaweiCloud华为云,HuaweiCloud设备接入服务(IoTDA)是华为云的物联网平台,提供海量设备连接上云、设备和云端双向消息通信、批量设备管理、远程控制和监控、OTA升级、设备联动规则等能力,并可将设备数据灵活流转到华为云其他服务。
@@ -56,7 +66,9 @@ USER = b'5fbbb784b4ec2202e982e643_868540050954037'
PASSWORD =b'8001a12405743199b3396943a2ed397286117a9ebab4f5dfda8dd6fafe341d94'
```
-
+
+
+
说明:
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/TencentCloud.md b/docs/Advanced_development/zh/QuecPythonCloud/TencentCloud.md
index c78d5f0c43c674601ccbdd76b977037e91e49683..11b545ae0f5aa606e8515d5ae3f336f5e6256020 100644
--- a/docs/Advanced_development/zh/QuecPythonCloud/TencentCloud.md
+++ b/docs/Advanced_development/zh/QuecPythonCloud/TencentCloud.md
@@ -1,8 +1,12 @@
-## 修订历史
+## 文档历史
+
+**修订记录**
+
+| **版本** | **日期** | **作者** | **变更表述** |
+| -------- | ---------- | -------- | ------------ |
+| 1.0 | 2021-09-29 | Chic | 初始版本 |
+
-| Version | Date | Author | Change expression |
-| ------- | ---------- | ---------- | ----------------- |
-| 1.0 | 2021-09-18 | David.Tang | Initial version |
## 前言
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/image-20210929163551641.png b/docs/Advanced_development/zh/QuecPythonCloud/media/image-20210929163551641.png
new file mode 100644
index 0000000000000000000000000000000000000000..fa2214a3a466023a5e1bf54f08943fd127954da3
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/image-20210929163551641.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/image-20210929163737178.png b/docs/Advanced_development/zh/QuecPythonCloud/media/image-20210929163737178.png
new file mode 100644
index 0000000000000000000000000000000000000000..df147d9da57578ffef1cfa85003d774bbede4fef
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/image-20210929163737178.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/image-20210929165153457.png b/docs/Advanced_development/zh/QuecPythonCloud/media/image-20210929165153457.png
new file mode 100644
index 0000000000000000000000000000000000000000..ea2489091ae1474006eea8de5c49ab0d2609f264
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/image-20210929165153457.png differ
diff --git a/docs/Quick_start/zh/GPIO.md b/docs/Quick_start/zh/GPIO.md
index 46f70ff3fa0b1164d82e8ae0000dfe260ec25b80..0b133b1d50ac4ce92d217bcbfad3affff6669fa7 100644
--- a/docs/Quick_start/zh/GPIO.md
+++ b/docs/Quick_start/zh/GPIO.md
@@ -1,303 +1,287 @@
-## 输入捕获实验
+## 文档历史
-文档主要基于 EC600S 介绍如何使用 QuecPython 的输入捕获,在日常应用中,输入捕获主要用于检测 GPIO 的电平,判断电平的时间长短;或者对于一个规律的 PWM 波形,计算占空比等等。
+**修订记录**
-### 硬件描述
+| **版本** | **日期** | **作者** | **变更表述** |
+| -------- | ---------- | -------- | ------------ |
+| 1.0 | 2021-09-29 | Chic | 初始版本 |
-输入捕获主要就是检测 GPIO 口的电平时间,硬件的话,可以参考“ QuecPython GPIO 及中断开发 ”文
-档。
-### 实验 1:检测 GPIO 触发时间长短
+## 概述
-#### 实验目的
+GPIO:(英语:General-purpose input/output),通用型之输入输出的简称。
-EC600S 的 PIN10 和 PIN11 外接两个按键,一个按键( PIN10)模拟触发,进行检测,对于短时间的触 发,默认输出短按状态显示,对于长时间的触发,输出长按状态显示,如果超过一定时间的长按,默认溢 出;另外一个按键( PIN11)用于触发,中断循环。
-#### 参考代码
-下载 .py 文件到模组运行,代码如下:
+## 功能描述
-```python
-import log
-import _thread
-import utime
-from machine import Pin
-from machine import Timer
-from machine import ExtInt
-
-Time_mun_low = 0
-key_time = 0
-key_short = 10
-key_log = 500
-key_out = 3000
-state = 1
-gpio1 = Pin(Pin.GPIO1, Pin.OUT, Pin.PULL_PU, 1)
-gpio2 = Pin(Pin.GPIO2, Pin.OUT, Pin.PULL_PU, 1)
-log.basicConfig(level=log.NOTSET)
-KEY_log = log.getLogger("KEY")
-
-def Time1_fun(args):
- global Time_mun_low
- Time_mun_low += 1
-
-def I_C_fun(args):
- global Time_mun_low
- global key_time
- if gpio1.read() == 0:
- Time_mun_low = 0
- elif gpio1.read() == 1:
- key_time = Time_mun_low
- else:
- pass
-
-def Input_Capture():
- KEY_log.debug("I_C start!")
- global state
- global key_time
- timer1 = Timer(Timer.Timer1) #定时器 1
- timer1.start(period=1, mode=timer1.PERIODIC, callback=Time1_fun)
- extint1 = ExtInt(ExtInt.GPIO1, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, I_C_fun)
- extint1.enable()
- while True:
- if gpio2.read() == 0:
- utime.sleep_ms(10)
- if gpio2.read() == 0:
- KEY_log.info("GPIO2 levels:{}".format(gpio2.read()))
- break
- if key_time != 0:
- KEY_log.info("key_time:{}ms".format(key_time))
- if key_time <= key_short:
- pass
- elif key_short < key_time <= key_log:
- print(" key short input ")
- elif key_log < key_time <= key_out:
- print(" key log input ")
- else:
- print(" key out ")
- pass
- key_time = 0
- state = 0
- KEY_log.debug("I_C end!")
-
-if __name__ == "__main__":
- KEY_log.info("in_capture thread start")
- _thread.start_new_thread(Input_Capture, ())
- while True:
- if state == 0:
- KEY_log.info("in_capture thread end")
- break
- else:
- pass
-```
+GPIO可以输出高电平、低电平两种状态,设置为1即高电平,0即为低电平
-
- 下载代码
-
-#### 硬件连接
+
-本文验证 无需外接外设。
+GPIO可以读取外部电平状态,读到高电平返回1,读到低电平返回0
-#### 运行效果
+
-(1) 打开 QPYcom 运行 gpio_check.py,如下图:
-
-(2) 运行后,手动按键 1(PIN10)不同时间会输出不同的打印,尝试多次后,可以使用按键 2(PIN11) 中断循环, QPYcom 交互界面输出结果 如下 所示 :
+## API介绍
-
+### 创建对象
+**gpio = Pin(GPIOn, direction, pullMode, level)**
+**参数:**
-### 实验 2:模拟计算 PWM 波占空比
+ GPIOn:
-#### 实验目标
+ EC100YCN平台引脚对应关系如下(引脚号为外部引脚编号):
-利用按键 1,简单模拟 PWM 波,由于计算占空比至少需要两个周期,所以对于按键来说,需要输入两 次触发,两次触发后,计算占空比。
+ GPIO1 – 引脚号22
+ GPIO2 – 引脚号23
+ GPIO3 – 引脚号38
-#### 参考代码
+ GPIO4 – 引脚号53
-下载 .py 文件到模组运行,代码如下:
+ GPIO5 – 引脚号54
-```
-import utime
-import log
-import _thread
-from machine import ExtInt
-from machine import Pin
+ GPIO6 – 引脚号104
-count_num = 0
-low_ratio = 0
-count_high_num = 0
-count_low_num1 = 0
-count_low_num2 = 0
-
-log.basicConfig(level=log.INFO)
-Testlog = log.getLogger("Quectel")
-gpio1 = Pin(Pin.GPIO1, Pin.IN, Pin.PULL_DISABLE, 0)
-
-def fun(args):
- gpio1_data = gpio1.read()
- global count_low_num1
- global count_low_num2
- global count_high_num
- global low_ratio
- global count_num
- if gpio1_data == 0:
- Testlog.info("GPIO_data:{}".format(gpio1_data))
- if count_low_num1 == 0 and count_high_num == 0 and count_low_num1 != count_num:
- count_num = 0
- count_low_num1 = count_num
- Testlog.info("count_num reset")
- elif count_high_num != 0:
- if count_low_num2 == 0:
- count_low_num2 = count_num
- Testlog.info("count_low_num1:{}ms".format(count_low_num1))
- Testlog.info("count_low_num2:{}ms".format(count_low_num2))
- low_ratio = (count_high_num-count_low_num1)/(count_low_num2-count_low_num1)
- print('low_ratio: {:.2%}'.format(low_ratio))
- else:
- pass
- else:
- pass
- elif gpio1_data == 1:
- Testlog.info("GPIO_data:{}".format(gpio1_data))
- if count_low_num2 == 0 and count_num != 0 and count_high_num != count_num:
- count_high_num = count_num
- Testlog.info("count_high_num:{}ms".format(count_high_num))
- elif count_low_num2 != 0 and count_high_num != count_num:
- count_low_num1 = 0
- count_low_num2 = 0
- count_high_num = 0
- Testlog.info("count_high_num count_low_num1_2 reset")
- else:
- pass
- else:
- pass
-def extint_gpio1():
- Testlog.debug("thread start")
- global extint
- extint = ExtInt(ExtInt.GPIO1, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, fun)
-
-def time_num():
- global count_num
- while True:
- utime.sleep_us(1)
- count_num += 1
-
-if __name__ == "__main__":
- Testlog.info("main start")
- _thread.start_new_thread(extint_gpio1, ())
- _thread.start_new_thread(time_num,())
- while True:
- pass
+ GPIO7 – 引脚号105
-```
+ GPIO8 – 引脚号106
-
- 下载代码
+ GPIO9 – 引脚号107
-#### 硬件连接
+ GPIO10 – 引脚号178
-本文验证无需外接外设。
+ GPIO11 – 引脚号195
+ GPIO12 – 引脚号196
+ GPIO13 – 引脚号197
-#### 运行效果
+ GPIO14 – 引脚号198
-(1) 打开 QPYcom 运行 in_capture.py,如下图:
+ GPIO15 – 引脚号199
-
+ GPIO16 – 引脚号203
-(2) 两次一个循环,计算占空比(如有不足,请指出)。 QPYcom 交互界面输出结果 如下所示:
+ GPIO17 – 引脚号204
-```python
-import example
->>> example.exec('usr/in_capture.py')
-INFO:Quectel:main start
+ GPIO18 – 引脚号214
+
+ GPIO19 – 引脚号215
+
+ EC600SCN/EC600NCN平台引脚对应关系如下(引脚号为模块外部引脚编号):
+
+ GPIO1 – 引脚号10
+
+ GPIO2 – 引脚号11
+
+ GPIO3 – 引脚号12
+
+ GPIO4 – 引脚号13
+
+ GPIO5 – 引脚号14
+
+ GPIO6 – 引脚号15
+
+ GPIO7 – 引脚号16
+
+ GPIO8 – 引脚号39
+
+ GPIO9 – 引脚号40
+
+ GPIO10 – 引脚号48
+
+ GPIO11 – 引脚号58
+
+ GPIO12 – 引脚号59
+
+ GPIO13 – 引脚号60
+
+ GPIO14 – 引脚号61
+
+ GPIO15 – 引脚号62
+
+ GPIO16 – 引脚号63
+
+ GPIO17 – 引脚号69
+
+ GPIO18 – 引脚号70
+
+ GPIO19 – 引脚号1
+
+ GPIO20 – 引脚号3
+
+ GPIO21 – 引脚号49
+
+ GPIO22 – 引脚号50
+
+ GPIO23 – 引脚号51
+
+ GPIO24 – 引脚号52
+
+ GPIO25 – 引脚号53
+
+ GPIO26 – 引脚号54
+
+ GPIO27 – 引脚号55
+
+ GPIO28 – 引脚号56
+
+ GPIO29 – 引脚号57
+
+ EC600UCN平台引脚对应关系如下(引脚号为模块外部引脚编号)
+
+ GPIO1 – 引脚号61
+
+ GPIO2 – 引脚号58
+
+ GPIO3 – 引脚号34
+
+ GPIO4 – 引脚号60
+
+ GPIO5 – 引脚号69
+
+ GPIO6 – 引脚号70
-INFO:Quectel:GPIO_data:0
-INFO:Quectel:count_num reset
+ GPIO7 – 引脚号123
-INFO:Quectel:GPIO_data:1
-INFO:Quectel:count_high_num:6ms
+ GPIO8 – 引脚号118
-INFO:Quectel:GPIO_data:0
-INFO:Quectel:count_low_num1:0ms
-INFO:Quectel:count_low_num2:12ms
-low_ratio: 50.00%
+ GPIO9 – 引脚号9
-INFO:Quectel:GPIO_data:1
-INFO:Quectel:count_high_num count_low_num1_2 reset
+ GPIO10 – 引脚号1
-INFO:Quectel:GPIO_data:0
-INFO:Quectel:count_num reset
+ GPIO11 – 引脚号4
-INFO:Quectel:GPIO_data:1
-INFO:Quectel:count_high_num:5ms
+ GPIO12 – 引脚号3
-INFO:Quectel:GPIO_data:0
-INFO:Quectel:count_low_num1:0ms
-INFO:Quectel:count_low_num2:13ms
-low_ratio: 38.46%
-INFO:Quectel:GPIO_data:1
-INFO:Quectel:count_high_num count_low_num1_2 reset
+ GPIO13 – 引脚号2
-INFO:Quectel:GPIO_data:0
-INFO:Quectel:count_num reset
+ GPIO14 – 引脚号54
-INFO:Quectel:GPIO_data:1
-INFO:Quectel:count_high_num:5ms
+ GPIO15 – 引脚号57
-INFO:Quectel:GPIO_data:0
-INFO:Quectel:count_low_num1:0ms
-INFO:Quectel:count_low_num2:13ms
-low_ratio: 38.46%
+ GPIO16 – 引脚号56
-INFO:Quectel:GPIO_data:1
-INFO:Quectel:count_high_num count_low_num1_2 reset
+ EC200UCN平台引脚对应关系如下(引脚号为模块外部引脚编号)
-INFO:Quectel:GPIO_data:0
-INFO:Quectel:count_num reset
+ GPIO1 – 引脚号27
-INFO:Quectel:GPIO_data:1
-INFO:Quectel:count_high_num:3ms
+ GPIO2 – 引脚号26
-INFO:Quectel:GPIO_data:0
-INFO:Quectel:count_low_num1:0ms
-INFO:Quectel:count_low_num2:27ms
-low_ratio: 11.11%
+ GPIO3 – 引脚号24
-INFO:Quectel:GPIO_data:1
-INFO:Quectel:count_high_num count_low_num1_2 reset
+ GPIO4 – 引脚号25
-INFO:Quectel:GPIO_data:0
-INFO:Quectel:count_num reset
+ GPIO5 – 引脚号13
-INFO:Quectel:GPIO_data:1
-INFO:Quectel:count_high_num:6ms
+ GPIO6 – 引脚号135
+
+ GPIO7 – 引脚号136
+
+ GPIO8 – 引脚号133
+
+ GPIO9 – 引脚号3
+
+ GPIO10 – 引脚号40
+
+ GPIO11 – 引脚号37
+
+ GPIO12 – 引脚号38
+
+ GPIO13 – 引脚号39
+
+ GPIO14 – 引脚号5
+
+ GPIO15 – 引脚号141
+
+ GPIO16 – 引脚号142
+
+ direction:
+
+ IN – 输入模式
+
+ OUT – 输出模式
+
+ pullMode:
+
+ PULL_DISABLE – 浮空模式
+
+ PULL_PU – 上拉模式
+
+ PULL_PD – 下拉模式
+
+ level:
+
+ 0 - 设置引脚为低电平, 1- 设置引脚为高电平
+
+**返回值:**
+
+ 返回创建出来的对象
+
+
+
+### 获取引脚电平
+
+**Pin.read()**
+
+**参数:**
+
+ 无
+
+**返回值:**
+
+ 返回0-低电平,1-高电平
+
+
+
+### 设置引脚电平
+
+**Pin.write(value)**
+
+**参数:**
+
+ value:1为高电平,0为低电平
+
+**返回值:**
+
+ 设置成功返回整型值0,失败返回-1
+
+
+
+## 实战操作
+
+```python
+from machine import Pin
+import utime
+
+gpio1 = Pin(Pin.GPIO1, Pin.OUT, Pin.PULL_DISABLE, 0)
+gpio2 = Pin(Pin.GPIO2, Pin.OUT, Pin.PULL_DISABLE, 0)
+gpio3 = Pin(Pin.GPIO3, Pin.OUT, Pin.PULL_DISABLE, 0)
+
+while True:
+ gpio1.write(1)
+ gpio2.write(1)
+ gpio3.write(1)
+ print('Output high level')
+ utime.sleep_ms(500)
+ gpio1.write(0)
+ gpio2.write(0)
+ gpio3.write(0)
+ print('Output low level')
+ utime.sleep_ms(500)
+```
-INFO:Quectel:GPIO_data:0
-INFO:Quectel:count_low_num1:0ms
-INFO:Quectel:count_low_num2:17ms
-low_ratio: 35.29%
-INFO:Quectel:GPIO_data:1
-INFO:Quectel:count_high_num count_low_num1_2 reset
+把上面的代码编写成.py文件,使用QPYcom工具下载到模组里面运行,即可看到实验现象啦。
-INFO:Quectel:GPIO_data:0
-INFO:Quectel:count_num reset
+
-INFO:Quectel:GPIO_data:1
-INFO:Quectel:count_high_num:4ms
-INFO:Quectel:GPIO_data:0
-INFO:Quectel:count_low_num1:0ms
-INFO:Quectel:count_low_num2:13ms
-low_ratio: 30.77%
-INFO:Quectel:GPIO_data:1
-INFO:Quectel:count_high_num count_low_num1_2 reset
-```
\ No newline at end of file
diff --git "a/docs/Quick_start/zh/GPIO\346\227\247.md" "b/docs/Quick_start/zh/GPIO\346\227\247.md"
new file mode 100644
index 0000000000000000000000000000000000000000..46f70ff3fa0b1164d82e8ae0000dfe260ec25b80
--- /dev/null
+++ "b/docs/Quick_start/zh/GPIO\346\227\247.md"
@@ -0,0 +1,303 @@
+## 输入捕获实验
+
+文档主要基于 EC600S 介绍如何使用 QuecPython 的输入捕获,在日常应用中,输入捕获主要用于检测 GPIO 的电平,判断电平的时间长短;或者对于一个规律的 PWM 波形,计算占空比等等。
+
+### 硬件描述
+
+输入捕获主要就是检测 GPIO 口的电平时间,硬件的话,可以参考“ QuecPython GPIO 及中断开发 ”文
+
+档。
+
+### 实验 1:检测 GPIO 触发时间长短
+
+#### 实验目的
+
+EC600S 的 PIN10 和 PIN11 外接两个按键,一个按键( PIN10)模拟触发,进行检测,对于短时间的触 发,默认输出短按状态显示,对于长时间的触发,输出长按状态显示,如果超过一定时间的长按,默认溢 出;另外一个按键( PIN11)用于触发,中断循环。
+
+#### 参考代码
+
+下载 .py 文件到模组运行,代码如下:
+
+```python
+import log
+import _thread
+import utime
+from machine import Pin
+from machine import Timer
+from machine import ExtInt
+
+Time_mun_low = 0
+key_time = 0
+key_short = 10
+key_log = 500
+key_out = 3000
+state = 1
+gpio1 = Pin(Pin.GPIO1, Pin.OUT, Pin.PULL_PU, 1)
+gpio2 = Pin(Pin.GPIO2, Pin.OUT, Pin.PULL_PU, 1)
+log.basicConfig(level=log.NOTSET)
+KEY_log = log.getLogger("KEY")
+
+def Time1_fun(args):
+ global Time_mun_low
+ Time_mun_low += 1
+
+def I_C_fun(args):
+ global Time_mun_low
+ global key_time
+ if gpio1.read() == 0:
+ Time_mun_low = 0
+ elif gpio1.read() == 1:
+ key_time = Time_mun_low
+ else:
+ pass
+
+def Input_Capture():
+ KEY_log.debug("I_C start!")
+ global state
+ global key_time
+ timer1 = Timer(Timer.Timer1) #定时器 1
+ timer1.start(period=1, mode=timer1.PERIODIC, callback=Time1_fun)
+ extint1 = ExtInt(ExtInt.GPIO1, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, I_C_fun)
+ extint1.enable()
+ while True:
+ if gpio2.read() == 0:
+ utime.sleep_ms(10)
+ if gpio2.read() == 0:
+ KEY_log.info("GPIO2 levels:{}".format(gpio2.read()))
+ break
+ if key_time != 0:
+ KEY_log.info("key_time:{}ms".format(key_time))
+ if key_time <= key_short:
+ pass
+ elif key_short < key_time <= key_log:
+ print(" key short input ")
+ elif key_log < key_time <= key_out:
+ print(" key log input ")
+ else:
+ print(" key out ")
+ pass
+ key_time = 0
+ state = 0
+ KEY_log.debug("I_C end!")
+
+if __name__ == "__main__":
+ KEY_log.info("in_capture thread start")
+ _thread.start_new_thread(Input_Capture, ())
+ while True:
+ if state == 0:
+ KEY_log.info("in_capture thread end")
+ break
+ else:
+ pass
+```
+
+
+ 下载代码
+
+#### 硬件连接
+
+本文验证 无需外接外设。
+
+#### 运行效果
+
+(1) 打开 QPYcom 运行 gpio_check.py,如下图:
+
+
+
+(2) 运行后,手动按键 1(PIN10)不同时间会输出不同的打印,尝试多次后,可以使用按键 2(PIN11) 中断循环, QPYcom 交互界面输出结果 如下 所示 :
+
+
+
+
+
+### 实验 2:模拟计算 PWM 波占空比
+
+#### 实验目标
+
+利用按键 1,简单模拟 PWM 波,由于计算占空比至少需要两个周期,所以对于按键来说,需要输入两 次触发,两次触发后,计算占空比。
+
+
+
+#### 参考代码
+
+下载 .py 文件到模组运行,代码如下:
+
+```
+import utime
+import log
+import _thread
+from machine import ExtInt
+from machine import Pin
+
+count_num = 0
+low_ratio = 0
+count_high_num = 0
+count_low_num1 = 0
+count_low_num2 = 0
+
+log.basicConfig(level=log.INFO)
+Testlog = log.getLogger("Quectel")
+gpio1 = Pin(Pin.GPIO1, Pin.IN, Pin.PULL_DISABLE, 0)
+
+def fun(args):
+ gpio1_data = gpio1.read()
+ global count_low_num1
+ global count_low_num2
+ global count_high_num
+ global low_ratio
+ global count_num
+ if gpio1_data == 0:
+ Testlog.info("GPIO_data:{}".format(gpio1_data))
+ if count_low_num1 == 0 and count_high_num == 0 and count_low_num1 != count_num:
+ count_num = 0
+ count_low_num1 = count_num
+ Testlog.info("count_num reset")
+ elif count_high_num != 0:
+ if count_low_num2 == 0:
+ count_low_num2 = count_num
+ Testlog.info("count_low_num1:{}ms".format(count_low_num1))
+ Testlog.info("count_low_num2:{}ms".format(count_low_num2))
+ low_ratio = (count_high_num-count_low_num1)/(count_low_num2-count_low_num1)
+ print('low_ratio: {:.2%}'.format(low_ratio))
+ else:
+ pass
+ else:
+ pass
+ elif gpio1_data == 1:
+ Testlog.info("GPIO_data:{}".format(gpio1_data))
+ if count_low_num2 == 0 and count_num != 0 and count_high_num != count_num:
+ count_high_num = count_num
+ Testlog.info("count_high_num:{}ms".format(count_high_num))
+ elif count_low_num2 != 0 and count_high_num != count_num:
+ count_low_num1 = 0
+ count_low_num2 = 0
+ count_high_num = 0
+ Testlog.info("count_high_num count_low_num1_2 reset")
+ else:
+ pass
+ else:
+ pass
+def extint_gpio1():
+ Testlog.debug("thread start")
+ global extint
+ extint = ExtInt(ExtInt.GPIO1, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, fun)
+
+def time_num():
+ global count_num
+ while True:
+ utime.sleep_us(1)
+ count_num += 1
+
+if __name__ == "__main__":
+ Testlog.info("main start")
+ _thread.start_new_thread(extint_gpio1, ())
+ _thread.start_new_thread(time_num,())
+ while True:
+ pass
+
+```
+
+
+ 下载代码
+
+#### 硬件连接
+
+本文验证无需外接外设。
+
+
+
+#### 运行效果
+
+(1) 打开 QPYcom 运行 in_capture.py,如下图:
+
+
+
+(2) 两次一个循环,计算占空比(如有不足,请指出)。 QPYcom 交互界面输出结果 如下所示:
+
+```python
+import example
+>>> example.exec('usr/in_capture.py')
+INFO:Quectel:main start
+
+INFO:Quectel:GPIO_data:0
+INFO:Quectel:count_num reset
+
+INFO:Quectel:GPIO_data:1
+INFO:Quectel:count_high_num:6ms
+
+INFO:Quectel:GPIO_data:0
+INFO:Quectel:count_low_num1:0ms
+INFO:Quectel:count_low_num2:12ms
+low_ratio: 50.00%
+
+INFO:Quectel:GPIO_data:1
+INFO:Quectel:count_high_num count_low_num1_2 reset
+
+INFO:Quectel:GPIO_data:0
+INFO:Quectel:count_num reset
+
+INFO:Quectel:GPIO_data:1
+INFO:Quectel:count_high_num:5ms
+
+INFO:Quectel:GPIO_data:0
+INFO:Quectel:count_low_num1:0ms
+INFO:Quectel:count_low_num2:13ms
+low_ratio: 38.46%
+INFO:Quectel:GPIO_data:1
+INFO:Quectel:count_high_num count_low_num1_2 reset
+
+INFO:Quectel:GPIO_data:0
+INFO:Quectel:count_num reset
+
+INFO:Quectel:GPIO_data:1
+INFO:Quectel:count_high_num:5ms
+
+INFO:Quectel:GPIO_data:0
+INFO:Quectel:count_low_num1:0ms
+INFO:Quectel:count_low_num2:13ms
+low_ratio: 38.46%
+
+INFO:Quectel:GPIO_data:1
+INFO:Quectel:count_high_num count_low_num1_2 reset
+
+INFO:Quectel:GPIO_data:0
+INFO:Quectel:count_num reset
+
+INFO:Quectel:GPIO_data:1
+INFO:Quectel:count_high_num:3ms
+
+INFO:Quectel:GPIO_data:0
+INFO:Quectel:count_low_num1:0ms
+INFO:Quectel:count_low_num2:27ms
+low_ratio: 11.11%
+
+INFO:Quectel:GPIO_data:1
+INFO:Quectel:count_high_num count_low_num1_2 reset
+
+INFO:Quectel:GPIO_data:0
+INFO:Quectel:count_num reset
+
+INFO:Quectel:GPIO_data:1
+INFO:Quectel:count_high_num:6ms
+
+INFO:Quectel:GPIO_data:0
+INFO:Quectel:count_low_num1:0ms
+INFO:Quectel:count_low_num2:17ms
+low_ratio: 35.29%
+INFO:Quectel:GPIO_data:1
+INFO:Quectel:count_high_num count_low_num1_2 reset
+
+INFO:Quectel:GPIO_data:0
+INFO:Quectel:count_num reset
+
+INFO:Quectel:GPIO_data:1
+INFO:Quectel:count_high_num:4ms
+
+INFO:Quectel:GPIO_data:0
+INFO:Quectel:count_low_num1:0ms
+INFO:Quectel:count_low_num2:13ms
+low_ratio: 30.77%
+
+INFO:Quectel:GPIO_data:1
+INFO:Quectel:count_high_num count_low_num1_2 reset
+```
\ No newline at end of file
diff --git a/docs/Quick_start/zh/media/image-20210906154509891.png b/docs/Quick_start/zh/media/image-20210906154509891.png
new file mode 100644
index 0000000000000000000000000000000000000000..b9bc03507e44a7147e7785e78f947a4fabc6c704
Binary files /dev/null and b/docs/Quick_start/zh/media/image-20210906154509891.png differ
diff --git a/docs/Quick_start/zh/media/image-20210906154519521.png b/docs/Quick_start/zh/media/image-20210906154519521.png
new file mode 100644
index 0000000000000000000000000000000000000000..57b30c80fa4a47470d969e0ac716a9d5f2f063d3
Binary files /dev/null and b/docs/Quick_start/zh/media/image-20210906154519521.png differ
diff --git a/docs/Quick_start/zh/media/image-20210906163913049.png b/docs/Quick_start/zh/media/image-20210906163913049.png
new file mode 100644
index 0000000000000000000000000000000000000000..0182f3599aa30dfcafa4879d07c8d9542c81888d
Binary files /dev/null and b/docs/Quick_start/zh/media/image-20210906163913049.png differ
diff --git a/docs/sbs/zh/QuecPythonPlatform/FOTA_binary_upgrade.md b/docs/sbs/zh/QuecPythonPlatform/FOTA_binary_upgrade.md
new file mode 100644
index 0000000000000000000000000000000000000000..42040d9d853548096f5053023a76177ef35a9c21
--- /dev/null
+++ b/docs/sbs/zh/QuecPythonPlatform/FOTA_binary_upgrade.md
@@ -0,0 +1,117 @@
+## 文档历史
+
+**修订记录**
+
+| Version | Date | Author | Change expression |
+| ------- | ---------- | ------- | ----------------- |
+| 1.0 | 2021-09-29 | Chic.YE | Initial version |
+
+
+
+## FOTA_binary_upgrade 固件升级
+
+本文主要基于EC600S-CNLA介绍如何升级固件,通过本文您将了解到EC600S-CNLA固件差分升级的使用方法。
+
+
+
+## 操作步骤
+
+1、 提取升级文件:
+
+将‘新’‘旧’两个固件包中的system.img文件复制出来,并重命名system_old.img、system_new.img,如下图:
+
+
+
+
+
+2、 配置 config 文件如下:
+
+```python
+[Image_List]
+
+Number_of_Images = 1
+
+1_Image_Enable = 1
+
+1_Image_Image_ID = 0x30
+
+1_Image_Path = system.bin
+
+1_Image_Flash_Entry_Address = 0x00024000
+
+1_Image_ID_Name = 1
+```
+
+
+
+3、 制作.bin文件:
+
+将system_old.img、system_new.img复制到FOTA工具根目录下,cmd执行一下指令:
+
+adiff.exe -l fp system_old.img system_new.img FotaFile.bin
+
+
+
+执行结果:
+
+
+
+生成供模组下载升级用的FotaFile.bin文件。
+
+
+
+4、 升级文件放到http服务器中
+
+本次实验时,下载地址为:
+
+`'http://120.197.216.227:6000/FotaFile.bin'`
+
+
+
+## 软件设计
+
+```Python
+import fota
+import utime
+
+DEF_URL1 = 'http://120.197.216.227:6000/FotaFile.bin'
+
+def result(args):
+ print('download status:', args[0], 'download process:', args[1])
+
+def run():
+ fota_obj = fota() # 创建Fota对象
+ print("进入升级状态......")
+ res = fota_obj.httpDownload(url1=DEF_URL1, callback=result)
+ if res != 0:
+ return
+ utime.sleep(2)
+
+run()
+```
+
+
+
+## 下载验证
+
+#### 软件代码
+
+下载.py 文件到模组运行:
+
+
+
+
+
+下载之后,手动让脚本跑起来。
+
+等待大概5分钟结束后,升级完成后可查询:
+
+交互界面发送
+
+`>>> modem.getDevFwVersion()`
+
+`'EC600SCNLAR01A01M16_OCPU_PY_BETA0414'`
+
+
+
+验证升级成功!
\ No newline at end of file
diff --git a/docs/sbs/zh/QuecPythonPlatform/media/image-20210929155209368.png b/docs/sbs/zh/QuecPythonPlatform/media/image-20210929155209368.png
new file mode 100644
index 0000000000000000000000000000000000000000..13434ed3d06a90ef7405ebd256c901fa8ab8340a
Binary files /dev/null and b/docs/sbs/zh/QuecPythonPlatform/media/image-20210929155209368.png differ
diff --git a/docs/sbs/zh/QuecPythonPlatform/media/image-20210929155313692.png b/docs/sbs/zh/QuecPythonPlatform/media/image-20210929155313692.png
new file mode 100644
index 0000000000000000000000000000000000000000..f893be002f939f85a1d3a7426e50250567333d60
Binary files /dev/null and b/docs/sbs/zh/QuecPythonPlatform/media/image-20210929155313692.png differ
diff --git a/docs/sbs/zh/QuecPythonPlatform/media/image-20210929155327009.png b/docs/sbs/zh/QuecPythonPlatform/media/image-20210929155327009.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a53693417f9d7a7d9efa0dcf78329e8a184830e
Binary files /dev/null and b/docs/sbs/zh/QuecPythonPlatform/media/image-20210929155327009.png differ
diff --git a/docs/sbs/zh/QuecPythonPlatform/media/image-20210929155530265.png b/docs/sbs/zh/QuecPythonPlatform/media/image-20210929155530265.png
new file mode 100644
index 0000000000000000000000000000000000000000..07df8594bab443643a38ef76e78460d376345dbc
Binary files /dev/null and b/docs/sbs/zh/QuecPythonPlatform/media/image-20210929155530265.png differ
diff --git a/docs/sbs/zh/QuecPythonWirelessNetwork/cellLocator.md b/docs/sbs/zh/QuecPythonWirelessNetwork/cellLocator.md
new file mode 100644
index 0000000000000000000000000000000000000000..208b94ae2a79cf564318a1c1b5932e95b7d47d8e
--- /dev/null
+++ b/docs/sbs/zh/QuecPythonWirelessNetwork/cellLocator.md
@@ -0,0 +1,127 @@
+## 文档历史
+
+**修订记录**
+
+| **版本** | **日期** | **作者** | **变更表述** |
+| -------- | ---------- | -------- | ------------ |
+| 1.0 | 2021-09-07 | FAE | 初始版本 |
+| 1.1 | 2021-09-08 | Chic | 增加图片 |
+
+
+
+## QuecPython_cellLocator基站定位
+
+本片文章主要简介QuecPytho_cellLocator 基站定位的使用。
+
+**模块功能:**
+
+提供基站定位接口,获取终端坐标信息。
+
+**对应API:**
+
+- cellLocator.getLocation(serverAddr, port, token, timeout, profileID)
+
+具体的API 详解请参考 [cellLocator - 基站定位](https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=celllocator-基站定位)
+
+
+
+## 定位概述
+
+定位是指通过特定的方法来获取用户终端的位置信息(经纬度坐标)的技术或服务。
+
+常见的定位技术有两种:一种是基于GPS的定位,一种是基于移动运营网的基站定位。基于GPS的定位方式是利用GPS定位模块将自己的位置信号发送到定位后台来实现定位的。基站定位则是利用基站与终端之间的距离来确定终端位置的。QuecPython_cellLocator基站定位便是属于基站定位一种。
+
+基站定位的大致原理为:移动终端通过运营商的网络(如GSM网)测量不同基站的下行导频信号时间,得到不同基站下行导频的TOA(Time of Arrival,到达时刻)或TDOA(Time Difference of Arrival,到达时间差),根据该测量结果并结合基站的坐标,一般采用三角公式估计算法,获取移动终端用户的位置信息(经纬度坐标),在电子地图平台的支持下,为用户提供相应定位位置。实际的位置估计算法需要考虑多基站(3个或3个以上)定位的情况,因此算法要复杂很多。一般而言,移动台测量的基站数目越多,测量精度越高,定位性能改善越明显。
+
+
+
+## QuecPython_cellLocator 特性
+
+QuecPython_cellLocator基站定位不需要终端具有GPS定位能力,无需任何额外硬件支持,但是精度很大程度依赖于基站的分布及覆盖范围的大小。定位精准度大概500m~1500m(因基站密度及数据库数量而异)。此外还可以利用Wi-Fi在小范围内辅助定位,定位精准度约50m。
+
+由于是基站定位,需要基站信号覆盖。目前国内4G信号已基本覆盖,2G网络暂时间依旧可以使用,但面临退网风险,3G网络只有电信还没退网,也列入退网计划。在使用该功能前需先对使用地信号覆盖有所了解。
+
+
+
+## 快速开发
+
+### 交互实验
+
+进行本次实验, 需要先确定SIM卡状态。 具体请参考SIM模块的文档。
+
+我们使用交互命令来获取当前的坐标信息。
+
+```python
+>>> import cellLocator
+>>> cellLocator.getLocation("www.queclocator.com", 80, "1111111122222222", 8, 1)
+(117.1305, 31.82508, 550)
+# 上面使用的密钥仅为测试密钥
+```
+
+
+
+
+
+### 代码实验
+
+计算当前位置到北京首都的距离
+
+```python
+import cellLocator
+from math import sin, asin, cos, radians, fabs, sqrt
+
+EARTH_RADIUS = 6371 # 地球平均半径,6371km
+
+
+def hav(theta):
+ s = sin(theta / 2)
+ return s * s
+
+
+def get_distance_hav(lat0, lng0, lat1, lng1):
+ "用haversine公式计算球面两点间的距离。"
+ # 经纬度转换成弧度
+ lat0 = radians(lat0)
+ lat1 = radians(lat1)
+ lng0 = radians(lng0)
+ lng1 = radians(lng1)
+
+ dlng = fabs(lng0 - lng1)
+ dlat = fabs(lat0 - lat1)
+ h = hav(dlat) + cos(lat0) * cos(lat1) * hav(dlng)
+ distance = 2 * EARTH_RADIUS * asin(sqrt(h))
+
+ return distance
+
+
+def test_cellLocator():
+ # 测试地点
+ lon1, lat1 = (22.599578, 113.973129) # 深圳野生动物园(起点)
+ lon2, lat2 = (39.9087202, 116.3974799) # 北京天安门(1938.4KM)
+ d2 = get_distance_hav(lon1, lat1, lon2, lat2)
+ print(d2)
+ # 获取当前位置
+ # (latitude, longtitude, accuracy)
+ ret = cellLocator.getLocation(
+ "www.queclocator.com", 80, "1111111122222222", 8, 1)
+ lon3, lat3 = ret[1], ret[0]
+ d2 = get_distance_hav(lon3, lat3, lon2, lat2)
+ print(d2)
+
+
+if __name__ == "__main__":
+ test_cellLocator()
+
+```
+
+
+
+## 参考资料
+
+[cellLocator - 基站定位](https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=celllocator-基站定位)
+
+## 配套代码
+
+
+ 下载代码
+
diff --git a/docs/sbs/zh/QuecPythonWirelessNetwork/media/image-20210908140227016.png b/docs/sbs/zh/QuecPythonWirelessNetwork/media/image-20210908140227016.png
new file mode 100644
index 0000000000000000000000000000000000000000..d10092a8256edccfea18e07d3569ff48298d3fb3
Binary files /dev/null and b/docs/sbs/zh/QuecPythonWirelessNetwork/media/image-20210908140227016.png differ