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的电平。 + +![media_button_1](media/media_button_1.jpg) + + + +## 软件设计 + +首先确定要检测的硬件引脚是那一个 GPIO ,我们通过官网的 API 类库找到对应的 GPIO编号 。详解请参考 [QuecPython-machine - PIN](https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=pin) + +例: ![media_button_2](media/media_button_2.jpg)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 文件到模组运行: + +![media_button_3](media/media_button_3.jpg) + +下载之后,按下按键,便会有信息打印: + +![media_button_4](media/media_button_4.jpg) + +## 配套代码 + + + 下载代码 \ 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 控制 **无缘蜂鸣器** 。 + +![media_buzzer_1](media/media_buzzer_1.jpg) + +淘宝搜索购买无源蜂鸣器 + +![media_buzzer_2](media/media_buzzer_2.jpg) + +无源蜂鸣器通过PWM开关三极管驱动。 我们只需要电源,以及2KHz~5KHz 的pwm方波即可。 + +![media_buzzer_3](media/media_buzzer_3.jpg) + + + +## 软件设计 + +#### 查询开发板对应的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