diff --git a/docs/FAQ/zh/Format_String/media/dirver_setup.png b/docs/FAQ/zh/Format_String/media/dirver_setup.png
new file mode 100644
index 0000000000000000000000000000000000000000..5c64e95704bd913477136297efdd237de67afbe6
Binary files /dev/null and b/docs/FAQ/zh/Format_String/media/dirver_setup.png differ
diff --git a/docs/FAQ/zh/QP_common_question01/QP_common_question01.md b/docs/FAQ/zh/QP_common_question01/QP_common_question01.md
new file mode 100644
index 0000000000000000000000000000000000000000..20ab054647032d0f02b7e3c1dd4a78746a84c707
--- /dev/null
+++ b/docs/FAQ/zh/QP_common_question01/QP_common_question01.md
@@ -0,0 +1,189 @@
+## 设备管理器只有两个口
+
+原因分析:固件下载是需要选择压缩包,这是没错的。但是官网下载的固件包一般都是需要解压的,里面包含固件(压缩包形式)和changelog
+
+解决方法:对于官网下载的压缩进行解压,烧录时确保固件满足下面几点:
+
+1. 选择的固件是一个压缩包
+2. 固件的下一级目录全部是.bin等等,也就是说固件里面无额外的压缩包。(可能存在官网下载的固件需要解压再进行下一步)
+
+## GPS的API接口文档在哪
+
+对于GPS,实际上是串口的读写配置等等,是没有对应的API文档的,可以在群文件下载对应的资料
+
+
+
+## EC100Y开发板与模组串口对应图
+
+EC100Y开发板(小熊派)的串口位置如下图:
+
+
+
+EC100Y模组的串口位置可参考《Quectel_EC100Y-CN_QuecOpen硬件设计手册V1.0》(可在移远QuecPython开发交流群的群文件自行下载)。
+
+## EC600S开发板与模组串口对应图
+
+EC600S开发板(EC600S_QuecPython_EVB_V1.x 开发板)的串口位置如下图:
+
+ 
+
+EC600S模组的串口位置可参考《Quectel_EC600S-CN_QuecOpen硬件设计手册V1.0.0_Preliminary_20200927》(可在移远QuecPython开发交流群的群文件自行下载):
+
+## GPIO对应关系说明
+
+### 对照原理图,在开发板找到具体位置
+
+第一步,看这个GPIO与PIN脚的对应关系(位置在API库的PIN模块,左侧是QuecPython的GPIO命名,右侧是模组的PIN脚号),例如你想使用QuecPython的GPIO6,那么看了这个图,你知道的是GPIO6对应的是模组的PIN15;
+
+
+第二步看,EC600SV1.1的原理图,(黑色部分无需关注,只需要关注红色圈的部分),对于刚刚说的QuecPython的GPIO6(PIN15),这里关注的是PIN15对应的GPIO77(实际上GPIO77没有特别的含义,只是表示一个连接关系,也就是此处的GPIO77对应于下图中的GPIO77)。
+
+
+ 第三步,上方最后一个图的GPIO77,也就对应开发板引出的GPIO77(开发板的J6处)。
+ 总结:配置QuecPython的GPIO6,在开发板的GPIO77处查看配置是否生效。
+
+### 对照开发板丝印,找出对应的GPIO口
+
+例如我想找开发板上的G81对应QuecPython的哪个GPIO口(如果按照下面方法没有找到对应的GPIO,那说明暂时还未开放)。
+
+第一步,看原理图,开发板的G81对应原理图就是GPIO81。如下图所示,GPIO81对应的是PIN16(请忽略蓝色框的GPIO标识,记住PIN16)
+
+
+
+第二步,看原理图,开发板的G81对应原理图就是GPIO81。如下图所示,GPIO81对应的是PIN16**(请忽略蓝色框的GPIO标识,记住PIN16)**
+
+第三步,进入QuecPython的官网,找到PIN的API库(https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=pin)
+
+如下图所示,**如果你要控制G81,就需要配置GPIO7**。
+
+
+
+
+
+
+
+## usocket使用
+
+usocket 模块提供对BSD套接字接口的访问,支持对socket的地址绑定、监听、连接、数据接收和发送等通信方法。详细可参见:QuecPython API类库文档usocket模块的使用。
+
+代码示例:
+
+```python
+# 导入usocket模块
+import usocket
+import log
+
+# 设置日志输出级别
+log.basicConfig(level=log.INFO)
+socket_log = log.getLogger("SOCKET")
+
+# 创建一个socket实例
+sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)
+# 解析域名
+sockaddr = usocket.getaddrinfo('www.tongxinmao.com', 80)[0][-1]
+# 建立连接
+sock.connect(sockaddr)
+# 向服务端发送消息
+ret = sock.send('GET /News HTTP/1.1\r\nHost: www.tongxinmao.com\r\nAccept-Encoding: deflate\r\nConnection: keep-alive\r\n\r\n')
+socket_log.info('send %d bytes' % ret)
+# 接收服务端消息
+data = sock.recv(256)
+socket_log.info('recv %s bytes:' % len(data))
+socket_log.info(data.decode())
+
+# 关闭连接
+sock.close()
+```
+
+运行结果示例:
+
+ 
+
+## QuecPython是否支持队列
+
+ 队列是一种先进先出的数据结构,主要操作包括入队,出队。入队的元素加入到对尾,从队头取出出队的元素。在QuecPython中我们可以使用list操作来模拟队列:
+
+```python
+class queue:
+ def __init__(self):
+ self.__alist = []
+
+ def push(self, value):
+ self.__alist.insert(0, value)
+
+ def pop(self):
+ return self.__alist.pop()
+
+ def size(self):
+ return len(self.__alist)
+
+ def clean(self):
+ self.__alist.clear()
+
+ def isEmpty(self):
+ return self.__alist == []
+
+ def showQueue(self):
+ print(self.__alist)
+```
+
+运行:
+
+```python
+if __name__ == '__main__':
+ q = queue()
+ q.push(1)
+ q.push("123")
+ q.push("456")
+ q.push(2)
+ q.showQueue()
+ print(q.pop())
+ print(q.pop())
+ print(q.pop())
+ print(q.pop())
+ q.showQueue()
+```
+
+## socket解析IP失败
+
+
+
+使用socket、mqtt等相关网络连接的API时会出现IP解析失败导致出现上图异常。
+
+定位问题方向:检查SIM卡是否注网成功以及检查该地址的有效性再次进行尝试。
+
+查询驻网是否成功的AT指令,【**AT+cops?** 查询是否驻网】
+
+## 执行脚本文件提示语法错误
+
+ 
+
+导致原因:大概率是因为Python语法缩进错误(4个空格缩进)
+
+排查方法:检查代码格式缩进是否规范
+
+推荐使用:PyCharm或VsCode来进行开发,IDE会提示语法缩进与基本语法上的错误。
+
+## SIM卡进行插拔后网络请求失败
+
+因为目前EC100Y暂不支持SIM卡热插拔功能,所以如果我们的SIM卡在重新插拔后需要手动重启模块才能重新注网。
+
+## QuecPython的源码文件安全吗
+
+QPYcom下载工具有代码混淆加密功能,确保用户程序不被直接暴露。
+
+## 在QPYcom操作没有任何反应
+
+检查选择的串口是否正确并已打开。
+
+## 编写python代码用什么工具
+
+推荐使用pycharm或VScode,两款比较流行的IDE,自带自动补全功能。
+
+## 板子接出的串口无法通信
+
+要注意接口是1.8V还是3.3V,电平匹配才能正常通信。
+
+## 接上USB线灯不亮
+
+检查模块电压,保证模组的3.8V电压稳定,必要时用电池供电。
\ No newline at end of file
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/image-20210312134000186.png b/docs/FAQ/zh/QP_common_question01/media/EC100Y_UART.png
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/image-20210312134000186.png
rename to docs/FAQ/zh/QP_common_question01/media/EC100Y_UART.png
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/image-20210312134025628.png b/docs/FAQ/zh/QP_common_question01/media/EC600SV1.1_UART.png
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/image-20210312134025628.png
rename to docs/FAQ/zh/QP_common_question01/media/EC600SV1.1_UART.png
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image002-1615527701161.jpg b/docs/FAQ/zh/QP_common_question01/media/GPIO01.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image002-1615527701161.jpg
rename to docs/FAQ/zh/QP_common_question01/media/GPIO01.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image004-1615527701161.jpg b/docs/FAQ/zh/QP_common_question01/media/GPIO02.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image004-1615527701161.jpg
rename to docs/FAQ/zh/QP_common_question01/media/GPIO02.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image006-1615527701161.jpg b/docs/FAQ/zh/QP_common_question01/media/GPIO03.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image006-1615527701161.jpg
rename to docs/FAQ/zh/QP_common_question01/media/GPIO03.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image008-1615527701161.jpg b/docs/FAQ/zh/QP_common_question01/media/GPIO04.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image008-1615527701161.jpg
rename to docs/FAQ/zh/QP_common_question01/media/GPIO04.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image010-1615527701161.jpg b/docs/FAQ/zh/QP_common_question01/media/GPIO05.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image010-1615527701161.jpg
rename to docs/FAQ/zh/QP_common_question01/media/GPIO05.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image012-1615527701161.jpg b/docs/FAQ/zh/QP_common_question01/media/GPIO06.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image012-1615527701161.jpg
rename to docs/FAQ/zh/QP_common_question01/media/GPIO06.jpg
diff --git a/docs/FAQ/zh/QP_common_question01/media/GPS_file.png b/docs/FAQ/zh/QP_common_question01/media/GPS_file.png
new file mode 100644
index 0000000000000000000000000000000000000000..95ceb17fb12a393311064e02b4987633d5e3f4a9
Binary files /dev/null and b/docs/FAQ/zh/QP_common_question01/media/GPS_file.png differ
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/image-20210312135803677.png b/docs/FAQ/zh/QP_common_question01/media/socket_IP.png
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/image-20210312135803677.png
rename to docs/FAQ/zh/QP_common_question01/media/socket_IP.png
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/image-20210312135817816.png b/docs/FAQ/zh/QP_common_question01/media/syntax_error.png
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/image-20210312135817816.png
rename to docs/FAQ/zh/QP_common_question01/media/syntax_error.png
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/image-20210312135703298.png b/docs/FAQ/zh/QP_common_question01/media/usocket.png
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/image-20210312135703298.png
rename to docs/FAQ/zh/QP_common_question01/media/usocket.png
diff --git a/docs/FAQ/zh/QP_common_question02/QP_common_question02.md b/docs/FAQ/zh/QP_common_question02/QP_common_question02.md
new file mode 100644
index 0000000000000000000000000000000000000000..cdbdb5674095b4b87aa817211ccc15ad75f8f2db
--- /dev/null
+++ b/docs/FAQ/zh/QP_common_question02/QP_common_question02.md
@@ -0,0 +1,123 @@
+## apn_cfg.json里面是什么
+
+内置的apn列表,不可删除
+
+## 拖动文件到模组出现语法错误
+
+请检查“.py”文件的语法问题(多数是缩进问题)
+
+## 对Socket的[0] [-1]的解释
+
+```python
+>>> import usocket
+>>> client = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)
+>>> sockaddr = usocket.getaddrinfo('www.tongxinmao.com',80)[0][-1]
+
+>>> print(sockaddr)
+('120.76.100.197', 80)
+>>> sockaddr = usocket.getaddrinfo('www.tongxinmao.com',80)
+>>> print(sockaddr)
+[(2, 1, 0, 'www.tongxinmao.com', ('120.76.100.197', 80))]
+```
+
+举例说明:
+
+```python
+a = ((A,B,C),(2),(3))
+a[0] = (A,B,C)
+a[0][-1] = C
+```
+
+## win7运行QPYcom出现“failed to execute script pyi_rth_multiprocessing”
+
+故障现象:python通过pyinstaller打包后,在别的电脑运行失败“failed to execute script pyi_rth_multiprocessing”:在低版本windows7上运行会出现这个问题,在win10上面移植程序没问题。
+
+故障分析:怀疑是windows某些dll文件版本过低,不支持高版本生成的exe,最简单的方法是:在win7机器上单独打个exe,然后在win7运行,移植。
+
+建议客户的方法是:升级win7版本到sp1
+
+## net.nitzTime()的获取
+
+成功附着网络之后,基站下发一次(仅此一次)
+
+## 对于EC600SV1.1的QuecPython板子,测试TTS功能注意事项
+
+外设是接的喇叭,但是在TTS中配置的是“话筒”
+
+由于V1.1上面加了一个功放,此时需要拉高模组(硬件拉高)socket的pin58(功放的使能脚),或者指令使能“audio_EN = Pin(Pin.GPIO11, Pin.OUT, Pin.PULL_PD, 1)”
+
+外接的喇叭是功率是有限制的,建议小于8R 2W
+
+### 如果需要AT配置的话,
+
+**at+qaudmod=0 //spk**
+
+**at+qaudmod=1 //hs**
+
+**at+qaudmod=2 //loudspeaker**
+
+下面需要后面加以理解
+
+AT+QAUDPATH=0
+
+AT+QAUDDCH=0
+
+## 对于多.py文件的调用
+
+对于usr目录下的两个文件a.py和b.py,如果想再a.py中调用b.py的话:需要在a.py里面加上下面代码
+
+```python
+#方法1
+from usr import b
+#方法2
+import sys
+sys.path.append('/usr/') # 进入usr目录下
+import b
+```
+
+## 线程有个数限制?
+
+最多16个
+
+## 如何对文件系统进行操作
+
+根目录/是不可读不可写的,/usr是用户区,/bak是备份区
+
+## 串口一次最多可以接受多少字节?
+
+实测接收2000字节也行;发送最大512,超过自动分包;socket、MQTT收发2000字节也行
+
+## Socket、MQTT、串口的数据监听会不会阻塞其他线程
+
+Socket、MQTT本身是‘阻塞函数’,不会阻塞其他线程。
+
+串口本身是‘非阻塞函数’,不会阻塞其他线程。
+
+## 基站定位返回的参数解释
+
+```python
+>>> cellLocator.getLocation("www.queclocator.com", 80, "1111111122222222", 8, 1)
+(117.1138, 31.82279, 550)
+```
+
+返回的550结果是什么意思
+
+定位精度,单位m
+
+## QuecPython队列的深度有最大值吗?比如一直发生回调,会不会丢失?
+
+随内存自动增长
+
+## 模块的Pin有没有默认电平的说明文档
+
+我们开放出来IO目前是 默认输出低电平
+
+## EC600S的模块RTC时间怎么样断电续航
+
+断电没有办法续航,因为EC600S没有RTC引脚
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/FAQ/zh/QP_download/QP_download.md b/docs/FAQ/zh/QP_download/QP_download.md
new file mode 100644
index 0000000000000000000000000000000000000000..af8897d21042a8ae5aa9ed661da05a9616a15a4e
--- /dev/null
+++ b/docs/FAQ/zh/QP_download/QP_download.md
@@ -0,0 +1,56 @@
+## 驱动下载安装
+
+对于驱动下载,注意以下几点说明:
+
+1. 具体的步骤可参考开发板的使用说明,例如:[EC600X开发板使用说明](http://127.0.0.1:2333/doc/doc/Quecpython_intro/zh/Qp_Hw_EC600X/Hardware_Support_EC600X.html#usb)
+2. “QuecPython驱动安装失败问题”见“[QuecPython驱动安装失败问题解决](../QP_driver_failed/QP_driver_failed.html)”章节
+
+3. 安装前,请备份您的重要文件,并保存您的工作进度,以免发生意外情况,导致文件丢失
+
+4. 安装成功后,无需重启电脑
+
+5. 如需修复或者卸载驱动程序,再次运行该驱动安装程序,选择“修复”或“卸载” 即可
+
+
+## 固件下载烧录
+
+对于固件烧录,注意以下几点说明:
+
+1. 具体的步骤可参考开发板的使用说明,例如:[EC600X开发板使用说明](http://127.0.0.1:2333/doc/doc/Quecpython_intro/zh/Qp_Hw_EC600X/Hardware_Support_EC600X.html#-17)
+2. 对于所有模组,出产的固件多数是AT标准固件,如果您需要进行python开发,则需要烧录python固件,具体的烧录参考上一条
+3. QPYcom工具支持烧录pythonn固件,不支持烧C固件或者AT标准固件
+4. “QuecPython固件安装失败问题”见“[QuecPython救砖处理](../QP_recovery/QP_recovery.html)”章节
+5. 安装前,请备份您的重要文件,并保存您的工作进度,以免发生意外情况,导致文件丢失
+6. 安装成功后,无需重启电脑
+
+## 脚本下载
+
+对于脚本下载,注意以下几点说明:
+
+1. 为了方便脚本下载,QPYcom已经做了脚本拖拽下载的功能,欢迎大家使用,如您有使用问题,可参考《Quectel QuecPython_QPYcom工具使用说明》(此文件可从QPYcom压缩包中获取,路径:\QPYcom_Vx.x.x\docs)
+
+2. 如果你想一次性下载您的所有脚本,并清除原来的脚本(具体清除哪些脚本,见下面解释),可以按照下面的脚本下载步骤操作
+
+3. 对于使用如下脚本下载的步骤,哪些脚本会被删除的解释:对于根目录除了json都会删除,而对于子文件夹(自己新建一个文件夹),脚本下载不会影响这个文件夹。
+
+脚本下载步骤:
+
+(1)用户选择“USB串行设备”后,“打开串口”,点击“下载”按钮,创建项目(项目名称随意)。
+
+
+
+(2)点击“选择固件”(脚本下载暂时是需要选择固件,但是不会下载固件,这一步后面可以省略)。
+
+
+
+(3)选择需要下载的脚本
+
+
+
+(4)下载脚本,等待完成
+
+
+
+(5)完成界面展示
+
+
\ No newline at end of file
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/jioaben_choosefirmware.png b/docs/FAQ/zh/QP_download/media/jioaben_choosefirmware.png
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/jioaben_choosefirmware.png
rename to docs/FAQ/zh/QP_download/media/jioaben_choosefirmware.png
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/jioaben_choosejiaoben.png b/docs/FAQ/zh/QP_download/media/jioaben_choosejiaoben.png
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/jioaben_choosejiaoben.png
rename to docs/FAQ/zh/QP_download/media/jioaben_choosejiaoben.png
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/jioaben_downloadstart.png b/docs/FAQ/zh/QP_download/media/jioaben_downloadstart.png
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/jioaben_downloadstart.png
rename to docs/FAQ/zh/QP_download/media/jioaben_downloadstart.png
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/jioaben_downloadsuccess.png b/docs/FAQ/zh/QP_download/media/jioaben_downloadsuccess.png
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/jioaben_downloadsuccess.png
rename to docs/FAQ/zh/QP_download/media/jioaben_downloadsuccess.png
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/jioaben_start.png b/docs/FAQ/zh/QP_download/media/jioaben_start.png
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/jioaben_start.png
rename to docs/FAQ/zh/QP_download/media/jioaben_start.png
diff --git a/docs/FAQ/zh/QP_driver_failed/QP_driver_failed.md b/docs/FAQ/zh/QP_driver_failed/QP_driver_failed.md
new file mode 100644
index 0000000000000000000000000000000000000000..1a928c0444cb0aaddcd1701ecc4b5673dd73eb74
--- /dev/null
+++ b/docs/FAQ/zh/QP_driver_failed/QP_driver_failed.md
@@ -0,0 +1,11 @@
+**如遇安装好了驱动,但是出现USB枚举失败,解决方式是:**
+
+1. 确保是官网下载最新的对应的驱动(**win7和win10是不同的,不同芯片平台对应的驱动也不同**)
+
+ 可以参考你的电脑系统和模组芯片平台([硬件支持](https://python.quectel.com/doc/doc/Quecpython_intro/zh/Qp_Product_intro/Hardware_Support.html) 查看芯片平台)下载对应的驱动
+
+2. 在“控制面板”——“卸载程序”中,查看驱动是否安装成功,截图是显示安装成功的
+
+ 
+
+3. 如果仍存在驱动安装问题,请加入我们的QQ 群 445121768,工程师在线为您答疑解惑
\ No newline at end of file
diff --git a/docs/FAQ/zh/QP_recovery/QP_recovery.md b/docs/FAQ/zh/QP_recovery/QP_recovery.md
new file mode 100644
index 0000000000000000000000000000000000000000..7cf5c74d52ce422d79a5e75ae9dbe4c1049d6730
--- /dev/null
+++ b/docs/FAQ/zh/QP_recovery/QP_recovery.md
@@ -0,0 +1,163 @@
+当使用QPYcom工具下载固件失败后,不用担心板子成砖,我们来帮你救砖。
+
+## 可正常显示串口救砖
+
+1.打开电脑任务管理器(可快捷键“Ctrl+Alt+Delete”打开),找到QPYcom.exe,强制结束后台任务。
+
+2.对于开发板:按住板子上的reset按键,重启板子;对于裸模块,可直接断电再上电,然后拉低POWKEY开机
+
+3.看设备管理器的串口列表中是否显示出正常数目的串口,如果原固件是python固件,会正常显示三个串口(AT、DIAG以及USB串行设备口),如下表格左侧截图,如果原固件是非python固件,会正常显示两个串口(AT和DIAG口),如下表格右侧截图。以下的截图都属于正常显示,对于可正常显示的模组,请进行第4步;对于非正常显示的模组,则参考方法2或者方法3。
+
+| python固件模组对应的设备管理器 | 非python固件模组对应的设备管理器 |
+| ------------------------------- | -------------------------------- |
+|  |  |
+
+4.如果正常显示出串口则重新打开QPYcom.exe工具,参照《Quectel QuecPython_QPYcom工具使用说明》重新下载固件。
+
+
+
+## QPYcom救砖
+
+如果在QPYcom里面升级失败或者升级过程中断开连接,请按照如下步骤执行:
+
+1.模组断电,短接VDD_EXT 和USB_BOOT,模组对应的PIN脚位置如下图
+
+
+
+或者可以是直接短接EC600S_QuecPython_EVB_V1.x 开发板的BOOT和1V8(如下图);对于其他开发板,自己找到对应的位置
+
+
+
+
+
+2.查看设备管理是否会出现DOWNLOAD口,如下图所示:
+
+
+
+3.如果不是上图所示的下载口,出现ASR下载口,如下图所示:
+
+
+
+ 有两种解决方案:
+
+(1)忽略,继续执行下面“步骤4”,但是如果失败,则按照方法3操作
+
+(2)调整下载口(具体步骤见章节“下载口调整”)
+
+4.打开QPYcom,不要打开串口,直接创建项目(**对于非python固件的模块,一定不要打开串口**)。
+
+
+
+5.点击“选择固件”。
+
+**注意事项:**
+
+(1)选择的固件是一个压缩包
+
+(2)固件的下一级目录全部是.bin等等,也就是说固件里面无额外的压缩包。(可能存在官网下载的固件需要解压再进行下一步)
+
+
+
+6.点击“下载固件”
+
+
+
+7.等待20秒左右会出现下载进度条
+
+
+
+8.等待下载结束出现下方界面表示“下载成功”
+
+
+
+
+
+9.对于上面下载成功后会自动重启模组(若未重启,手动重启即可),检查设备管理器,正确显示如下:
+
+
+
+
+
+## Qflash救砖
+
+
+
+1.下载 QFlash 工具压缩包,解压后,双击运行该软件;
+
+
+
+2.点击【Load FW Files】 选择固件升级包。
+
+**固件包注意事项:**
+
+(1)选择的固件是一个压缩包
+
+(2)固件的下一级目录全部是.bin文件等等,也就是说固件里面无额外的压缩包。(可能存在官网下载的固件需要解压再进行下一步)
+
+3.对于EC100Y和EC600S都无需选择COM port 和 Baudrate,所以对于图中的“COM port和Baudrate”可忽略,也就是说,即使没有正常端口,也可以使用Qflash来固件下载
+
+4.短接VDD_EXT和USB_BOOT(上电前短接,短接位置见方法2),然后上电,同时点击Qflash的start。
+
+
+
+注意事项:
+
+ 由于Qflash检测下载口有时间限制,可以考虑把短接放在第一步,然后对于第4步,直接上电即可;或者对于第4步的短接上电需要快速操作
+
+5.下载结束,参考如下截图:
+
+
+
+6.QCOM查询如下图
+
+
+
+显示py结尾表示烧录py固件成功
+
+对于方法2中可能遇到的问题有以下几点建议:
+
+(1)如遇Qflash下载任何失败的问题,请关闭Qflash重新启动(如何有效的关闭Qflash进程,可以通过“Ctrl+Alt+Delete”打开“设备管理器”,彻底杀死Qflash,具体如下截图)。然后重新回到第一步进行固件下载操作。
+
+
+
+(2)短接上电后计算机端口会显示如下图(禁用其他端口,出现下载口),可查看确认。
+
+
+
+
+
+
+
+
+
+## 下载口调整
+
+1.首先确认,下载口是否如下截图,如果是,继续执行“第2步”,否则的话,可群里(移远QuecPython开发交流群:445121768)咨询
+
+
+
+2.选中上述截图的下载口,右击“更新驱动程序”
+
+
+
+3. 选择“浏览我的电脑以查找驱动程序”
+
+
+
+4.选择“让我从计算机上的可用驱动程序列表中选取”
+
+
+
+
+
+5.选择“Quectel Download Port”(如果没有,请先下载安装驱动)后,点击“下一步”
+
+
+
+6.选择“关闭”
+
+
+
+7.最后界面如下图,表示“下载口调整”完成。
+
+
\ No newline at end of file
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image002.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image002.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image002.jpg
rename to docs/FAQ/zh/QP_recovery/media/clip_image002.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image004.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image004.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image004.jpg
rename to docs/FAQ/zh/QP_recovery/media/clip_image004.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image006.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image006.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image006.jpg
rename to docs/FAQ/zh/QP_recovery/media/clip_image006.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image008.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image008.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image008.jpg
rename to docs/FAQ/zh/QP_recovery/media/clip_image008.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image010.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image010.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image010.jpg
rename to docs/FAQ/zh/QP_recovery/media/clip_image010.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image012.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image012.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image012.jpg
rename to docs/FAQ/zh/QP_recovery/media/clip_image012.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image014.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image014.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image014.jpg
rename to docs/FAQ/zh/QP_recovery/media/clip_image014.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image016.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image016.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image016.jpg
rename to docs/FAQ/zh/QP_recovery/media/clip_image016.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image018.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image018.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image018.jpg
rename to docs/FAQ/zh/QP_recovery/media/clip_image018.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image020.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image020.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image020.jpg
rename to docs/FAQ/zh/QP_recovery/media/clip_image020.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image022.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image022.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image022.jpg
rename to docs/FAQ/zh/QP_recovery/media/clip_image022.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image024.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image024.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image024.jpg
rename to docs/FAQ/zh/QP_recovery/media/clip_image024.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image026.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image026.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image026.jpg
rename to docs/FAQ/zh/QP_recovery/media/clip_image026.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image028.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image028.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image028.jpg
rename to docs/FAQ/zh/QP_recovery/media/clip_image028.jpg
diff --git a/docs/FAQ/zh/QP_recovery/media/clip_image030.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image030.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a0388365a83427245727e3a8ace96c8dfcb47495
Binary files /dev/null and b/docs/FAQ/zh/QP_recovery/media/clip_image030.jpg differ
diff --git a/docs/FAQ/zh/QP_recovery/media/clip_image032.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image032.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..df7c78202aa7e7f958a0317669795f4f71de921a
Binary files /dev/null and b/docs/FAQ/zh/QP_recovery/media/clip_image032.jpg differ
diff --git a/docs/FAQ/zh/QP_recovery/media/clip_image034.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image034.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..315ef007b4ecced814894a76e832cddc55a63873
Binary files /dev/null and b/docs/FAQ/zh/QP_recovery/media/clip_image034.jpg differ
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image036.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image036.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image036.jpg
rename to docs/FAQ/zh/QP_recovery/media/clip_image036.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image038.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image038.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image038.jpg
rename to docs/FAQ/zh/QP_recovery/media/clip_image038.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image040.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image040.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image040.jpg
rename to docs/FAQ/zh/QP_recovery/media/clip_image040.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image042.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image042.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image042.jpg
rename to docs/FAQ/zh/QP_recovery/media/clip_image042.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image044.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image044.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image044.jpg
rename to docs/FAQ/zh/QP_recovery/media/clip_image044.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image046.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image046.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image046.jpg
rename to docs/FAQ/zh/QP_recovery/media/clip_image046.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image048.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image048.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image048.jpg
rename to docs/FAQ/zh/QP_recovery/media/clip_image048.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image050.jpg b/docs/FAQ/zh/QP_recovery/media/clip_image050.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image050.jpg
rename to docs/FAQ/zh/QP_recovery/media/clip_image050.jpg
diff --git a/docs/FAQ/zh/QP_recovery/media/dirver.png b/docs/FAQ/zh/QP_recovery/media/dirver.png
new file mode 100644
index 0000000000000000000000000000000000000000..1e9699c614b5fb9e818dc025b9b5531724f514bc
Binary files /dev/null and b/docs/FAQ/zh/QP_recovery/media/dirver.png differ
diff --git a/docs/FAQ/zh/QP_recovery/media/image-20210412165538789.png b/docs/FAQ/zh/QP_recovery/media/image-20210412165538789.png
new file mode 100644
index 0000000000000000000000000000000000000000..95ceb17fb12a393311064e02b4987633d5e3f4a9
Binary files /dev/null and b/docs/FAQ/zh/QP_recovery/media/image-20210412165538789.png differ
diff --git a/docs/FAQ/zh/QP_test/QP_test.md b/docs/FAQ/zh/QP_test/QP_test.md
new file mode 100644
index 0000000000000000000000000000000000000000..e1cebd13ac7ad98cad252457615460b417e45a50
--- /dev/null
+++ b/docs/FAQ/zh/QP_test/QP_test.md
@@ -0,0 +1,271 @@
+## QuecPython main.py文件使用
+
+对于main.py的几点建议:
+
+(1)对于开始的调试,建议不要将程序命名为:main.py,建议使用其他名字,例如:start.py等等。如果里面存在死循环,那么在程序运行时无法中断,对于此情况,暂时只能通过重刷固件解决。
+
+(2)如果真的想使用main.py程序,同时又需要使用死循环,记得在死循环里面加一个可中断的条件,例如(1.如下的例子是在一个线程里面加入了死循环,同时在这个死循环里面加入了中断退出的条件,当一直输出时,可通过GPIO2对应的按键中断输出;2.下面的例子是基于EC600S_QuecPython_EVB_V1.x 开发板的,其他开发板请自行配置按键中断):
+
+```python
+import log
+import _thread
+from machine import Pin
+import utime
+log.basicConfig(level=log.NOTSET)
+KEY_log = log.getLogger("KEY")
+gpio2 = Pin(Pin.GPIO2, Pin.IN, Pin.PULL_DISABLE, 0)
+def in_capture():
+ KEY_log.debug("in_capture start!")
+ while True:
+ KEY_log.info("1111")
+ utime.sleep(1)
+ if gpio2.read() == 0:
+ KEY_log.info("in_capture thread end")
+ break
+ else:
+ pass
+if __name__ == "__main__":
+ _thread.start_new_thread(in_capture, ())
+
+```
+
+(3)对于自运行没有log输出,可以参考下面现象2的解决方法。
+
+**现象1:上传py文件且文件名为main.py到模块后无法任何执行指令(包括上传文件等),类似现象如下截图**
+
+
+
+导致原因:模块在开机后会自动寻找运行文件名为main.py的脚本文件,如果main.py中存在while,for这种循环语句,会导致程序阻塞,串口被占用,无法进行其他操作
+
+**解决方案:目前版本只能通过重刷固件解决**。
+
+
+
+**现象2:手动运行main.py程序,可以看到通过QPYcom连接“USB串行设备”看到print输出和LOG打印信息,但是自运行main.py程序后,在QPYcom的交互界面,什么都看不到。**
+
+**解决方法:可以加入串口打印**
+
+(1) 软件代码可参考:
+
+```python
+from machine import UART # 导入UART模块
+uart = UART(UART.UART2, 115200, 8, 0, 1, 0) #配置成UART2输出(硬件的连接)
+count = 50
+while count:
+ uart.write('main_py_UART_msg:{}\r\n'.format(count))
+ count -= 1
+```
+
+说明:
+
+ 串口打印是需要导入UART模块,按照UART的API库来书写输出代码
+
+(2) 硬件连接可参考:
+
+对于代码中提到的硬件连接(UART2),是使用type-c给模块供电,UART与TTL转USB模块的连接如下表,TTL转USB模块直接插PC上:
+
+| 模块UART_pin脚 | TTL转USB模块 |
+| -------------- | ------------ |
+| RX1 | Tx |
+| TX1 | Rx |
+| GND | GND |
+
+使用QCOM连接“TTL转USB模块”对应的串口,如下图:
+
+
+
+鉴于上述的软硬件配置后,在自运行main.py程序时,就会在QCOM看到对应的打印,如下图:
+
+
+
+## 串口的收发数据测试流程
+
+环境搭建(这个测试仅测试 API 对串口的封装):
+
+(1) USB 给EC600S_QuecPython_EVB_V1.x供电,main 串口的TX1和RX1对应接到电平转换芯片的3.3V端(经电平转换成5V,是使用一个电平转换器件),串口工具GND 接地
+
+(2) 软件方面:一端使用 QPYcom 连接EC600S_QuecPython_EVB_V1.x的“USB串行设备”口(用于调试时发送QuecPython指令);另一端使用QCOM 连接“电平转换器件”对应的端口(用于接收EC600S_QuecPython_EVB_V1.x发送的数据(测试模块的write 功能),以及发送数据给模块(测试模块的read 功能))。
+
+```python
+# 发数据(write):
+>>> from machine import UART
+>>> uart = UART(UART.UART2,115200,8,0,1,0) /////////////////// 定义发数据的端口,必须要严格按照硬件的接线来配置
+>>> uart.write("12345678") //////////// wite数据后,可以通过QCOM 看到数据(如下截图)
+8 ////////////“8”表示发送的字节数
+```
+
+
+
+
+
+```python
+# 收数据(read):
+>>> from machine import UART
+>>> uart = UART(UART.UART2,115200,8,0,1,0) /////////////////// 定义接收数据的端口,必须要严格按照硬件的接线来配置
+>>> uart.any() ////////////// 显示缓存的数据(只有在QCOM发送数据,这里才会显示未读的数据)
+32
+>>> msglen = uart.any() ////////////////// 将缓存的数据字节长度数赋值给msglen
+>>> msg = uart.read(msglen) /////////////////// 读取缓存字节数对应的数据
+>>> utf8_mmmm = msg.decode() ////////////////// 将byte类型的数据转换成unicode类型
+>>> print(utf8_mmmm) //////////// 以unicode类型输出数据
+555555
+555555
+555555
+555555
+```
+
+
+
+## Socket的测试(客户反馈连接失败不报错)
+
+问题是:使用connect命令,成功和失败都不显示
+
+```python
+>>> import usocket
+>>> client = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM) ////每次连接连接前必须定义
+>>> sockaddr = usocket.getaddrinfo('www.tongxinmao.com',80)[0][-1] ////正确端口,socket
+>>> client.connect(sockaddr)
+>>> client.close() ////////////// 每次连接后想重新连接必须关闭
+>>> client = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM) ////每次连接连接前必须定义
+>>> sockaddr = usocket.getaddrinfo('www.tongxinmao.com',82)[0][-1] ////错误端口,socket
+>>> client.connect(sockaddr)
+Traceback (most recent call last):
+ File "", line 1, in
+OSError: 104
+>>> client.close() //////////////每次连接后想重新连接必须关闭
+>>> client = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM) ////每次连接连接前必须定义
+>>> sockaddr = usocket.getaddrinfo('www.tongxinmao.com',80)[0][-1] ////正确端口,socket
+
+>>> client.connect(sockaddr)
+>>> client.close() //////////////每次连接后想重新连接必须关闭
+```
+
+## EC600S裸模块开机烧录测试
+
+EC600S的硬件连接:
+
+| 模块端 | USB |
+| ----------------- | --------------------- |
+| USB_DP(PIN26) | 绿色-USB数据线(正) |
+| USB_DM(PIN27) | 白色-USB数据线(负) |
+| USB_VBUS(PIN28) | 红色-USB电源 |
+| GND(PIN30) | 黑色-地线 |
+
+| 模块端 | 电源端 |
+| ---------------- | ---------- |
+| VBAT_BB(PIN29) | 电源的正极 |
+| VBAT_RF(PIN36) | 电源的正极 |
+| VBAT_RF(PIN37) | 电源的正极 |
+| GND(PIN38) | 电源的负极 |
+
+实物图:
+
+ 
+
+ POWKEY拉低开机后,未烧录固件的DM
+
+
+
+烧录后,重启的DM
+
+
+
+前后版本查询
+
+
+
+
+
+## QuecPython MQTT连接异常处理
+
+### umqtt使用
+
+umqtt模块提供创建MQTT客户端的发布订阅功能。该模块可以向服务端发布或者订阅消息,向服务器发送ping包,检测保持连通性,与服务器建立或者断开连接,需要注意的是MQTTClient.check_msg()和MQTTClient.wait_msg()方法中推荐使用**wait_msg**的方法。
+
+### 使用MQTT连接阿里云、腾讯云等
+
+使用MQTT连接阿里云、腾讯云的步骤可以详细参见官网上的wiki社区([https://python.quectel.com/wiki/](https://python.quectel.com/wiki/))的QuecPython云服务。
+
+### 云服务运行demo出现,未订阅等信息
+
+现象:类似下面截图
+
+
+
+原因分析:(1)注网失败;(2)您订阅与发布的主题,在云服务端没有创建
+
+(1)对于注网失败,解决步骤如下:
+
+ 使用QCOM,连接AT口,查询命令“AT+CSQ; +CREG?; +CEREG? ;+CGREG? ; +CPIN?;+COPS?”,如下截图,类似下面情况说明您的网络状态是正常的。
+
+
+
+ 如有异常的常见解决方案是:
+
+对于AT+CPIN?的异常处理,检查SIM卡座硬件问题;
+
+对于CREG,CGREG,CEREG的,建议检查手机卡是否存在欠费等情况,也就是确认手机卡是否正常
+
+对于CSQ的话,检查周围环境,是否存在导致信号不好的干扰,建议室外测试,或者室内加天线。
+
+(2) 对于“订阅与发布的主题,在云服务端没有创建”,建议检查以下两点:
+
+检查您订阅的主题,在云服务上对应的主题是不是也是可订阅的状态
+
+检查您发布的主题,在云服务上对应的主题是不是也是可发布的状态
+
+### MQTT连接一段时间异常断开
+
+导致原因: MQTT服务端会有心跳检测机制,一段时间内设备与云端没有通信活动会主动断开连接
+
+尝试解决方向:连接断开是依据配置mqtt时的超时值keepalive,在超出活动时间后会主动断开连接,我们可以根据设置keepalive活动时间使用定时器在活动时间超出前主动向云端发送ping包,服务端返回的数据包无需客户处理。
+
+
+
+## MQTT测试
+
+客户疑问:MQTT断线通过捕获异常获取,但是断线后,异常捕获不到
+
+疑问解答:会抛出异常,umqtt已经做了处理,上层的try捕捉不到下面的异常,对于断线后会尝试重连,有log输出,不会直接抛出异常。下面是测试的部分LOG(之前一直收发,后面拔卡后尝试重连)
+
+具体的测试代码是:
+
+```python
+from umqtt import MQTTClient
+import utime
+import log
+import checkNet
+
+PROJECT_NAME = "QuecPython_MQTT_example"
+PROJECT_VERSION = "1.0.0"
+
+checknet = checkNet.CheckNetwork(PROJECT_NAME, PROJECT_VERSION)
+
+# 设置日志输出级别
+log.basicConfig(level=log.INFO)
+mqtt_log = log.getLogger("MQTT")
+
+state = 0
+def sub_cb(topic, msg):
+ global state
+ mqtt_log.info("Subscribe Recv: Topic={},Msg={}".format(topic.decode(), msg.decode()))
+
+if __name__ == '__main__':
+ utime.sleep(5)
+ checknet.poweron_print_once()
+ checknet.wait_network_connected()
+ c = MQTTClient("umqtt_client", "mq.tongxinmao.com", 18830)
+ c.set_callback(sub_cb)
+ c.connect()
+ while True:
+ c.subscribe(b"/public/TEST/quecpython")
+ mqtt_log.info("Connected to mq.tongxinmao.com, subscribed to /public/TEST/quecpython topic")
+ # 发布消息
+ c.publish(b"/public/TEST/quecpython", b"my name is Quecpython!")
+ mqtt_log.info("Publish topic: /public/TEST/quecpython, msg: my name is Quecpython")
+ c.wait_msg() # 阻塞函数,监听消息
+ if state == 1:
+ break
+ c.disconnect()
+```
+
diff --git a/docs/FAQ/zh/QP_test/media/EC600SV1.1_UART.png b/docs/FAQ/zh/QP_test/media/EC600SV1.1_UART.png
new file mode 100644
index 0000000000000000000000000000000000000000..7b700cbbda72524f9ad959c6ead9bc4793dc57d8
Binary files /dev/null and b/docs/FAQ/zh/QP_test/media/EC600SV1.1_UART.png differ
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image004-1615461735615.jpg b/docs/FAQ/zh/QP_test/media/clip_image004-1615461735615.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image004-1615461735615.jpg
rename to docs/FAQ/zh/QP_test/media/clip_image004-1615461735615.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image006-1615461735616.jpg b/docs/FAQ/zh/QP_test/media/clip_image006-1615461735616.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image006-1615461735616.jpg
rename to docs/FAQ/zh/QP_test/media/clip_image006-1615461735616.jpg
diff --git a/docs/FAQ/zh/QP_test/media/clip_image008-1615527701161.jpg b/docs/FAQ/zh/QP_test/media/clip_image008-1615527701161.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b5a4631fc16244eb6a9edae717daaaed8ced61a4
Binary files /dev/null and b/docs/FAQ/zh/QP_test/media/clip_image008-1615527701161.jpg differ
diff --git a/docs/FAQ/zh/QP_test/media/clip_image010-1615527701161.jpg b/docs/FAQ/zh/QP_test/media/clip_image010-1615527701161.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f368c332062aeadbd5f0089a51ed07e75555d5cb
Binary files /dev/null and b/docs/FAQ/zh/QP_test/media/clip_image010-1615527701161.jpg differ
diff --git a/docs/FAQ/zh/QP_test/media/clip_image012-1615527701161.jpg b/docs/FAQ/zh/QP_test/media/clip_image012-1615527701161.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..dcf75a760f986dccbd0ed06a4b057381755586c0
Binary files /dev/null and b/docs/FAQ/zh/QP_test/media/clip_image012-1615527701161.jpg differ
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/image-20210311201822427.png b/docs/FAQ/zh/QP_test/media/image-20210311201822427.png
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/image-20210311201822427.png
rename to docs/FAQ/zh/QP_test/media/image-20210311201822427.png
diff --git a/docs/FAQ/zh/QP_test/media/image-20210312101407043.png b/docs/FAQ/zh/QP_test/media/image-20210312101407043.png
new file mode 100644
index 0000000000000000000000000000000000000000..07aa3ada32cfd8352b5466c2c4ae595be1e3529e
Binary files /dev/null and b/docs/FAQ/zh/QP_test/media/image-20210312101407043.png differ
diff --git a/docs/FAQ/zh/QP_test/media/image-20210312102149061.png b/docs/FAQ/zh/QP_test/media/image-20210312102149061.png
new file mode 100644
index 0000000000000000000000000000000000000000..61b0c4e5c2104fdcd5fdbfb76ef624b36ad6b8ed
Binary files /dev/null and b/docs/FAQ/zh/QP_test/media/image-20210312102149061.png differ
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/image-20210312102450245.png b/docs/FAQ/zh/QP_test/media/image-20210312102450245.png
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/image-20210312102450245.png
rename to docs/FAQ/zh/QP_test/media/image-20210312102450245.png
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/image-20210312102517370.png b/docs/FAQ/zh/QP_test/media/image-20210312102517370.png
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/image-20210312102517370.png
rename to docs/FAQ/zh/QP_test/media/image-20210312102517370.png
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/image-20210312132017231.png b/docs/FAQ/zh/QP_test/media/image-20210312132017231.png
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/image-20210312132017231.png
rename to docs/FAQ/zh/QP_test/media/image-20210312132017231.png
diff --git a/docs/FAQ/zh/QP_test/media/image-20210312132446192.png b/docs/FAQ/zh/QP_test/media/image-20210312132446192.png
new file mode 100644
index 0000000000000000000000000000000000000000..df0ccc00f3b37e23daf51c0258f9288973efcba1
Binary files /dev/null and b/docs/FAQ/zh/QP_test/media/image-20210312132446192.png differ
diff --git a/docs/FAQ/zh/QP_test/media/image-20210312132458172.png b/docs/FAQ/zh/QP_test/media/image-20210312132458172.png
new file mode 100644
index 0000000000000000000000000000000000000000..6e666713160348d38305ca0b5299d60f23f69c2a
Binary files /dev/null and b/docs/FAQ/zh/QP_test/media/image-20210312132458172.png differ
diff --git a/docs/FAQ/zh/QP_test/media/image-20210312132735642.png b/docs/FAQ/zh/QP_test/media/image-20210312132735642.png
new file mode 100644
index 0000000000000000000000000000000000000000..6e2a63139ea716f3a8f3b59ccef75a05f38745c5
Binary files /dev/null and b/docs/FAQ/zh/QP_test/media/image-20210312132735642.png differ
diff --git a/docs/FAQ/zh/QP_test/media/image-20210312134000186.png b/docs/FAQ/zh/QP_test/media/image-20210312134000186.png
new file mode 100644
index 0000000000000000000000000000000000000000..4f5048d5699ba70e60d494609bffea847ba435a9
Binary files /dev/null and b/docs/FAQ/zh/QP_test/media/image-20210312134000186.png differ
diff --git a/docs/FAQ/zh/QP_test/media/image-20210312134025628.png b/docs/FAQ/zh/QP_test/media/image-20210312134025628.png
new file mode 100644
index 0000000000000000000000000000000000000000..7b700cbbda72524f9ad959c6ead9bc4793dc57d8
Binary files /dev/null and b/docs/FAQ/zh/QP_test/media/image-20210312134025628.png differ
diff --git a/docs/FAQ/zh/QP_test/media/image-20210312135703298.png b/docs/FAQ/zh/QP_test/media/image-20210312135703298.png
new file mode 100644
index 0000000000000000000000000000000000000000..4a83bc67936d660f08718183998fe308e4d4dcbf
Binary files /dev/null and b/docs/FAQ/zh/QP_test/media/image-20210312135703298.png differ
diff --git a/docs/FAQ/zh/QP_test/media/image-20210312135803677.png b/docs/FAQ/zh/QP_test/media/image-20210312135803677.png
new file mode 100644
index 0000000000000000000000000000000000000000..0f7d4b0b96301b5651f321bfd57d85f2239e454e
Binary files /dev/null and b/docs/FAQ/zh/QP_test/media/image-20210312135803677.png differ
diff --git a/docs/FAQ/zh/QP_test/media/image-20210312135817816.png b/docs/FAQ/zh/QP_test/media/image-20210312135817816.png
new file mode 100644
index 0000000000000000000000000000000000000000..408a19251112775c9b8a4682701b6a4a4079eb0c
Binary files /dev/null and b/docs/FAQ/zh/QP_test/media/image-20210312135817816.png differ
diff --git a/docs/FAQ/zh/QuecPython_FAQ/media/clip_image002-1615461735616.jpg b/docs/FAQ/zh/QP_test/media/main_problem.jpg
similarity index 100%
rename from docs/FAQ/zh/QuecPython_FAQ/media/clip_image002-1615461735616.jpg
rename to docs/FAQ/zh/QP_test/media/main_problem.jpg
diff --git a/docs/FAQ/zh/QuecPython_FAQ/QuecPython_FAQ.md b/docs/FAQ/zh/QuecPython_FAQ/QuecPython_FAQ.md
index 4e2de4e75347d9c4c05eb00c85fa9eab66aadab5..4f5e663558d3d307e5656b8aa7961d3f34f979db 100644
--- a/docs/FAQ/zh/QuecPython_FAQ/QuecPython_FAQ.md
+++ b/docs/FAQ/zh/QuecPython_FAQ/QuecPython_FAQ.md
@@ -1,807 +1,22 @@
-## QuecPython支持群地址
-移远QuecPython开发交流群:445121768
-## QuecPython相关准备
-
-### 开发板
-
-目前推荐的开发板:
-
-(1)小熊派
-
-
-
-(2)EC600S_QuecPython_EVB_V1.x 开发板
-
-
-
-### 驱动下载安装
-
-1.使用开发板前,需要在电脑上安装USB驱动。正确安装后,电脑可以识别开发板。
-
-| 驱动程序名称 | Quectel_ASR_Series_UMTS<E_Windows_USB_Driver_Customer |
-| ---------------- | ------------------------------------------------------------ |
-| 驱动程序下载地址 | [https://python.quectel.com/download.html](https://python.quectel.com/download.html) |
-
-2.开发者下载驱动程序的压缩包后,完整解压该压缩包到任意目录,双击运行setup.exe:
-
-
-
-3.按照提示,点击Install即可:
-
-
-
-4.安装成功后,点击“Finish”结束:
-
-
-
-5.至此,USB 驱动安装结束。
-
-6.对于python固件的模块,驱动安装好的设备管理器是:
-
-
-
- 对于非python固件的模块,驱动安装好的设备管理器是:
-
-
-
-
-
-**TIPS**
-
-(1)“QuecPython驱动安装失败问题”见“QuecPython驱动安装失败问题解决”章节
-
-(2)安装前,请备份您的重要文件,并保存您的工作进度,以免发生意外情况,导致文件丢失
-
-(3)安装成功后,无需重启电脑
-
-(4)如需修复或者卸载驱动程序,再次运行该驱动安装程序,选择“修复”或“卸载” 即可
-
-
-
-### 固件下载安装
-
-**说明:**
-(1)为了对客户python应用程序做交互适配,需要先下载QuecPython固件到开发板中,下载完成后才可以对python应用程序做底层适配处理。固件下载网址:[https://python.quectel.com/download.html](https://python.quectel.com/download.html)
-(2)QPYcom工具支持烧py固件,不支持烧C固件
-(3)具体步骤如下
-
-1.首先确认自己的模块版本,使用QCOM查看,发送AT指令 ‘AT+GMR ‘,如下所示:
-
-
-
-版本说明:如果是python版的固件(固件号以PY结尾),则直接跳过此步骤;如果不是python版本,根据版本的前半部分,下载对应的固件(如果是下图的固件,请至官网下载对应的EC600SCNAA的python固件)
-
-
-
-2.不要打开串口,直接创建项目(**对于非python固件模块,不要打开任何串口,包括AT串口**)。
-
-
-
-3.点击“选择固件”。
-
-
-
-**注意事项:**
-(1) 选择的固件是一个压缩包
-(2) 固件的下一级目录全部是.bin等等,也就是说固件里面无额外的压缩包。(可能存在官网下载的固件需要解压再进行下一步)
-
-4.点击“下载固件”
-
-
-
-5.等待20秒左右会出现下载进度条
-
-
-
-6.等待下载结束出现下方界面表示“下载成功”
-
-
-
-
-
-TIPS:
-(1)“QuecPython固件安装失败问题”见“QuecPython救砖处理”章节
-(2)安装前,请备份您的重要文件,并保存您的工作进度,以免发生意外情况,导致文件丢失
-(3)安装成功后,无需重启电脑
-
-### 脚本下载
-
- 脚本下载的建议:
-
-(1)为了方便脚本下载,QPYcom已经做了脚本拖拽下载的功能,欢迎大家使用,如您有使用问题,可参考《Quectel QuecPython_QPYcom工具使用说明》
-
-(2)如果你想一次性下载您的所有脚本,并清除原来的脚本(具体清除哪些脚本,见下面解释),可以按照下面的脚本下载步骤操作
-
- 对于使用如下脚本下载的步骤,哪些脚本会被删除的解释:对于根目录除了json都会删除,而对于子文件夹(自己新建一个文件夹),脚本下载不会影响这个文件夹。
-
-1.用户选择“USB串行设备”后,“打开串口”,点击“下载”按钮,创建项目(项目名称随意)。
-
-
-
-2.点击“选择固件”(脚本下载暂时是需要选择固件,但是不会下载固件,这一步后面可以省略)。
-
-
-
-3.选择需要下载的脚本
-
-
-
-4.下载脚本,等待完成
-
-
-
-5.完成界面展示
-
-
-
-## QuecPython驱动安装失败问题解决
-
-如遇安装好了驱动,但是出现USB枚举失败,解决方式是:
-
-(1) 确保是官网下载最新的对应的驱动(win7和win10是不同的)
-
-(2) 在“控制面板”——“卸载程序”中,查看驱动是否安装成功,截图是显示安装成功的
-
-
-
-(3) 如果仍存在驱动安装问题,请加入我们的QQ 群 445121768,工程师在线为您答疑解惑
-
-
-
-## QuecPython救砖处理
-
-当使用QPYcom工具下载固件失败后,不用担心板子成砖,我们来帮你救砖。
-
-### 方法1
-
-1.打开电脑任务管理器(可快捷键“Ctrl+Alt+Delete”打开),找到QPYcom.exe,强制结束后台任务。
-
-2.对于开发板:按住板子上的reset按键,重启板子;对于裸模块,可直接断电再上电,然后拉低POWKEY开机
-
-3.看设备管理器的串口列表中是否显示出正常数目的串口,如果原固件是python固件,会正常显示三个串口(AT、DIAG以及USB串行设备口),如下表格左侧截图,如果原固件是非python固件,会正常显示两个串口(AT和DIAG口),如下表格右侧截图。以下的截图都属于正常显示,对于可正常显示的模组,请进行第4步;对于非正常显示的模组,则参考方法2或者方法3。
-
-| python固件模组对应的设备管理器 | 非python固件模组对应的设备管理器 |
-| ------------------------------- | -------------------------------- |
-|  |  |
-
-4.如果正常显示出串口则重新打开QPYcom.exe工具,参照《Quectel QuecPython_QPYcom工具使用说明》重新下载固件。
-
-
-
-### 方法2
-
-如果在QPYcom里面升级失败或者升级过程中断开连接,请按照如下步骤执行:
-
-1.模组断电,短接VDD_EXT 和USB_BOOT,模组对应的PIN脚位置如下图
-
-
-
-或者可以是直接短接EC600S_QuecPython_EVB_V1.x 开发板的BOOT和1V8(如下图);对于其他开发板,自己找到对应的位置
-
-
-
-
-
-2.查看设备管理是否会出现DOWNLOAD口,如下图所示:
-
-
-
-3.如果不是上图所示的下载口,出现ASR下载口,如下图所示:
-
-
-
- 有两种解决方案:
-
-(1)忽略,继续执行下面“步骤4”,但是如果失败,则按照方法3操作
-
-(2)调整下载口(具体步骤见章节“下载口调整”)
-
-4.打开QPYcom,不要打开串口,直接创建项目(**对于非python固件的模块,一定不要打开串口**)。
-
-
-
-5.点击“选择固件”。
-
-**注意事项:**
-
-(1)选择的固件是一个压缩包
-
-(2)固件的下一级目录全部是.bin等等,也就是说固件里面无额外的压缩包。(可能存在官网下载的固件需要解压再进行下一步)
-
-
-
-6.点击“下载固件”
-
-
-
-7.等待20秒左右会出现下载进度条
-
-
-
-8.等待下载结束出现下方界面表示“下载成功”
-
-
-
-
-
-9.对于上面下载成功后会自动重启模组(若未重启,手动重启即可),检查设备管理器,正确显示如下:
-
-
-
-
-
-### 方法3
-
-
-
-1.下载 QFlash 工具压缩包,解压后,双击运行该软件;
-
-
-
-2.点击【Load FW Files】 选择固件升级包。
-
-**固件包注意事项:**
-
-(1)选择的固件是一个压缩包
-
-(2)固件的下一级目录全部是.bin文件等等,也就是说固件里面无额外的压缩包。(可能存在官网下载的固件需要解压再进行下一步)
-
-3.对于EC100Y和EC600S都无需选择COM port 和 Baudrate,所以对于图中的“COM port和Baudrate”可忽略,也就是说,即使没有正常端口,也可以使用Qflash来固件下载
-
-4.短接VDD_EXT和USB_BOOT(上电前短接,短接位置见方法2),然后上电,同时点击Qflash的start。
-
-
-
-注意事项:
-
- 由于Qflash检测下载口有时间限制,可以考虑把短接放在第一步,然后对于第4步,直接上电即可;或者对于第4步的短接上电需要快速操作
-
-5.下载结束,参考如下截图:
-
-
-
-6.QCOM查询如下图
-
-
-
-显示py结尾表示烧录py固件成功
-
-对于方法2中可能遇到的问题有以下几点建议:
-
-(1)如遇Qflash下载任何失败的问题,请关闭Qflash重新启动(如何有效的关闭Qflash进程,可以通过“Ctrl+Alt+Delete”打开“设备管理器”,彻底杀死Qflash,具体如下截图)。然后重新回到第一步进行固件下载操作。
-
-
-
-(2)短接上电后计算机端口会显示如下图(禁用其他端口,出现下载口),可查看确认。
-
-
-
-
-
-
-
-
-
-### 下载口调整
-
-1.首先确认,下载口是否如下截图,如果是,继续执行“第2步”,否则的话,可群里(移远QuecPython开发交流群:445121768)咨询
-
-
-
-2.选中上述截图的下载口,右击“更新驱动程序”
-
-
-
-3. 选择“浏览我的电脑以查找驱动程序”
-
-
-
-4.选择“让我从计算机上的可用驱动程序列表中选取”
-
-
-
-
-
-5.选择“Quectel Download Port”(如果没有,请先下载安装驱动)后,点击“下一步”
-
-
-
-6.选择“关闭”
-
-
-
-7.最后界面如下图,表示“下载口调整”完成。
-
-
-
-
-
-
-
-## QuecPython测试问题
-
-### QuecPython main.py文件使用
-
-对于main.py的几点建议:
-
-(1)对于开始的调试,建议不要将程序命名为:main.py,建议使用其他名字,例如:start.py等等。如果里面存在死循环,那么在程序运行时无法中断,对于此情况,暂时只能通过重刷固件解决。
-
-(2)如果真的想使用main.py程序,同时又需要使用死循环,记得在死循环里面加一个可中断的条件,例如(1.如下的例子是在一个线程里面加入了死循环,同时在这个死循环里面加入了中断退出的条件,当一直输出时,可通过GPIO2对应的按键中断输出;2.下面的例子是基于EC600S_QuecPython_EVB_V1.x 开发板的,其他开发板请自行配置按键中断):
-
-```python
-import log
-import _thread
-from machine import Pin
-import utime
-log.basicConfig(level=log.NOTSET)
-KEY_log = log.getLogger("KEY")
-gpio2 = Pin(Pin.GPIO2, Pin.IN, Pin.PULL_DISABLE, 0)
-def in_capture():
- KEY_log.debug("in_capture start!")
- while True:
- KEY_log.info("1111")
- utime.sleep(1)
- if gpio2.read() == 0:
- KEY_log.info("in_capture thread end")
- break
- else:
- pass
-if __name__ == "__main__":
- _thread.start_new_thread(in_capture, ())
-
-```
-
-(3)对于自运行没有log输出,可以参考下面现象2的解决方法。
-
-**现象1:上传py文件且文件名为main.py到模块后无法任何执行指令(包括上传文件等),类似现象如下截图**
-
-
-
-导致原因:模块在开机后会自动寻找运行文件名为main.py的脚本文件,如果main.py中存在while,for这种循环语句,会导致程序阻塞,串口被占用,无法进行其他操作
-
-**解决方案:目前版本只能通过重刷固件解决**。
-
-
-
-**现象2:手动运行main.py程序,可以看到通过QPYcom连接“USB串行设备”看到print输出和LOG打印信息,但是自运行main.py程序后,在QPYcom的交互界面,什么都看不到。**
-
-**解决方法:可以加入串口打印**
-
-(1) 软件代码可参考:
-
-```python
-from machine import UART # 导入UART模块
-uart = UART(UART.UART2, 115200, 8, 0, 1, 0) #配置成UART2输出(硬件的连接)
-count = 50
-while count:
- uart.write('main_py_UART_msg:{}\r\n'.format(count))
- count -= 1
-```
-
-说明:
-
- 串口打印是需要导入UART模块,按照UART的API库来书写输出代码
-
-(2) 硬件连接可参考:
-
-对于代码中提到的硬件连接(UART2),是使用type-c给模块供电,UART与TTL转USB模块的连接如下表,TTL转USB模块直接插PC上:
-
-| 模块UART_pin脚 | TTL转USB模块 |
-| -------------- | ------------ |
-| RX1 | Tx |
-| TX1 | Rx |
-| GND | GND |
-
-使用QCOM连接“TTL转USB模块”对应的串口,如下图:
-
-
-
-鉴于上述的软硬件配置后,在自运行main.py程序时,就会在QCOM看到对应的打印,如下图:
-
-
-
-### 串口的收发数据测试流程
-
-环境搭建(这个测试仅测试 API 对串口的封装):
-
-(1) USB 给EC600S_QuecPython_EVB_V1.x供电,main 串口的TX1和RX1对应接到电平转换芯片的3.3V端(经电平转换成5V,是使用一个电平转换器件),串口工具GND 接地
-
-(2) 软件方面:一端使用 QPYcom 连接EC600S_QuecPython_EVB_V1.x的“USB串行设备”口(用于调试时发送QuecPython指令);另一端使用QCOM 连接“电平转换器件”对应的端口(用于接收EC600S_QuecPython_EVB_V1.x发送的数据(测试模块的write 功能),以及发送数据给模块(测试模块的read 功能))。
-
-```python
-# 发数据(write):
->>> from machine import UART
->>> uart = UART(UART.UART2,115200,8,0,1,0) /////////////////// 定义发数据的端口,必须要严格按照硬件的接线来配置
->>> uart.write("12345678") //////////// wite数据后,可以通过QCOM 看到数据(如下截图)
-8 ////////////“8”表示发送的字节数
-```
-
-
-
-
-
-```python
-# 收数据(read):
->>> from machine import UART
->>> uart = UART(UART.UART2,115200,8,0,1,0) /////////////////// 定义接收数据的端口,必须要严格按照硬件的接线来配置
->>> uart.any() ////////////// 显示缓存的数据(只有在QCOM发送数据,这里才会显示未读的数据)
-32
->>> msglen = uart.any() ////////////////// 将缓存的数据字节长度数赋值给msglen
->>> msg = uart.read(msglen) /////////////////// 读取缓存字节数对应的数据
->>> utf8_mmmm = msg.decode() ////////////////// 将byte类型的数据转换成unicode类型
->>> print(utf8_mmmm) //////////// 以unicode类型输出数据
-555555
-555555
-555555
-555555
-```
-
-
-
-### Socket的测试(客户反馈连接失败不报错)
-
-问题是:使用connect命令,成功和失败都不显示
-
-```python
->>> import usocket
->>> client = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM) ////每次连接连接前必须定义
->>> sockaddr = usocket.getaddrinfo('www.tongxinmao.com',80)[0][-1] ////正确端口,socket
->>> client.connect(sockaddr)
->>> client.close() ////////////// 每次连接后想重新连接必须关闭
->>> client = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM) ////每次连接连接前必须定义
->>> sockaddr = usocket.getaddrinfo('www.tongxinmao.com',82)[0][-1] ////错误端口,socket
->>> client.connect(sockaddr)
-Traceback (most recent call last):
- File "", line 1, in
-OSError: 104
->>> client.close() //////////////每次连接后想重新连接必须关闭
->>> client = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM) ////每次连接连接前必须定义
->>> sockaddr = usocket.getaddrinfo('www.tongxinmao.com',80)[0][-1] ////正确端口,socket
-
->>> client.connect(sockaddr)
->>> client.close() //////////////每次连接后想重新连接必须关闭
-```
-
-### EC600S裸模块开机烧录测试
-
-EC600S的硬件连接:
-
-| 模块端 | USB |
-| ----------------- | --------------------- |
-| USB_DP(PIN26) | 绿色-USB数据线(正) |
-| USB_DM(PIN27) | 白色-USB数据线(负) |
-| USB_VBUS(PIN28) | 红色-USB电源 |
-| GND(PIN30) | 黑色-地线 |
-
-| 模块端 | 电源端 |
-| ---------------- | ---------- |
-| VBAT_BB(PIN29) | 电源的正极 |
-| VBAT_RF(PIN36) | 电源的正极 |
-| VBAT_RF(PIN37) | 电源的正极 |
-| GND(PIN38) | 电源的负极 |
-
-实物图:
-
- 
-
- POWKEY拉低开机后,未烧录固件的DM
-
-
-
-烧录后,重启的DM
-
-
-
-前后版本查询
-
-
-
-
-
-### QuecPython MQTT连接异常处理
-
-#### umqtt使用
-
-umqtt模块提供创建MQTT客户端的发布订阅功能。该模块可以向服务端发布或者订阅消息,向服务器发送ping包,检测保持连通性,与服务器建立或者断开连接,需要注意的是MQTTClient.check_msg()和MQTTClient.wait_msg()方法中推荐使用**wait_msg**的方法。
-
-#### 使用MQTT连接阿里云、腾讯云等
-
-使用MQTT连接阿里云、腾讯云的步骤可以详细参见官网上的wiki社区([https://python.quectel.com/wiki/](https://python.quectel.com/wiki/))的QuecPython云服务。
-
-#### 云服务运行demo出现,未订阅等信息
-
-现象:类似下面截图
-
-
-
-原因分析:(1)注网失败;(2)您订阅与发布的主题,在云服务端没有创建
-
-(1)对于注网失败,解决步骤如下:
-
- 使用QCOM,连接AT口,查询命令“AT+CSQ; +CREG?; +CEREG? ;+CGREG? ; +CPIN?;+COPS?”,如下截图,类似下面情况说明您的网络状态是正常的。
-
-
-
- 如有异常的常见解决方案是:
-
-对于AT+CPIN?的异常处理,检查SIM卡座硬件问题;
-
-对于CREG,CGREG,CEREG的,建议检查手机卡是否存在欠费等情况,也就是确认手机卡是否正常
-
-对于CSQ的话,检查周围环境,是否存在导致信号不好的干扰,建议室外测试,或者室内加天线。
-
-(2) 对于“订阅与发布的主题,在云服务端没有创建”,建议检查以下两点:
-
-检查您订阅的主题,在云服务上对应的主题是不是也是可订阅的状态
-
-检查您发布的主题,在云服务上对应的主题是不是也是可发布的状态
-
-#### MQTT连接一段时间异常断开
-
-导致原因: MQTT服务端会有心跳检测机制,一段时间内设备与云端没有通信活动会主动断开连接
-
-尝试解决方向:连接断开是依据配置mqtt时的超时值keepalive,在超出活动时间后会主动断开连接,我们可以根据设置keepalive活动时间使用定时器在活动时间超出前主动向云端发送ping包,服务端返回的数据包无需客户处理。
-
-
-
-### MQTT测试
-
-客户疑问:MQTT断线通过捕获异常获取,但是断线后,异常捕获不到
-
-疑问解答:会抛出异常,umqtt已经做了处理,上层的try捕捉不到下面的异常,对于断线后会尝试重连,有log输出,不会直接抛出异常。下面是测试的部分LOG(之前一直收发,后面拔卡后尝试重连)
-
-具体的测试代码是:
-
-```python
-from umqtt import MQTTClient
-import utime
-import log
-import checkNet
-
-PROJECT_NAME = "QuecPython_MQTT_example"
-PROJECT_VERSION = "1.0.0"
-
-checknet = checkNet.CheckNetwork(PROJECT_NAME, PROJECT_VERSION)
-
-# 设置日志输出级别
-log.basicConfig(level=log.INFO)
-mqtt_log = log.getLogger("MQTT")
-
-state = 0
-def sub_cb(topic, msg):
- global state
- mqtt_log.info("Subscribe Recv: Topic={},Msg={}".format(topic.decode(), msg.decode()))
-
-if __name__ == '__main__':
- utime.sleep(5)
- checknet.poweron_print_once()
- checknet.wait_network_connected()
- c = MQTTClient("umqtt_client", "mq.tongxinmao.com", 18830)
- c.set_callback(sub_cb)
- c.connect()
- while True:
- c.subscribe(b"/public/TEST/quecpython")
- mqtt_log.info("Connected to mq.tongxinmao.com, subscribed to /public/TEST/quecpython topic")
- # 发布消息
- c.publish(b"/public/TEST/quecpython", b"my name is Quecpython!")
- mqtt_log.info("Publish topic: /public/TEST/quecpython, msg: my name is Quecpython")
- c.wait_msg() # 阻塞函数,监听消息
- if state == 1:
- break
- c.disconnect()
-```
-
-## QuecPython其他常见问题第一部分
-
-### 拿到开发板后不知道怎么使用
-
-参考对应开发板的使用指导文档,下载地址:[https://python.quectel.com/download.html](https://python.quectel.com/download.html)。
-
-### EC100Y开发板与EC100Y模组的串口位置
-
-EC100Y开发板(小熊派)的串口位置如下图:
-
-
-
-EC100Y模组的串口位置可参考《Quectel_EC100Y-CN_QuecOpen硬件设计手册V1.0》(可在移远QuecPython开发交流群的群文件自行下载)。
-
-### EC600S开发板与EC600S模组的串口位置
-
-EC600S开发板(EC600S_QuecPython_EVB_V1.x 开发板)的串口位置如下图:
-
- 
-
-EC600S模组的串口位置可参考《Quectel_EC600S-CN_QuecOpen硬件设计手册V1.0.0_Preliminary_20200927》(可在移远QuecPython开发交流群的群文件自行下载):
-
-### Quecpython的GPIO对应关系说明
-
-#### 对照原理图,在开发板找到具体位置
-
-第一步,看这个GPIO与PIN脚的对应关系(位置在API库的PIN模块,左侧是QuecPython的GPIO命名,右侧是模组的PIN脚号),例如你想使用QuecPython的GPIO6,那么看了这个图,你知道的是GPIO6对应的是模组的PIN15;
-
-
-第二步看,EC600SV1.1的原理图,(黑色部分无需关注,只需要关注红色圈的部分),对于刚刚说的QuecPython的GPIO6(PIN15),这里关注的是PIN15对应的GPIO77(实际上GPIO77没有特别的含义,只是表示一个连接关系,也就是此处的GPIO77对应于下图中的GPIO77)。
-
-
- 第三步,上方最后一个图的GPIO77,也就对应开发板引出的GPIO77(开发板的J6处)。
- 总结:配置QuecPython的GPIO6,在开发板的GPIO77处查看配置是否生效。
-
-#### 对照开发板丝印,找出对应的GPIO口
-
-例如我想找开发板上的G81对应QuecPython的哪个GPIO口(如果按照下面方法没有找到对应的GPIO,那说明暂时还未开放)。
-
-第一步,看原理图,开发板的G81对应原理图就是GPIO81。如下图所示,GPIO81对应的是PIN16(请忽略蓝色框的GPIO标识,记住PIN16)
-
-
-
-第二步,看原理图,开发板的G81对应原理图就是GPIO81。如下图所示,GPIO81对应的是PIN16**(请忽略蓝色框的GPIO标识,记住PIN16)**
-
-第三步,进入QuecPython的官网,找到PIN的API库(https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=pin)
-
-如下图所示,**如果你要控制G81,就需要配置GPIO7**。
-
-
-
-
-
-
-
-### usocket使用
-
-usocket 模块提供对BSD套接字接口的访问,支持对socket的地址绑定、监听、连接、数据接收和发送等通信方法。详细可参见:QuecPython API类库文档usocket模块的使用。
-
-代码示例:
-
-```python
-# 导入usocket模块
-import usocket
-import log
-
-# 设置日志输出级别
-log.basicConfig(level=log.INFO)
-socket_log = log.getLogger("SOCKET")
-
-# 创建一个socket实例
-sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)
-# 解析域名
-sockaddr = usocket.getaddrinfo('www.tongxinmao.com', 80)[0][-1]
-# 建立连接
-sock.connect(sockaddr)
-# 向服务端发送消息
-ret = sock.send('GET /News HTTP/1.1\r\nHost: www.tongxinmao.com\r\nAccept-Encoding: deflate\r\nConnection: keep-alive\r\n\r\n')
-socket_log.info('send %d bytes' % ret)
-# 接收服务端消息
-data = sock.recv(256)
-socket_log.info('recv %s bytes:' % len(data))
-socket_log.info(data.decode())
-
-# 关闭连接
-sock.close()
-```
-
-运行结果示例:
-
- 
-
-### QuecPython是否支持队列
-
- 队列是一种先进先出的数据结构,主要操作包括入队,出队。入队的元素加入到对尾,从队头取出出队的元素。在QuecPython中我们可以使用list操作来模拟队列:
-
-```python
-class queue:
- def __init__(self):
- self.__alist = []
-
- def push(self, value):
- self.__alist.insert(0, value)
-
- def pop(self):
- return self.__alist.pop()
-
- def size(self):
- return len(self.__alist)
-
- def clean(self):
- self.__alist.clear()
-
- def isEmpty(self):
- return self.__alist == []
-
- def showQueue(self):
- print(self.__alist)
-```
-
-运行:
-
-```python
-if __name__ == '__main__':
- q = queue()
- q.push(1)
- q.push("123")
- q.push("456")
- q.push(2)
- q.showQueue()
- print(q.pop())
- print(q.pop())
- print(q.pop())
- print(q.pop())
- q.showQueue()
-```
-
-### socket解析IP失败
-
-
-
-使用socket、mqtt等相关网络连接的API时会出现IP解析失败导致出现上图异常。
-
-定位问题方向:检查SIM卡是否注网成功以及检查该地址的有效性再次进行尝试。
-
-查询驻网是否成功的AT指令,【**AT+cops?** 查询是否驻网】
-
-### 执行脚本文件提示语法错误
-
- 
-
-导致原因:大概率是因为Python语法缩进错误(4个空格缩进)
-
-排查方法:检查代码格式缩进是否规范
-
-推荐使用:PyCharm或VsCode来进行开发,IDE会提示语法缩进与基本语法上的错误。
-
-### SIM卡进行插拔后出现网络请求失败
-
-因为目前EC100Y暂不支持SIM卡热插拔功能,所以如果我们的SIM卡在重新插拔后需要手动重启模块才能重新注网。
-
-### QuecPython的源码文件安全吗
-
-QPYcom下载工具有代码混淆加密功能,确保用户程序不被直接暴露。
-
-### 在QPYcom操作没有任何反应
-
-检查选择的串口是否正确并已打开。
-
-### 开发板送的流量卡可以混用吗
-
-机卡绑定,第一次开机注网就绑定。
-
-### 编写python代码用什么工具
-
-推荐使用pycharm或VScode,两款比较流行的IDE,自带自动补全功能。
-
-### 板子接出的串口无法通信
+## 板子接出的串口无法通信
要注意接口是1.8V还是3.3V,电平匹配才能正常通信。
-### 接上USB线灯不亮
+## 接上USB线灯不亮
检查模块电压,保证模组的3.8V电压稳定,必要时用电池供电。
-### 小熊派右上方的LED点亮代码
-
-```python
->>> from machine import Pin
->>> gpio = Pin(Pin.GPIO15, Pin.OUT, Pin.PULL_DISABLE, 0)
->>> gpio.write(1)
-0
->>> gpio.read()
-1
-```
-
-### EC600S CNAA与CNLB的区别
-
-CNAA是4G+2G,flash大一点,CNLB是4G,flash小一点
-
-### apn_cfg.json里面是什么
+## apn_cfg.json里面是什么
内置的apn列表,不可删除
-### 拖动文件到模组出现语法错误
+## 拖动文件到模组出现语法错误
请检查“.py”文件的语法问题(多数是缩进问题)
-### 对Socket的[0] [-1]的解释
+## 对Socket的[0] [-1]的解释
```python
>>> import usocket
@@ -823,9 +38,7 @@ a[0] = (A,B,C)
a[0][-1] = C
```
-## QuecPython其他常见问题第二部分
-
-### win7运行QPYcom出现“failed to execute script pyi_rth_multiprocessing”
+## win7运行QPYcom出现“failed to execute script pyi_rth_multiprocessing”
故障现象:python通过pyinstaller打包后,在别的电脑运行失败“failed to execute script pyi_rth_multiprocessing”:在低版本windows7上运行会出现这个问题,在win10上面移植程序没问题。
@@ -833,11 +46,11 @@ a[0][-1] = C
建议客户的方法是:升级win7版本到sp1
-### net.nitzTime()的获取
+## net.nitzTime()的获取
成功附着网络之后,基站下发一次(仅此一次)
-### 对于EC600SV1.1的QuecPython板子,测试TTS功能注意事项
+## 对于EC600SV1.1的QuecPython板子,测试TTS功能注意事项
外设是接的喇叭,但是在TTS中配置的是“话筒”
@@ -859,7 +72,7 @@ AT+QAUDPATH=0
AT+QAUDDCH=0
-### 对于多.py文件的调用
+## 对于多.py文件的调用
对于usr目录下的两个文件a.py和b.py,如果想再a.py中调用b.py的话:需要在a.py里面加上下面代码
@@ -872,25 +85,25 @@ sys.path.append('/usr/') # 进入usr目录下
import b
```
-### 线程有个数限制?
+## 线程有个数限制?
最多16个
-### 如何对文件系统进行操作
+## 如何对文件系统进行操作
根目录/是不可读不可写的,/usr是用户区,/bak是备份区
-### 串口一次最多可以接受多少字节?
+## 串口一次最多可以接受多少字节?
实测接收2000字节也行;发送最大512,超过自动分包;socket、MQTT收发2000字节也行
-### Socket、MQTT、串口的数据监听会不会阻塞其他线程
+## Socket、MQTT、串口的数据监听会不会阻塞其他线程
Socket、MQTT本身是‘阻塞函数’,不会阻塞其他线程。
串口本身是‘非阻塞函数’,不会阻塞其他线程。
-### 基站定位返回的参数解释
+## 基站定位返回的参数解释
```python
>>> cellLocator.getLocation("www.queclocator.com", 80, "1111111122222222", 8, 1)
@@ -901,17 +114,17 @@ Socket、MQTT本身是‘阻塞函数’,不会阻塞其他线程。
定位精度,单位m
-### QuecPython队列的深度有最大值吗?比如一直发生回调,会不会丢失?
+## QuecPython队列的深度有最大值吗?比如一直发生回调,会不会丢失?
随内存自动增长
-### 模块的Pin有没有默认电平的说明文档
+## 模块的Pin有没有默认电平的说明文档
我们开放出来IO目前是 默认输出低电平
-### EC600S的模块RTC时间怎么样断电续航
+## EC600S的模块RTC时间怎么样断电续航
-断电没有办法续航,因为引出RTC
+断电没有办法续航,因为EC600S没有RTC引脚
diff --git a/docs/FAQ/zh/QuecPython_module_to_normal/jioaben_start.png b/docs/FAQ/zh/QuecPython_module_to_normal/jioaben_start.png
new file mode 100644
index 0000000000000000000000000000000000000000..7dca2571afbb1a4165c61e28320924ae5ac0a0af
Binary files /dev/null and b/docs/FAQ/zh/QuecPython_module_to_normal/jioaben_start.png differ
diff --git a/docs/FAQ/zh/README.md b/docs/FAQ/zh/README.md
index 6bd1fc5e6037214d7c4e0707fcd7d0390b62fb66..bf6ad5a3362846b60c4d62af13d1748324cdd3ac 100644
--- a/docs/FAQ/zh/README.md
+++ b/docs/FAQ/zh/README.md
@@ -1,3 +1,298 @@
-## FAQ&常见问题
+## 前言
+
+本片文章主要是简介怎样参与到 **Quecpython 文档网站系统的贡献** 以及**QUecpython 文档编写的规范**。
+- 使用git拉取仓库
+- 修改本地md文档
+- 在本地部署预览
+- 提交修改到主仓库,等待合并。
+
+
+### **推荐资料**
+
+- [Git - Book (git-scm.com)](https://git-scm.com/book/zh/v2)
+- [Learn Git Branching](https://learngitbranching.js.org/?locale=zh_CN)
+- [Git提交流程图\_L.超的博客-CSDN博客](https://blog.csdn.net/weixin_45765795/article/details/110730753)
+
+### 需要安装的东西
+
+- git [git-for-windows Mirror(taobao.org)](http://npm.taobao.org/mirrors/git-for-windows/)
+- sourcetree [Sourcetree \| Free Git GUI for Mac and Windows(sourcetreeapp.com)](https://www.sourcetreeapp.com/)
+- python3 以及需要将python3 添加到 PATH 路径, 具体请参考 [windows10怎么把python添加到路径](https://www.py.cn/faq/python/18228.html)
+
+sourcetree 安装教程可以参考 [SourceTree安装及卸载 - 爱码网(likecs.com)](http://www.likecs.com/show-118323.html)
+
+### 视频录屏
+
+1. **首先请下载视频查看一些基础的用法。**
+
+链接:https://pan.baidu.com/s/1-TIYEdloBS1uWs1AZpT8TQ
+
+提取码:219x
+
+本次交流使用到的 git 命令。
+
+```bash
+git clone
+
+git commit
+
+git rebase
+```
+
+## git 提交流程
+
+### !!!注意事项:
+
+尽量本地修改的时候,新建一个分支修改, 名字可以随便取。
+
+不要使用 develop release main 三个分支就行。
+
+#### gitee 账号注册与 fork 代码。
+
+首先请参考 注册gitee账号
+
+需要操作的仓库地址。
+[QuecPython/Community-document(gitee.com)](https://gitee.com/quecpython/Community-document)
+
+
+#### clone 代码
+
+你自己仓库的代码, 不需要复制下面的网址, 复制你自己仓库的路径。
+
+
+
+
+
+记住: 路径需要修改成为自己的网址 路径。
+
+
+
+#### 使用命令行添加用户名和账号
+
+参考 文章。
+
+首先打开命令行,查看是你是否设置了用户名。
+
+
+
+如果没有名字,使用下下面的命令配置一下名字 和邮件。
+
+```bash
+git config --global user.name "你的名字(请使用英文)"
+
+git config --global user.email "邮箱账号"
+```
+
+如果出现了下面的错误信息
+
+could not lock config file z://config: Permission denied
+
+请确认你在安装souretree的过程中,是否选择了正确的git 路径。
+
+
+
+#### 使用souretree添加本地仓库
+
+
+
+如此即可。
+
+#### 使用souretree 添加 upstream仓库。
+
+
+
+打开souretree 状态看一看。 可以发现 origin 以及 upstream 两个远程仓库的状态。
+
+
+
+## 本地编译预览网站
+
+上面我们拉取了远程仓库以后,我们可以测试在本地编译生成网页预览。
+
+
+
+使用**powershell**进入对应的路径 **E:\\work\\temp\\Community-document**。
+
+```bash
+PS E:\\work\\temp\\Community-document\> git status
+
+On branch develop
+
+Your branch is ahead of 'origin/develop' by 1 commit.
+
+(use "git push" to publish your local commits)
+
+nothing to commit, working tree clean
+```
+
+使用pip3 安装teedoc,如果pip3 没有安装的可以参考 [Win10
+64位系统下安装Python3及pip3_Working.
+Playing.-CSDN博客](https://blog.csdn.net/menc15/article/details/65631380)
+```bash
+# 安装teedoc
+
+PS E:\\work\\temp\\Community-document\> pip3 install teedoc
+
+# 安装teedoc插件
+
+PS E:\\work\\temp\\Community-document\> teedoc install
+
+# 编译md, 将md转化成为 html
+
+**编译**
+
+# 编译md, 将md转化成为 html
+
+PS E:\\work\\temp\\Community-document\> teedoc build
+```
+如果出现了下面的错误,
+
+
+
+请持续执行 **teedoc build,这是一个teedoc 的bug 。 直到出现下面的信息为止。**
+
+****
+
+编译完成以后,我们可以在本地部署网站了。
+```bash
+PS E:\\work\\temp\\Community-document\> teedoc serve
+
+2021-03-18 17:37:34 - [INFO] - [Thread-50]: root dir:
+E:/work/temp/Community-document/out
+
+2021-03-18 17:37:34 - [INFO] - [Thread-50]: Starting server at 0.0.0.0:2333 ....
+```
+
+出现了上面的信息以后, 就可以访问 ,
+查看对应的文章了。
+
+http://127.0.0.1:2333/doc/doc
+
+### 新增添加文档
+
+#### 新建一个md文件,然后添加内容
+
+下面我们演示一下,怎样在FAQ文件夹下面新增一篇文章。
+
+##### !!(重要)同步代码
+
+每一次修改文档之前,都建议同步一次代码。
+
+
+
+然后新建一个本地分支
+
+
+
+新建loacl_write_doc分支
+
+
+
+
+
+> 假设我们需要在 docs/zh 文件夹下面新建一个文章
+
+> 然后新建一个 md文件命名为 others.md
+
+> 
+
+然后我们可以使用Typora — a markdown editor, markdown reader.
+软件打开,修改编辑文档。也可以使用vscode。 你也可以使用其他的 markdwon
+编辑工具,
+
+##### 修改侧边栏目录 sidebar.yaml 文件
+
+
+
+然后修改sidebar.yaml 文件, 添加下面两句
+```bash
+- label: 其他问题
+file: others/others.md
+```
+
+
+上面修改完成以后, 可以参考《本地编译预览网站》 在本地预览效果。
+
+
+
+## 修改提交本地内容
+
+#### 使用 Sourcetree 在本地修改,暂存本地修改
+
+###### 暂存区, 未存区, 文件详细修改的区域
+
+
+
+###### 提交 commit ,讲文件存入缓存区
+
+
+
+###### 推送到自己的仓库
+
+
+
+###### 在gitee推送到主仓库, 使用pull requst 提交到主仓库。
+
+
+
+
+
+###### 填写详细信息,通知主仓库合并。
+
+
+
+###### 主仓库合并以后,同步主仓库
+
+
+
+#### 在本地修改未提交的情况下, 拉取最新分支。然后提交本地分支
+
+
+
+
+
+
+
+
+
+
+
+
+
+### 解决云端提交冲突
+
+云端显示提交的pr存在冲突的时候,可以通过**web IDE**进行处理。
+
+
+更多详细信息请参考
+[Gitee在线解决代码冲突功能上线,无需手动修改轻松解决冲突](https://blog.gitee.com/2020/06/17/code-conflict/)
+## 文档修改
+
+##### 图片名字格式
+
+```bash
+
+```
+
+##### 使用 - 表示list。
+
+```bash
+- A
+- B
+- C
+```
+
+不要使用
+
+```bash
+1.A
+2.B
+3.C
+```
+
+
+
+#### 不能使用的关键字
+不能使用的关键词
+
-等待补充
\ No newline at end of file
diff --git a/docs/FAQ/zh/join_us/README.md b/docs/FAQ/zh/join_us/README.md
deleted file mode 100755
index bf6ad5a3362846b60c4d62af13d1748324cdd3ac..0000000000000000000000000000000000000000
--- a/docs/FAQ/zh/join_us/README.md
+++ /dev/null
@@ -1,298 +0,0 @@
-## 前言
-
-本片文章主要是简介怎样参与到 **Quecpython 文档网站系统的贡献** 以及**QUecpython 文档编写的规范**。
-- 使用git拉取仓库
-- 修改本地md文档
-- 在本地部署预览
-- 提交修改到主仓库,等待合并。
-
-
-### **推荐资料**
-
-- [Git - Book (git-scm.com)](https://git-scm.com/book/zh/v2)
-- [Learn Git Branching](https://learngitbranching.js.org/?locale=zh_CN)
-- [Git提交流程图\_L.超的博客-CSDN博客](https://blog.csdn.net/weixin_45765795/article/details/110730753)
-
-### 需要安装的东西
-
-- git [git-for-windows Mirror(taobao.org)](http://npm.taobao.org/mirrors/git-for-windows/)
-- sourcetree [Sourcetree \| Free Git GUI for Mac and Windows(sourcetreeapp.com)](https://www.sourcetreeapp.com/)
-- python3 以及需要将python3 添加到 PATH 路径, 具体请参考 [windows10怎么把python添加到路径](https://www.py.cn/faq/python/18228.html)
-
-sourcetree 安装教程可以参考 [SourceTree安装及卸载 - 爱码网(likecs.com)](http://www.likecs.com/show-118323.html)
-
-### 视频录屏
-
-1. **首先请下载视频查看一些基础的用法。**
-
-链接:https://pan.baidu.com/s/1-TIYEdloBS1uWs1AZpT8TQ
-
-提取码:219x
-
-本次交流使用到的 git 命令。
-
-```bash
-git clone
-
-git commit
-
-git rebase
-```
-
-## git 提交流程
-
-### !!!注意事项:
-
-尽量本地修改的时候,新建一个分支修改, 名字可以随便取。
-
-不要使用 develop release main 三个分支就行。
-
-#### gitee 账号注册与 fork 代码。
-
-首先请参考 注册gitee账号
-
-需要操作的仓库地址。
-[QuecPython/Community-document(gitee.com)](https://gitee.com/quecpython/Community-document)
-
-
-#### clone 代码
-
-你自己仓库的代码, 不需要复制下面的网址, 复制你自己仓库的路径。
-
-
-
-
-
-记住: 路径需要修改成为自己的网址 路径。
-
-
-
-#### 使用命令行添加用户名和账号
-
-参考 文章。
-
-首先打开命令行,查看是你是否设置了用户名。
-
-
-
-如果没有名字,使用下下面的命令配置一下名字 和邮件。
-
-```bash
-git config --global user.name "你的名字(请使用英文)"
-
-git config --global user.email "邮箱账号"
-```
-
-如果出现了下面的错误信息
-
-could not lock config file z://config: Permission denied
-
-请确认你在安装souretree的过程中,是否选择了正确的git 路径。
-
-
-
-#### 使用souretree添加本地仓库
-
-
-
-如此即可。
-
-#### 使用souretree 添加 upstream仓库。
-
-
-
-打开souretree 状态看一看。 可以发现 origin 以及 upstream 两个远程仓库的状态。
-
-
-
-## 本地编译预览网站
-
-上面我们拉取了远程仓库以后,我们可以测试在本地编译生成网页预览。
-
-
-
-使用**powershell**进入对应的路径 **E:\\work\\temp\\Community-document**。
-
-```bash
-PS E:\\work\\temp\\Community-document\> git status
-
-On branch develop
-
-Your branch is ahead of 'origin/develop' by 1 commit.
-
-(use "git push" to publish your local commits)
-
-nothing to commit, working tree clean
-```
-
-使用pip3 安装teedoc,如果pip3 没有安装的可以参考 [Win10
-64位系统下安装Python3及pip3_Working.
-Playing.-CSDN博客](https://blog.csdn.net/menc15/article/details/65631380)
-```bash
-# 安装teedoc
-
-PS E:\\work\\temp\\Community-document\> pip3 install teedoc
-
-# 安装teedoc插件
-
-PS E:\\work\\temp\\Community-document\> teedoc install
-
-# 编译md, 将md转化成为 html
-
-**编译**
-
-# 编译md, 将md转化成为 html
-
-PS E:\\work\\temp\\Community-document\> teedoc build
-```
-如果出现了下面的错误,
-
-
-
-请持续执行 **teedoc build,这是一个teedoc 的bug 。 直到出现下面的信息为止。**
-
-****
-
-编译完成以后,我们可以在本地部署网站了。
-```bash
-PS E:\\work\\temp\\Community-document\> teedoc serve
-
-2021-03-18 17:37:34 - [INFO] - [Thread-50]: root dir:
-E:/work/temp/Community-document/out
-
-2021-03-18 17:37:34 - [INFO] - [Thread-50]: Starting server at 0.0.0.0:2333 ....
-```
-
-出现了上面的信息以后, 就可以访问 ,
-查看对应的文章了。
-
-http://127.0.0.1:2333/doc/doc
-
-### 新增添加文档
-
-#### 新建一个md文件,然后添加内容
-
-下面我们演示一下,怎样在FAQ文件夹下面新增一篇文章。
-
-##### !!(重要)同步代码
-
-每一次修改文档之前,都建议同步一次代码。
-
-
-
-然后新建一个本地分支
-
-
-
-新建loacl_write_doc分支
-
-
-
-
-
-> 假设我们需要在 docs/zh 文件夹下面新建一个文章
-
-> 然后新建一个 md文件命名为 others.md
-
-> 
-
-然后我们可以使用Typora — a markdown editor, markdown reader.
-软件打开,修改编辑文档。也可以使用vscode。 你也可以使用其他的 markdwon
-编辑工具,
-
-##### 修改侧边栏目录 sidebar.yaml 文件
-
-
-
-然后修改sidebar.yaml 文件, 添加下面两句
-```bash
-- label: 其他问题
-file: others/others.md
-```
-
-
-上面修改完成以后, 可以参考《本地编译预览网站》 在本地预览效果。
-
-
-
-## 修改提交本地内容
-
-#### 使用 Sourcetree 在本地修改,暂存本地修改
-
-###### 暂存区, 未存区, 文件详细修改的区域
-
-
-
-###### 提交 commit ,讲文件存入缓存区
-
-
-
-###### 推送到自己的仓库
-
-
-
-###### 在gitee推送到主仓库, 使用pull requst 提交到主仓库。
-
-
-
-
-
-###### 填写详细信息,通知主仓库合并。
-
-
-
-###### 主仓库合并以后,同步主仓库
-
-
-
-#### 在本地修改未提交的情况下, 拉取最新分支。然后提交本地分支
-
-
-
-
-
-
-
-
-
-
-
-
-
-### 解决云端提交冲突
-
-云端显示提交的pr存在冲突的时候,可以通过**web IDE**进行处理。
-
-
-更多详细信息请参考
-[Gitee在线解决代码冲突功能上线,无需手动修改轻松解决冲突](https://blog.gitee.com/2020/06/17/code-conflict/)
-## 文档修改
-
-##### 图片名字格式
-
-```bash
-
-```
-
-##### 使用 - 表示list。
-
-```bash
-- A
-- B
-- C
-```
-
-不要使用
-
-```bash
-1.A
-2.B
-3.C
-```
-
-
-
-#### 不能使用的关键字
-不能使用的关键词
-
-
diff --git a/docs/FAQ/zh/join_us/media/03bd99c2741d455894dde05a7efa76df.png b/docs/FAQ/zh/media/03bd99c2741d455894dde05a7efa76df.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/03bd99c2741d455894dde05a7efa76df.png
rename to docs/FAQ/zh/media/03bd99c2741d455894dde05a7efa76df.png
diff --git a/docs/FAQ/zh/join_us/media/07e84b72f40480b3d47215bba25b991d.png b/docs/FAQ/zh/media/07e84b72f40480b3d47215bba25b991d.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/07e84b72f40480b3d47215bba25b991d.png
rename to docs/FAQ/zh/media/07e84b72f40480b3d47215bba25b991d.png
diff --git a/docs/FAQ/zh/join_us/media/119d57a4919443d8f3a9e0a5bb5ac64a.png b/docs/FAQ/zh/media/119d57a4919443d8f3a9e0a5bb5ac64a.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/119d57a4919443d8f3a9e0a5bb5ac64a.png
rename to docs/FAQ/zh/media/119d57a4919443d8f3a9e0a5bb5ac64a.png
diff --git a/docs/FAQ/zh/join_us/media/20d86071c46c8ac071d40b69c5391538.png b/docs/FAQ/zh/media/20d86071c46c8ac071d40b69c5391538.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/20d86071c46c8ac071d40b69c5391538.png
rename to docs/FAQ/zh/media/20d86071c46c8ac071d40b69c5391538.png
diff --git a/docs/FAQ/zh/join_us/media/232112373152af2c0ecdba8f867ad965.png b/docs/FAQ/zh/media/232112373152af2c0ecdba8f867ad965.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/232112373152af2c0ecdba8f867ad965.png
rename to docs/FAQ/zh/media/232112373152af2c0ecdba8f867ad965.png
diff --git a/docs/FAQ/zh/join_us/media/2402ce33f46407a306dbbc808a61c9dc.png b/docs/FAQ/zh/media/2402ce33f46407a306dbbc808a61c9dc.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/2402ce33f46407a306dbbc808a61c9dc.png
rename to docs/FAQ/zh/media/2402ce33f46407a306dbbc808a61c9dc.png
diff --git a/docs/FAQ/zh/join_us/media/2737bff4059f30ffbdbddb60c37980a6.png b/docs/FAQ/zh/media/2737bff4059f30ffbdbddb60c37980a6.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/2737bff4059f30ffbdbddb60c37980a6.png
rename to docs/FAQ/zh/media/2737bff4059f30ffbdbddb60c37980a6.png
diff --git a/docs/FAQ/zh/join_us/media/28b4959b7c0fcebcc5473a1a92a7f55f.png b/docs/FAQ/zh/media/28b4959b7c0fcebcc5473a1a92a7f55f.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/28b4959b7c0fcebcc5473a1a92a7f55f.png
rename to docs/FAQ/zh/media/28b4959b7c0fcebcc5473a1a92a7f55f.png
diff --git a/docs/FAQ/zh/join_us/media/2c7b59fe3c8411f610b1c2da72e60416.png b/docs/FAQ/zh/media/2c7b59fe3c8411f610b1c2da72e60416.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/2c7b59fe3c8411f610b1c2da72e60416.png
rename to docs/FAQ/zh/media/2c7b59fe3c8411f610b1c2da72e60416.png
diff --git a/docs/FAQ/zh/join_us/media/2e3623754f881f6509c9bfe83add627d.png b/docs/FAQ/zh/media/2e3623754f881f6509c9bfe83add627d.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/2e3623754f881f6509c9bfe83add627d.png
rename to docs/FAQ/zh/media/2e3623754f881f6509c9bfe83add627d.png
diff --git a/docs/FAQ/zh/join_us/media/32ad741bdff696c303ddee76eeb88677.png b/docs/FAQ/zh/media/32ad741bdff696c303ddee76eeb88677.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/32ad741bdff696c303ddee76eeb88677.png
rename to docs/FAQ/zh/media/32ad741bdff696c303ddee76eeb88677.png
diff --git a/docs/FAQ/zh/join_us/media/346efc8943131e0cb6fb676aa2ae78f7.png b/docs/FAQ/zh/media/346efc8943131e0cb6fb676aa2ae78f7.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/346efc8943131e0cb6fb676aa2ae78f7.png
rename to docs/FAQ/zh/media/346efc8943131e0cb6fb676aa2ae78f7.png
diff --git a/docs/FAQ/zh/join_us/media/348a8cd3a03f723bbebd7c75d7318a77.png b/docs/FAQ/zh/media/348a8cd3a03f723bbebd7c75d7318a77.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/348a8cd3a03f723bbebd7c75d7318a77.png
rename to docs/FAQ/zh/media/348a8cd3a03f723bbebd7c75d7318a77.png
diff --git a/docs/FAQ/zh/join_us/media/36649f7f072179c5f66469faa8cb5c90.png b/docs/FAQ/zh/media/36649f7f072179c5f66469faa8cb5c90.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/36649f7f072179c5f66469faa8cb5c90.png
rename to docs/FAQ/zh/media/36649f7f072179c5f66469faa8cb5c90.png
diff --git a/docs/FAQ/zh/join_us/media/3cd17618606dfc34f8b1a2f5966c7e91.png b/docs/FAQ/zh/media/3cd17618606dfc34f8b1a2f5966c7e91.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/3cd17618606dfc34f8b1a2f5966c7e91.png
rename to docs/FAQ/zh/media/3cd17618606dfc34f8b1a2f5966c7e91.png
diff --git a/docs/FAQ/zh/join_us/media/3ecb9425d13ffaf2eca140785cb1a2c9.png b/docs/FAQ/zh/media/3ecb9425d13ffaf2eca140785cb1a2c9.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/3ecb9425d13ffaf2eca140785cb1a2c9.png
rename to docs/FAQ/zh/media/3ecb9425d13ffaf2eca140785cb1a2c9.png
diff --git a/docs/FAQ/zh/join_us/media/549111123c867b49d5866a1888a87139.png b/docs/FAQ/zh/media/549111123c867b49d5866a1888a87139.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/549111123c867b49d5866a1888a87139.png
rename to docs/FAQ/zh/media/549111123c867b49d5866a1888a87139.png
diff --git a/docs/FAQ/zh/join_us/media/6c6cb269476d4a0b82b0039a59520ae4.png b/docs/FAQ/zh/media/6c6cb269476d4a0b82b0039a59520ae4.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/6c6cb269476d4a0b82b0039a59520ae4.png
rename to docs/FAQ/zh/media/6c6cb269476d4a0b82b0039a59520ae4.png
diff --git a/docs/FAQ/zh/join_us/media/748690654f71e0217ec7f8ac9b9f373f.png b/docs/FAQ/zh/media/748690654f71e0217ec7f8ac9b9f373f.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/748690654f71e0217ec7f8ac9b9f373f.png
rename to docs/FAQ/zh/media/748690654f71e0217ec7f8ac9b9f373f.png
diff --git a/docs/FAQ/zh/join_us/media/7c729ff347d8b0b71ef1e4ddc1fb3ab6.png b/docs/FAQ/zh/media/7c729ff347d8b0b71ef1e4ddc1fb3ab6.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/7c729ff347d8b0b71ef1e4ddc1fb3ab6.png
rename to docs/FAQ/zh/media/7c729ff347d8b0b71ef1e4ddc1fb3ab6.png
diff --git a/docs/FAQ/zh/join_us/media/816606baf28959a11f18c6e24458e9e6.png b/docs/FAQ/zh/media/816606baf28959a11f18c6e24458e9e6.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/816606baf28959a11f18c6e24458e9e6.png
rename to docs/FAQ/zh/media/816606baf28959a11f18c6e24458e9e6.png
diff --git a/docs/FAQ/zh/join_us/media/85156b64ef3e6223d65775b6ba68979e.png b/docs/FAQ/zh/media/85156b64ef3e6223d65775b6ba68979e.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/85156b64ef3e6223d65775b6ba68979e.png
rename to docs/FAQ/zh/media/85156b64ef3e6223d65775b6ba68979e.png
diff --git a/docs/FAQ/zh/join_us/media/9069cf02cdb7489443c5c9719012399f.png b/docs/FAQ/zh/media/9069cf02cdb7489443c5c9719012399f.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/9069cf02cdb7489443c5c9719012399f.png
rename to docs/FAQ/zh/media/9069cf02cdb7489443c5c9719012399f.png
diff --git a/docs/FAQ/zh/join_us/media/915236af05ccce877ff89c16bc8c6d9e.png b/docs/FAQ/zh/media/915236af05ccce877ff89c16bc8c6d9e.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/915236af05ccce877ff89c16bc8c6d9e.png
rename to docs/FAQ/zh/media/915236af05ccce877ff89c16bc8c6d9e.png
diff --git a/docs/FAQ/zh/join_us/media/Qp_Faq_join_us_050.png b/docs/FAQ/zh/media/Qp_Faq_join_us_050.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/Qp_Faq_join_us_050.png
rename to docs/FAQ/zh/media/Qp_Faq_join_us_050.png
diff --git a/docs/FAQ/zh/join_us/media/Qp_Faq_join_us_051.png b/docs/FAQ/zh/media/Qp_Faq_join_us_051.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/Qp_Faq_join_us_051.png
rename to docs/FAQ/zh/media/Qp_Faq_join_us_051.png
diff --git a/docs/FAQ/zh/join_us/media/Qp_Faq_join_us_052.png b/docs/FAQ/zh/media/Qp_Faq_join_us_052.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/Qp_Faq_join_us_052.png
rename to docs/FAQ/zh/media/Qp_Faq_join_us_052.png
diff --git a/docs/FAQ/zh/join_us/media/a0bf255b7e26a6da128a9a6bfef9a98f.png b/docs/FAQ/zh/media/a0bf255b7e26a6da128a9a6bfef9a98f.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/a0bf255b7e26a6da128a9a6bfef9a98f.png
rename to docs/FAQ/zh/media/a0bf255b7e26a6da128a9a6bfef9a98f.png
diff --git a/docs/FAQ/zh/join_us/media/a5d1460f83ea10904febaaf1b6fa83eb.png b/docs/FAQ/zh/media/a5d1460f83ea10904febaaf1b6fa83eb.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/a5d1460f83ea10904febaaf1b6fa83eb.png
rename to docs/FAQ/zh/media/a5d1460f83ea10904febaaf1b6fa83eb.png
diff --git a/docs/FAQ/zh/join_us/media/ac16302f7af83590b20ddbfc851f5489.png b/docs/FAQ/zh/media/ac16302f7af83590b20ddbfc851f5489.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/ac16302f7af83590b20ddbfc851f5489.png
rename to docs/FAQ/zh/media/ac16302f7af83590b20ddbfc851f5489.png
diff --git a/docs/FAQ/zh/join_us/media/b2aeef716dd0341ef9af3ab630117d21.png b/docs/FAQ/zh/media/b2aeef716dd0341ef9af3ab630117d21.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/b2aeef716dd0341ef9af3ab630117d21.png
rename to docs/FAQ/zh/media/b2aeef716dd0341ef9af3ab630117d21.png
diff --git a/docs/FAQ/zh/join_us/media/d28b6c5e33fffd309bde68093f212313.png b/docs/FAQ/zh/media/d28b6c5e33fffd309bde68093f212313.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/d28b6c5e33fffd309bde68093f212313.png
rename to docs/FAQ/zh/media/d28b6c5e33fffd309bde68093f212313.png
diff --git a/docs/FAQ/zh/join_us/media/d33aa45f8dc99af2409bddef280519fc.png b/docs/FAQ/zh/media/d33aa45f8dc99af2409bddef280519fc.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/d33aa45f8dc99af2409bddef280519fc.png
rename to docs/FAQ/zh/media/d33aa45f8dc99af2409bddef280519fc.png
diff --git a/docs/FAQ/zh/join_us/media/d6b7b0ca15c429c0deec153a1b8a7f51.png b/docs/FAQ/zh/media/d6b7b0ca15c429c0deec153a1b8a7f51.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/d6b7b0ca15c429c0deec153a1b8a7f51.png
rename to docs/FAQ/zh/media/d6b7b0ca15c429c0deec153a1b8a7f51.png
diff --git a/docs/FAQ/zh/join_us/media/e20c84d0e318efc0e1bb90c1ec2eb44b.png b/docs/FAQ/zh/media/e20c84d0e318efc0e1bb90c1ec2eb44b.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/e20c84d0e318efc0e1bb90c1ec2eb44b.png
rename to docs/FAQ/zh/media/e20c84d0e318efc0e1bb90c1ec2eb44b.png
diff --git a/docs/FAQ/zh/join_us/media/ec285c9fb0731355ce3b2f99aed57e20.png b/docs/FAQ/zh/media/ec285c9fb0731355ce3b2f99aed57e20.png
old mode 100755
new mode 100644
similarity index 100%
rename from docs/FAQ/zh/join_us/media/ec285c9fb0731355ce3b2f99aed57e20.png
rename to docs/FAQ/zh/media/ec285c9fb0731355ce3b2f99aed57e20.png
diff --git a/docs/FAQ/zh/sidebar.yaml b/docs/FAQ/zh/sidebar.yaml
index cc815e777c9ed3e4347968bc573e51575261ef89..d6060574d3fb66680df3ff2298c04a2ec38f3e24 100644
--- a/docs/FAQ/zh/sidebar.yaml
+++ b/docs/FAQ/zh/sidebar.yaml
@@ -1,10 +1,20 @@
-# FAQ 常见问题
+# FAQ常见问题
items:
- - label: FAQ&常见问题
- file: README.md
- label: 参与贡献
- file: join_us/README.md
+ file: README.md
- label: QuecPython_FAQ
- file: QuecPython_FAQ/QuecPython_FAQ.md
+ items:
+ - label: QuecPython常见问题第一部分
+ file: QP_common_question01/QP_common_question01.md
+ - label: QuecPython常见问题第二部分
+ file: QP_common_question02/QP_common_question02.md
+ - label: QuecPython驱动固件脚本下载
+ file: QP_download/QP_download.md
+ - label: QuecPython驱动安装失败问题解决
+ file: QP_driver_failed/QP_driver_failed.md
+ - label: QuecPython救砖处理
+ file: QP_recovery/QP_recovery.md
+ - label: QuecPython测试问题
+ file: QP_test/QP_test.md
- label: Format_String
- file: Format_String/Format_String.md
\ No newline at end of file
+ file: Format_String/Format_String.md
diff --git a/docs/Quick_start/zh/sidebar.yaml b/docs/Quick_start/zh/sidebar.yaml
index 48b0cbbb882a0f0416ddf11d6fe8a4de612a386c..678b00e34e14a104c72928c8c9d1985ff1af9107 100755
--- a/docs/Quick_start/zh/sidebar.yaml
+++ b/docs/Quick_start/zh/sidebar.yaml
@@ -2,5 +2,5 @@
items:
- label: QuecPython 开发环境搭建
file: README.md
- - label: QPYcom GUI工具使用
+ - label: QuecPython快速入门
file: QuecPythonHelloWord/README.md