Il y a deux types de buzzer, les buzzers ACTIF et PASSIF.
l’ ACTIF fabrique du bruit quand il reçoit une alimentation continue, comme une sonnette.
le PASSIF n’est, en gros, qu’un haut parleur miniature à qui il faut fournir le signal audio à diffuser.
J’ai construit la bibliothèque suivante pour declarer un buzzer.
########################################
# C L A S S : PASSIFBUZZER
#
# HUB.BOSSEUR@GMAIL.COM
# http://aubonsurf.free.fr
#######################################
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
# Declaration des E/S
# Usage : moBuzzer=PassifBuzzer(PinUtiliser, ModeDeNumerotation)
# exemple : moBuzzer=PassifBuzzer(4, BCM)
# monBuzzer.play(pitches, duration)
# Piches = tableau de fréquences
# duration = tableau de durees
# monBuzzer.clean()
class PassifBuzzer:
def __init__(self, pinBZ,typeBoard):
self.pin_BZ=pinBZ
print ("Declaration Buzzer sur PIN "+str(self.pin_BZ))
if typeBoard=='BCM':
GPIO.setmode(GPIO.BCM)
print ("BCM")
else:
GPIO.setmode(GPIO.BOARD)
print ("BOARD")
GPIO.setup(self.pin_BZ, GPIO.IN)
GPIO.setup(self.pin_BZ, GPIO.OUT)
print("buzzer ready")
#Fonction buzz avec une frequence et une duree)
def buzz(self,pitch, duration):
if(pitch==0):
time.sleep(duration)
return
period = 1.0 / pitch #periode=1/frequence
delay = period / 2
cycles = int(duration * pitch) #nombre de cycle pour la duree avec cette frequence)
for i in range(cycles): #jouer un cycle
GPIO.output(self.pin_BZ, True)
time.sleep(delay)
GPIO.output(self.pin_BZ, False)
time.sleep(delay)
def play(self, pitches, duration):
#GPIO.setmode(GPIO.BCM)
#GPIO.setup(self.buzzer_pin, GPIO.OUT)
x=0
for p in pitches:
print (p, duration[x])
self.buzz(p, duration[x]/100) #feed the pitch and duration to the function, “buzz”
time.sleep(duration[x]/200)
x+=1
def clean(self):
GPIO.cleanup()
print("close "+str(self.pin_BZ))
import passifBuzzer
import time
import os
#NOTES
c3=763
d3=680
e3=606
f3=571
g3=510
a3=454
b3=404
c4=381
d4=340
e4=303
f4=286
g4=255
a4=227
a4s=214
b4=202
c5=191
d5=170
d5s=160
e5=151
f5=143
g5=127
a5=113
a5s=107
b5=101
c6=95
R=0
PIN_PASSIDFBUZZ=17
starWarThemeNote=[ f4, f4, f4, a4s, f5, d5s, d5, c5, a5s, f5, d5s, d5, c5, a5s, f5, d5s, d5, d5s, c5]
starWarThemeTone=[ 21, 21, 21, 128, 128, 21, 21, 21, 128, 64, 21, 21, 21, 128, 64, 21, 21, 21, 128 ]
marcehImperialeNote=[a4, R, a4, R, a4, R, f4, R, c5, R, a4, R, f4, R, c5, R, a4, R, e5, R, e5, R, e5, R, f5, R, c5, R, g5, R, f5, R, c5, R, a4, R]
marcehImperialeTone=[50, 20, 50, 20, 50, 20, 40, 5, 20, 5, 60, 10, 40, 5, 20, 5, 60, 80, 50, 20, 50, 20, 50, 20, 40, 5, 20, 5, 60, 10, 40, 5, 20, 5, 60, 40]
if __name__ == '__main__':
buz=passifBuzzer.PassifBuzzer(PIN_PASSIDFBUZZ, 'BCM')
try:
buz.play(starWarThemeNote,starWarThemeTone)
buz.play(marcehImperialeNote,marcehImperialeTone)
except KeyboardInterrupt:
buz.clean()