How to use the Raspberry Pi and Python to control a buzzer All In One
How to use the Raspberry Pi and Python to control a buzzer All In One
如何使用树莓派和Python来控制蜂鸣器
蜂鸣器
有源
蜂鸣器 vs无源
蜂鸣器
现在有很多人对有源蜂鸣器
和无源蜂鸣器
的概念不是很清楚,这里做简单介绍,希望对大家日后使用有所帮助。
注意,这里的“源”不是指电源。而是指震荡源
。
无源蜂鸣器的特点:
- 无源内部不带
震荡源
,所以如果用直流信号无法
令其鸣叫。必须用2K~5K的方波
去驱动它 声音频率
可控,可以做出“多来米发索拉西”的效果。(高阶玩家
)- 在一些特例中,可以和 LED 复用一个控制口
💡: 使用无源蜂鸣器,只要输出不同频率
的PWM 波
,即可发出不同的音符
; 不同的音符组合起来就是一个曲子
了, 可以用来播放音乐
; ✅
有源蜂鸣器的特点:
- 有源蜂鸣器内部带震荡源,所以只要一通电就会叫
- 程序控制方便,单片机一个高低电平就可以让其发出声音,而无源蜂鸣器却做不到
errors ❌
AttributeError: 'NoneType' object has no attribute 'value'
AttributeError: 'NoneType' object has no attribute 'off'
GPIO.output(PIN, GPIO.LOW) ValueError: Channel must be an integer or list/tuple of integers
on
/off
❌
print('开始鸣叫 🔔')
try:
for i in range(3):
print('鸣叫 ✅', i)
buzzer.value(0)
sleep(1)
buzzer.value(1)
except KeyboardInterrupt:
print('鸣叫 ❌')
GPIO.cleanup()
finally:
print('结束鸣叫 🔔')
value(1)
/value(0)
print('开始鸣叫 🔔')
try:
for i in range(3):
print('鸣叫 ✅', i)
buzzer.off()
sleep(1)
buzzer.on()
except KeyboardInterrupt:
print('鸣叫 ❌')
GPIO.cleanup()
finally:
print('结束鸣叫 🔔')
- ???
solutions ✅
PIN
PIN = 17
# 有源蜂鸣器,低电平触发
buzzer = GPIO.setup(PIN, GPIO.OUT)
print('🔔 buzzer =', buzzer)
# 🔔 buzzer = None ❌
print('开始鸣叫 🔔')
try:
for i in range(3):
print('鸣叫 ✅', i)
GPIO.output(PIN, GPIO.LOW)
sleep(1)
GPIO.output(PIN, GPIO.HIGH)
except KeyboardInterrupt:
print('鸣叫 ❌')
GPIO.cleanup()
finally:
print('结束鸣叫 🔔')
demos
有源
蜂鸣器模块,低电平
触发 (电子积木模块)
模块描述:
模块采用 S8550
三极管驱动
工作电压 3.3V-5V
设有固定螺栓孔
,方便安装
小板 PCB尺寸:3.2cm * 1.3cm
当I/O口输入低电平
时,蜂鸣器发声
模块接口说明(3线制:
VCC 外接 3.3V-5V
电压(可以直接与5v单片机和3.3v单片机相连)
GND 外接 GND
I/O 外接单片机 IO口
#!/usr/bin/env python3
# coding: utf8
from time import sleep
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
PIN = 17
# 有源蜂鸣器,低电平触发
buzzer = GPIO.setup(PIN, GPIO.OUT)
print('🔔 buzzer =', buzzer)
# 🔔 buzzer = None ❌
# print('GPIO.RPI_INFO =', GPIO.RPI_INFO)
# print('GPIO.VERSION =', GPIO.VERSION)
# P17_value = GPIO.gpio_function(17)
# print('GPIO.gpio_function(17) =', P17_value)
print('开始鸣叫 🔔')
try:
for i in range(3):
print('鸣叫 ✅', i)
# buzzer.off()
# buzzer.value(0)
GPIO.output(PIN, GPIO.LOW)
sleep(1)
# buzzer.on()
# buzzer.value(1)
GPIO.output(PIN, GPIO.HIGH)
except KeyboardInterrupt:
print('鸣叫 ❌')
GPIO.cleanup()
finally:
print('结束鸣叫 🔔')
"""
https://www.cnblogs.com/xgqfrms/p/17404551.html
https://github.com/xgqfrms/Raspberry-Pi/tree/master/Python
"""
代码优化
#!/usr/bin/env python3
# coding: utf8
from time import sleep
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
PIN = 17
# 有源蜂鸣器,低电平触发
buzzer = GPIO.setup(PIN, GPIO.OUT)
print('🔔 buzzer =', buzzer)
# 🔔 buzzer = None ❌
# print('GPIO.RPI_INFO =', GPIO.RPI_INFO)
# print('GPIO.VERSION =', GPIO.VERSION)
# P17_value = GPIO.gpio_function(17)
# print('GPIO.gpio_function(17) =', P17_value)
print('开始鸣叫 🔔')
try:
for i in range(3):
print('鸣叫 ✅', i)
# buzzer.off()
# buzzer.value(0)
GPIO.output(PIN, GPIO.LOW)
sleep(1)
# buzzer.on()
# buzzer.value(1)
GPIO.output(PIN, GPIO.HIGH)
except KeyboardInterrupt:
print('鸣叫 ❌')
finally:
GPIO.cleanup()
print('结束鸣叫 🔔')
"""
https://www.cnblogs.com/xgqfrms/p/17404551.html
https://github.com/xgqfrms/Raspberry-Pi/tree/master/Python
"""
无源
蜂鸣器模块,高电平
触发 (电子积木模块)
#!/usr/bin/env python3
# coding: utf8
from time import sleep
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
# GPIO.setwarnings(False)
PIN = 18
Hz = 4978
GPIO.setup(PIN, GPIO.OUT)
# 设置 GPIO 18 PIN 为 PWM 输出, PWM 脉冲频率为 4978Hz (2KHz ~ 5KHZ)
pwm = GPIO.PWM(PIN, Hz)
print('pwm =', pwm)
print('\n开始鸣叫 🔔')
try:
# DutyCycle 0.0 ~ 100.0
pwm.start(0.0)
pwm.ChangeDutyCycle(50.0)
sleep(1)
pwm.stop()
except KeyboardInterrupt:
print('鸣叫 ❌')
finally:
GPIO.cleanup()
print('结束鸣叫 🔔')
"""
GPIO 18(PWM0)
GPIO 12(PWM0)
GPIO 13(PWM1)
GPIO 19(PWM1)
https://pinout.xyz/pinout/pwm
https://pinout.xyz/pinout/pin12_gpio18
`无源蜂鸣器`的特点:
1. 无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用`2K~5K`的方波去驱动它
2. 声音频率可控,可以做出“多来米发索拉西”的效果。(高阶玩家)
3. 在一些特例中,可以和 LED 复用一个控制口
💡: 使用无源蜂鸣器,只要输出不同频率的 PWM 方波(数字信号),即可发出不同的音符; 不同的音符组合起来就是一个曲子了, 可以用来播放音乐; ✅
模拟信号:连续性
数字信号: 非连续 0 ~ 1
https://www.cnblogs.com/xgqfrms/p/17404551.html
"""
(🐞 反爬虫测试!打击盗版⚠️)如果你看到这个信息, 说明这是一篇剽窃的文章,请访问 https://www.cnblogs.com/xgqfrms/ 查看原创文章!
refs
©xgqfrms 2012-2021
www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!
原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!
本文首发于博客园,作者:xgqfrms,原文链接:https://www.cnblogs.com/xgqfrms/p/17404551.html
未经授权禁止转载,违者必究!