2016-07-20 4 views
0

this과 같은 웹에서 GPIO 인터럽트 설명서를 읽었습니다. 나에게 남겨진 질문이 하나 있습니다. GPIO.add_event_detect(<PIN>, <GPIO.EDGE>, callback=<some callback function>, bouncetime=<int>)을 파이썬 스크립트에 사용하려면이 스크립트를 "끝없이"이 스크립트를 실행하기 위해 동일한 스크립트에 루프를 실행해야합니다. 콜백 루틴?Raspberry Pi3 - Python3 : GPIO.add_event_detect에 "while true"루프가 필요합니까?

더 명확히하겠습니다. 인터럽트 핸들러가 Pin6에 EDG 떨어지는 기다릴 수 있도록하는 while true: 루프를 가지고하는 것이 필요하다 또는 그냥 핸들러를 활성화하고 프로그램을 종료 - 그래서이 스크립트로

import RPi.GPIO as GPIO 

    GPIO.setmode(GPIO.BCM) 
    GPIO.setup(6, GPIO.OUT) 

    def my_interrupt_routine(channel): 
     #do something here 
    GPIO.add_event_detect(6, GPIO.FALLING, callback=my_interrupt_routine, bouncetime=200) 
    try: 
     while True: 
      pass 

    except KeyboardInterrupt: 
     #do something here 

    finally: 
     GPIO.cleanup() 

을 : 내 스크립트는 다음과 같아야합니다 ? GPIO-Pin을 폴링하는 것과는 달리 인터럽트 핸들러를 사용하는 이점에 대해 많은 기사를 읽었 기 때문에이 질문을하고 있습니다. 그리고이 while true: 루프는 핀에서 폴링하는 것과 같이 나에게 거의 비슷하게 보입니다.
Java로 개발하는 데 익숙합니다. 여기서 인터럽트 처리기/수신기를 정의하고 다른 끝 부분에서 이벤트를 처리 할 수 ​​있습니다. 파이썬에서는 작동하지 않는다고 가정합니다.

답변

0

시도해 본 결과 GPIO.add_event_detect() 명령을 사용하여 스크립트에 while True 루프가 있어야한다는 결과가 발생했습니다. 그렇지 않으면 스크립트가 끝나고 예상 한대로 백그라운드에서 이벤트 수신기가 실행되지 않습니다. 분명히이 루프에서 시스템 자원에 대한 필요성은 매우 낮습니다.
이 스크립트는 GPIO 인터페이스에서 발생하는 모든 인터럽트에 대한 리스너입니다. 그러므로 내 라스베리 파이 시작시에이 스크립트를 시작하여 항상 실행시켜야한다고 가정합니다.
파이어 (3)에서 "불이나 잊고"청취자를 잡는 방법에 대한 제안이 있으면 감사하게 생각합니다.