xgqfrms™, xgqfrms® : xgqfrms's offical website of cnblogs! xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

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来控制蜂鸣器

image

蜂鸣器

有源蜂鸣器 vs 无源蜂鸣器

现在有很多人对有源蜂鸣器无源蜂鸣器的概念不是很清楚,这里做简单介绍,希望对大家日后使用有所帮助。
注意,这里的“源”不是指电源。而是指震荡源

无源蜂鸣器的特点:

  1. 无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它
  2. 声音频率可控,可以做出“多来米发索拉西”的效果。(高阶玩家)
  3. 在一些特例中,可以和 LED 复用一个控制口

💡: 使用无源蜂鸣器,只要输出不同频率PWM 波,即可发出不同的音符; 不同的音符组合起来就是一个曲子了, 可以用来播放音乐; ✅

有源蜂鸣器的特点:

  1. 有源蜂鸣器内部带震荡源,所以只要一通电就会叫
  2. 程序控制方便,单片机一个高低电平就可以让其发出声音,而无源蜂鸣器却做不到

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

  1. 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('结束鸣叫 🔔')

  1. 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('结束鸣叫 🔔')

  1. ???

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('结束鸣叫 🔔')

https://raspberrypi.stackexchange.com/questions/55718/rpi-gpio-library-working-in-python-3-4-but-not-in-python-2-7

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口

image


#!/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

"""

refs



©xgqfrms 2012-2025

www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!

原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!


posted @   xgqfrms  阅读(55)  评论(3编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
历史上的今天:
2022-05-16 SwiftUI 父子 UI 组件之间通信 All In One
2022-05-16 Swift & SwiftUI delay code All In One
2022-05-16 SwiftUI & Xcode crashed error All In One
2022-05-16 Swift comments All In One
2021-05-16 饺子(水饺),馄饨,抄手 All In One
2020-05-16 TweenMax & GSAP & SVG Animation
2020-05-16 vue-parent-child-lifecycle-order All In One
点击右上角即可分享
微信分享提示