Python/Pygame按钮按下可获得声音
我对编程很陌生。我正在建立一个项目:当我按下门铃按钮时,一张图片会发送到我的手机(带有Python/Pygame按钮按下可获得声音,python,audio,raspberry-pi,pygame,Python,Audio,Raspberry Pi,Pygame,我对编程很陌生。我正在建立一个项目:当我按下门铃按钮时,一张图片会发送到我的手机(带有twilio和Imgur),我还希望按下同一个按钮时门铃会响。我对初始部分的编码正在工作,图片正在发送到我的手机 import os.path as pth import os import re import pyimgur import time import picamera import RPi.GPIO as GPIO from twilio.rest import TwilioRestClient
twilio
和Imgur
),我还希望按下同一个按钮时门铃会响。我对初始部分的编码正在工作,图片正在发送到我的手机
import os.path as pth
import os
import re
import pyimgur
import time
import picamera
import RPi.GPIO as GPIO
from twilio.rest import TwilioRestClient
# Defining GPIO port on RPI
BUTTON = 19
# setup GPIO using Broadcom SOC channel numbering
GPIO.setmode(GPIO.BCM)
# set to pull-up (normally closed position for a pushbutton)
GPIO.setup(BUTTON, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# Twilio credentials
TWILIO_SID = "####"
TWILIO_AUTH = "####"
# Phone Numbers
HOME_PHONE = "####"
TWILIO_PHONE = "####"
# text message to send with photo
TXT = "Someones at the Door!"
# directory to save the snapshot in
IMAGE_STORAGE = "/home/pi/Pictures/"
# imgur client setup
IMGUR_ID = "#####"
# name and dimensions of snapshot image
IMG = "snaps.jpg"
IMG_WIDTH = 800
IMG_HEIGHT = 600
# initalize the Twilio client
client = TwilioRestClient(TWILIO_SID, TWILIO_AUTH)
# initialize imgur client
im = pyimgur.Imgur(IMGUR_ID)
try:
# indefinite loop for the doorbell
while True:
GPIO.wait_for_edge(BUTTON, GPIO.RISING)
print("DoorBell\n")
with picamera.PiCamera() as camera:
camera.resolution = (IMG_WIDTH, IMG_HEIGHT)
camera.capture(IMAGE_STORAGE + IMG)
uploaded_image = im.upload_image(IMAGE_STORAGE + IMG, title=TXT)
client.messages.create(
to=HOME_PHONE,
from_=TWILIO_PHONE,
body=TXT,
media_url=uploaded_image.link,
)
finally:
GPIO.cleanup() # ensures a clean exit
这个代码可以很好地将图片发送到我的手机,我现在需要的是让按钮通过我的RPI上的3.5毫米插孔发出声音的代码。我对此(不起作用)的编码如下:
当我尝试运行此功能时,我得到:
文件“/home/pi/Desktop/sound code.py”,第23行,在
mixer.music.play(sndA)类型错误:需要整数
我想知道是否有人知道如何解决这个问题,是否有办法将这两个脚本组合成一个脚本
我已经在这最后一部分进行了大约4天了,我在一个时间表上,所以我只是在寻找任何帮助 mixer.music.load()
返回None
,无论输入是什么(参见文档)。这意味着sndA
也会得到None
但是正如您所看到的,pygame.mixer.music.play()
方法需要两个数字(实际上是可选的,所以您不需要指定它们)
您不必使用任何变量来保存声音。只需调用play()
即可播放先前加载的文件:
mixer.music.load('/home/pi/Desktop/doorbell-7.mp3')
# ...
mixer.music.play(-1) # -1 = infinite loop
尝试使用混音器中的声音对象,而不是音乐功能
doorbell = pygame.mixer.Sound(filename)
doorbell.play()
查看此链接:
至于组合代码,我建议将发送图片的代码打包成一个函数,并在第二个函数的if语句中调用它。但是,对于循环的多次迭代,keypress函数将返回true,您可以通过存储前一个keypress值并将其与当前值进行比较来获得该值:
last_keypress = False
while True:
if (not last_keypress) and (GPIO.Input(19)):
<do stuff>
last_keypress = GPIO.Input(19)
time.sleep(.01)
last_keypress=False
尽管如此:
如果(不是最后一次按键)和(GPIO.Input(19)):
最后一次按键=GPIO.Input(19)
时间。睡眠(.01)
我不得不说这是一种更漂亮的方式谢谢!这帮了大忙,我明白了:)
last_keypress = False
while True:
if (not last_keypress) and (GPIO.Input(19)):
<do stuff>
last_keypress = GPIO.Input(19)
time.sleep(.01)