2016-07-06 49 views
1

私はプログラミングがとても慣れています。私はプロジェクトを構築しています:私は私のドアベルボタンを押して、画像は私の電話(twilioImgur)を送信し、同じボタンが押されたときにもドアベルの音が消えたい。私は最初の部分を持っているコーディングが働いている、と絵は私が今必要なのも、プッシュボタンを持っているコードで、Python/Pygameボタンを押して音を鳴らす

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.5mmジャックを使って音を出す。そのため、私が持っている符号化(それが動作しません)これです:私は試してみて、私が手にこれを実行すると

from pygame import mixer 
import RPi.GPIO as GPIO 
from time import sleep 
from sys import exit 

# 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) 

mixer.init(48000, -16, 1, 1024) 

sndA = mixer.music.load('/home/pi/Desktop/doorbell-7.mp3') 

while True: 
    try: 
     if (GPIO.input(19) == True): 
      mixer.music.play(sndA) 
      sleep(.01) 
    except KeyboardInterrupt: 
     exit() 

:誰もがこの問題を解決する方法を知っていた場合

File "/home/pi/Desktop/sound code.py", line 23, in mixer.music.play(sndA) TypeError: an integer is required

私は思っていた、とこれらの2つのスクリプトを1つに結合する方法があれば?

私は今、この最後の部分で約4日間行っています。私はタイムライン上にいるので、私はちょっと助けを求めています。

答えて

2

mixer.music.load()入力が何であってもNoneが返されます(ドキュメントhereを参照)。つまり、sndANoneになります。

しかし、pygame.mixer.music.play()メソッドでは、hereのように、2つの数値が必要です(実際にはオプションなので、指定する必要はありません)。

サウンドを保持するために変数を使用する必要はありません。ただ、play()を呼び出し、以前にロードされたファイルが再生されます:

mixer.music.load('/home/pi/Desktop/doorbell-7.mp3') 

# ... 

mixer.music.play(-1) # -1 = infinite loop 
0

ではなく、音楽機能のミキサーからSoundオブジェクトを使用してみてください。

doorbell = pygame.mixer.Sound(filename) 
doorbell.play() 

このリンクをチェックアウト:コードを組み合わせることについては Pygame Sound object

を、私は関数に画像を送信するコードをパッケージ化する2つ目で、あなたのif文でそれを呼び出すことをお勧めします。しかし、キー押下機能は、前のキー入力値を格納し、現在の1と比較することでラウンドを取得することができ、ループの複数の反復のためにtrueを返します:

last_keypress = False 
while True: 
    if (not last_keypress) and (GPIO.Input(19)): 
     <do stuff> 
    last_keypress = GPIO.Input(19) 
    time.sleep(.01) 
+0

私はこれがきれいな方法であることを言わなければなりませんそれを行うの –

+0

ありがとう!これは多くの助け、私はそれを得た:) – jsmith123

関連する問題