diff --git a/docs/Advanced_development/zh/QuecPythonBus/button.md b/docs/Advanced_development/zh/QuecPythonBus/button.md
new file mode 100644
index 0000000000000000000000000000000000000000..acfec324500112026c303a12032867fa95005da6
--- /dev/null
+++ b/docs/Advanced_development/zh/QuecPythonBus/button.md
@@ -0,0 +1,68 @@
+# 按键输入实验
+
+## 修订历史
+
+| 版本 | 日期 | 作者 | 变更表述 |
+| ---- | ---------- | ---- | -------- |
+| 1.0 | 2021-09-17 | Grey | 初版 |
+
+文档主要介绍如何实现检测 GPIO 电平,从硬件设计和软件设计两方面讲解,通过阅读本文,您将学会查看硬件连接关系、代码编写思路和验证实验理论。
+
+有关API详解请参考 [QuecPython-machine - PIN](https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=pin)
+
+
+
+## 硬件资源
+
+EC600x 开发板引出了两个 PIN 脚供客户实验按键输入实验。
+
+我们配置对应 GPIO 为上拉输入模式便可以通过按而不按按键改变 GPIO的电平。
+
+
+
+
+
+## 软件设计
+
+首先确定要检测的硬件引脚是那一个 GPIO ,我们通过官网的 API 类库找到对应的 GPIO编号 。详解请参考 [QuecPython-machine - PIN](https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=pin)
+
+例: EC600S/N的引脚10为GPIO1。
+
+而我们 EC600x 开发板两个按键 PIN59/PIN60,对应EC600S/N为:PIN59 => GPIO12;PIN60 => GPIO13。对应EC600U为:PIN60 => GPIO4;PIN59 无对应 GPIO,不能进行按键输入检测。这边我们实现一个按键的按键检测功能。
+
+### 代码实现
+
+```python
+import utime
+from machine import Pin
+
+
+if __name__ == '__main__':
+ gpio13 = Pin(Pin.GPIO13, Pin.IN, Pin.PULL_PU, 1) # EC600S/N开发板使用
+ # gpio13 = Pin(Pin.GPIO4, Pin.IN, Pin.PULL_PU, 1) # EC600U开发板使用
+ while True:
+ if gpio13.read() == 0:
+ utime.sleep_ms(10)
+ if gpio13.read() == 0:
+ while gpio13.read() == 0:
+ pass
+ print("GPIO13按下")
+ pass
+```
+
+
+
+## 下载验证
+
+下载.py 文件到模组运行:
+
+
+
+下载之后,按下按键,便会有信息打印:
+
+
+
+## 配套代码
+
+
+ 下载代码
\ No newline at end of file
diff --git a/docs/Advanced_development/zh/QuecPythonBus/buzzer.md b/docs/Advanced_development/zh/QuecPythonBus/buzzer.md
new file mode 100644
index 0000000000000000000000000000000000000000..f290fe779ca867c73094f053d4dc77f54dc2a5a7
--- /dev/null
+++ b/docs/Advanced_development/zh/QuecPythonBus/buzzer.md
@@ -0,0 +1,137 @@
+# 蜂鸣器实验
+
+## 修订历史
+
+| 版本 | 日期 | 作者 | 变更表述 |
+|------|------|------|------|
+| 1.0 | 2021-03-20 | gary.zhou | 初版 |
+| 1.1 | 2021-09-15 | Grey.Tu | 修改有缘蜂鸣器绘制为无缘蜂鸣器控绘制. |
+
+文档主要介绍如何 PWM 控制 **无缘蜂鸣器** ,使 **无缘蜂鸣器** 发声。从硬件设计和软件设计两方面讲解,通过阅读本文,可以学习 PWM 基本使用。
+
+有关 API 详解请参考 [QuecPython-misc - PWM](https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=pwm)
+
+
+
+## 硬件描述
+
+蜂鸣器分为 **有源蜂鸣器** 与 **无源蜂鸣器** 两种。 **有缘蜂鸣器** 直接供电就会发声,控制如同 LED ,控制引脚输出高低电平即可。硬件电路也与 LED 电路类似。 有关驱动请参考 LED 控制章节。本文主要介绍 **无源蜂鸣器** 的驱动,实现 PWM 控制 **无缘蜂鸣器** 。
+
+
+
+淘宝搜索购买无源蜂鸣器
+
+
+
+无源蜂鸣器通过PWM开关三极管驱动。 我们只需要电源,以及2KHz~5KHz 的pwm方波即可。
+
+
+
+
+
+## 软件设计
+
+#### 查询开发板对应的IO口
+
+首先确定要控制硬件的哪个引脚,然后通过官网的 API 类库找到对应的 PWM 编号 。详解请参考 [QuecPython-misc - PWM](https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=pwm) 例:
+
+| 模块型号 | **对应引脚号** |
+| -------------------------------------- | -------------- |
+| EC600S/N ==> PWM2
EC600U ==> PWM0 | 引脚号70 |
+
+
+### **实验代码**
+
+```python
+
+from misc import PWM
+import utime as time
+import urandom as random
+import log
+
+# API https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=pwm
+# 蜂鸣器模块 https://detail.tmall.com/item.htm?id=41251333522
+# 无源蜂鸣器-频率可控版
+
+"""
+
+pwm0 = PWM(PWM.PWMn,PWM.ABOVE_xx,highTime,cycleTime)
+
+注:EC600SCN平台,支持PWM0-PWM3,对应引脚如下:
+
+PWM0 – 引脚号52
+
+PWM1 – 引脚号53
+
+PWM2 – 引脚号70
+
+PWM3 – 引脚号69
+
+"""
+
+# 获取logger对象
+
+buzzer_log = log.getLogger("buzzer_test")
+
+# Duration 为 ms
+
+def outputpwm(HZ, duty_cycle, Duration):
+
+ # 将HZ 转化为 10us 级别
+
+ cycleTime = int((10000000/HZ)/10)
+ highTime = int(cycleTime * duty_cycle)
+
+ # 输出debug级别的日志
+
+ buzzer_log.debug(
+ """out put pin70 cycleTime {0} * 10us,
+ highTime {1} * 10us, Duration of {2}"""
+ .format(cycleTime, highTime, Duration))
+ pwm1 = PWM(PWM.PWM2, PWM.ABOVE_10US, highTime, cycleTime)
+ pwm1.open()
+
+ # 休眠给定毫秒数的时间
+
+ time.sleep_ms(Duration)
+ pwm1.close()
+ pass
+
+
+def test_Buzzer():
+
+ #设置日志输出级别
+
+ log.basicConfig(level=log.DEBUG)
+
+ # 循环遍历10次
+
+ for i in range(10):
+
+ # 随机生成 start 到 end 范围内的浮点数,范围可以自己选择, 0~1
+
+ duty_cycle = random.uniform(0.1, 0.8)
+
+ # 建议输出2000~5000HZ 的PWM波形
+ # 随机生成一个 start 到 end 之间的整数
+
+ HZ = random.randint(2000, 5000)
+ outputpwm(HZ, duty_cycle, 500)
+ time.sleep_ms(1500)
+
+ pass
+
+
+if __name__ == "__main__":
+
+ # creat a thread Check key status
+
+ test_Buzzer()
+
+# 将代码下载运行,可以听到蜂鸣器产生随机的声音
+```
+
+## 配套代码
+
+* [下载代码](code/code_buzzer.py)
+
\ No newline at end of file
diff --git a/docs/Advanced_development/zh/QuecPythonBus/code/code_button.py b/docs/Advanced_development/zh/QuecPythonBus/code/code_button.py
new file mode 100644
index 0000000000000000000000000000000000000000..097c0992ad2c319c7eabecbc90f4caa34713697c
--- /dev/null
+++ b/docs/Advanced_development/zh/QuecPythonBus/code/code_button.py
@@ -0,0 +1,15 @@
+import utime
+from machine import Pin
+
+
+if __name__ == '__main__':
+ gpio13 = Pin(Pin.GPIO13, Pin.IN, Pin.PULL_PU, 1) # EC600S/N开发板使用
+ # gpio13 = Pin(Pin.GPIO4, Pin.IN, Pin.PULL_PU, 1) # EC600U开发板使用
+ while True:
+ if gpio13.read() == 0:
+ utime.sleep_ms(10)
+ if gpio13.read() == 0:
+ while gpio13.read() == 0:
+ pass
+ print("GPIO13按下")
+ pass
diff --git a/docs/Advanced_development/zh/QuecPythonBus/code/code_buzzer.py b/docs/Advanced_development/zh/QuecPythonBus/code/code_buzzer.py
new file mode 100644
index 0000000000000000000000000000000000000000..5225c7bbaed9b85736d1dad9b7cd261fc11b6215
--- /dev/null
+++ b/docs/Advanced_development/zh/QuecPythonBus/code/code_buzzer.py
@@ -0,0 +1,83 @@
+from misc import PWM
+import utime as time
+import urandom as random
+import log
+
+# API https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=pwm
+# 蜂鸣器模块 https://detail.tmall.com/item.htm?id=41251333522
+# 无源蜂鸣器-频率可控版
+
+"""
+
+pwm0 = PWM(PWM.PWMn,PWM.ABOVE_xx,highTime,cycleTime)
+
+注:EC600SCN平台,支持PWM0-PWM3,对应引脚如下:
+
+PWM0 – 引脚号52
+
+PWM1 – 引脚号53
+
+PWM2 – 引脚号70
+
+PWM3 – 引脚号69
+
+"""
+
+# 获取logger对象
+
+buzzer_log = log.getLogger("buzzer_test")
+
+# Duration 为 ms
+
+def outputpwm(HZ, duty_cycle, Duration):
+
+ # 将HZ 转化为 10us 级别
+
+ cycleTime = int((10000000/HZ)/10)
+ highTime = int(cycleTime * duty_cycle)
+
+ # 输出debug级别的日志
+
+ buzzer_log.debug(
+ """out put pin70 cycleTime {0} * 10us,
+ highTime {1} * 10us, Duration of {2}"""
+ .format(cycleTime, highTime, Duration))
+ pwm1 = PWM(PWM.PWM2, PWM.ABOVE_10US, highTime, cycleTime)
+ pwm1.open()
+
+ # 休眠给定毫秒数的时间
+
+ time.sleep_ms(Duration)
+ pwm1.close()
+ pass
+
+
+def test_Buzzer():
+
+ #设置日志输出级别
+
+ log.basicConfig(level=log.DEBUG)
+
+ # 循环遍历10次
+
+ for i in range(10):
+
+ # 随机生成 start 到 end 范围内的浮点数,范围可以自己选择, 0~1
+
+ duty_cycle = random.uniform(0.1, 0.8)
+
+ # 建议输出2000~5000HZ 的PWM波形
+ # 随机生成一个 start 到 end 之间的整数
+
+ HZ = random.randint(2000, 5000)
+ outputpwm(HZ, duty_cycle, 500)
+ time.sleep_ms(1500)
+
+ pass
+
+
+if __name__ == "__main__":
+
+ # creat a thread Check key status
+
+ test_Buzzer()
\ No newline at end of file
diff --git a/docs/Advanced_development/zh/QuecPythonBus/media/media_button_1.jpg b/docs/Advanced_development/zh/QuecPythonBus/media/media_button_1.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..99ad61a5655bdc24f0b63c0480548be6014594d0
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonBus/media/media_button_1.jpg differ
diff --git a/docs/Advanced_development/zh/QuecPythonBus/media/media_button_2.jpg b/docs/Advanced_development/zh/QuecPythonBus/media/media_button_2.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5f7d9a8fdcc6186a90a06efeaced6fcf0e872fe4
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonBus/media/media_button_2.jpg differ
diff --git a/docs/Advanced_development/zh/QuecPythonBus/media/media_button_3.jpg b/docs/Advanced_development/zh/QuecPythonBus/media/media_button_3.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..1b8ca2f4595ea54bb892cfbf6c6854e1b9b195e0
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonBus/media/media_button_3.jpg differ
diff --git a/docs/Advanced_development/zh/QuecPythonBus/media/media_button_4.jpg b/docs/Advanced_development/zh/QuecPythonBus/media/media_button_4.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..80bd9f7dd8497851cab1c8ea92455a595be6a9a7
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonBus/media/media_button_4.jpg differ
diff --git a/docs/Advanced_development/zh/QuecPythonBus/media/media_buzzer_1.jpg b/docs/Advanced_development/zh/QuecPythonBus/media/media_buzzer_1.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..08655fb0aca59b86c0c8c0c856522fe0f440cd1a
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonBus/media/media_buzzer_1.jpg differ
diff --git a/docs/Advanced_development/zh/QuecPythonBus/media/media_buzzer_2.jpg b/docs/Advanced_development/zh/QuecPythonBus/media/media_buzzer_2.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..04f1abf9f20c5d03199c9f018b7fb957cc5db9b4
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonBus/media/media_buzzer_2.jpg differ
diff --git a/docs/Advanced_development/zh/QuecPythonBus/media/media_buzzer_3.jpg b/docs/Advanced_development/zh/QuecPythonBus/media/media_buzzer_3.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e46d0e65656a8f8d992dd1a51dc20e7c6157d2a0
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonBus/media/media_buzzer_3.jpg differ