[질문] python 질문



  • def outport_call():
        output_pin = 24
        alarm_pin = 23
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(output_pin, GPIO.OUT)
        GPIO.setup(alarm_pin, GPIO.OUT)
        GPIO.setwarnings(False)
        count = 0
        i = 1
        while (i <= 30):
                GPIO.output(alarm_pin, True)
                GPIO.output(output_pin, True)
                time.sleep(0.5)
                GPIO.output(output_pin, False)
                time.sleep(0.5)
                GPIO.output(alarm_pin, False)
                i += 1
    input_pin = 4
    
    GPIO.setmode(GPIO.BCM)
    
    GPIO.setup(input_pin, GPIO.IN)
    
    atexit.register(unregister)
    
    setup_linphone()
    
    while True:
        if not GPIO.input(input_pin):
           make_call()
           camera_call()
           outport_call()
           while not GPIO.input(input_pin):
               time.sleep(0.1)
    

    위와같이 코드를 작성했는데 처음부팅시에는 정상동작을 하는데 어느정도 시간이 지나면 버튼을 눌렀을때 make_call부분은 약1초정도 딜레이 후 동작을 하고, outport_call부분은 3초 후에 동작을 합니다.
    코드가 잘못된건가요?
    부탁합니다.


  • Global Moderator

    @hipertech
    음…이건 좀 난해하네요.
    소스를 정리하고 테스트를 해봐야 아는데 그럴 수 없으니까요.
    최대한 중복된 부분을 정리해 보고 파이의 메모리 등이 많이 사용되는지 보고 해야 될 것 같은데요.
    이렇게 봐서는 잘 모르겠네요.ㅠㅠ



  • 전체소스를 올릴까요?



  • 다음과 같이 while문을 작성했는데, 순서대로 실행은 잘 됩니다.
    while True:
    if not GPIO.input(input_pin):
    relay_call()
    make_call()
    camera_call()
    outport_call()

       while not GPIO.input(input_pin):
           time.sleep(0.1)
    

    지금은 순차적으로 실행이 되는데 동시에 실행 할 수는 없나요?


  • Global Moderator

    @hipertech 파이썬의 경우에는 들여쓰기가 중요한 부분 인만큼 코드를 등록 시에는 제가 수정 해 드린 코드사용 마크다운 기능을 이용 해 주시기 바랍니다.

    답변을 다시는 분들이 혼란스러우실 수가 있거든요.


  • Global Moderator

    @hipertech
    동시에 실행하기 위해서는 thread 와 interrupt 의 이해가 필요합니다.
    그렇지 않다면, 기능별로 파일을 따로 만들어서 여러개의 프로그램이 실행되도록 할 수도 있습니다.



  • 감사합니다.
    책도 보고 인터넷도 검색하고 열심히 배우고 있는데 처음이다 보니 어렵네요…


  • Global Moderator

    @hipertech 진행 하시는 프로젝트 재미난거죠 ^.^ 응원 드려요 ^.*



  • 감사합니다.
    코딩을 다시 정리해서 했고요…
    동작에 문제는 없는것 같습니다.
    동작중에 putty로 해당파일을 편집하니까 그런 문제가 발생하는것 같습니다.
    지금까지는 코딩한 순서로 이상없이 동작을 합니다.
    또한가지 질문을 드리고 싶은데요…
    라즈베리파이가 제컴하고 다른 대역이라고 가정하고 라즈베리파이에 다른대역과 통신할 수 있는
    프로그램을 탑재하고 제컴에서 라즈베리파이의 IP를 확인하려고 하는데 어떤 방법이 있을까요?


  • Global Moderator

    @hipertech 위에서도 이야기 드린 것처럼 대역이 다르다는 것은 기본적으로 사용자가 서울 과 부산 처럼 아에 다른 지역에 거주한 것과 같은 이치 입니다.

    일반적으로 기업에선 통신쪽에선 아에 다른 지역의 사람을 하나의 망으로 묶는 여러방법이 있습니다.
    저렴한 방법으로는 VPN이라는 네트웍 시스템을 구축하거나 전용선을 구축하거하는 방법이 일반적인 방법입니다.

    질문자님의 개발환경 네트웍 구성환경이 어떤지는 알수가 없지만VoIP같은 음성퍄킷은 통상적으로 구간별 전용선이나 통신사 VPN 서비스 중 고급서비스를 받아서 게이트를 구축합니다.



  • 감사합니다.
    방법으로 라즈베리에 소켓용프로그램을 탑재해서 검색하는 방법으로 코딩중입니다.
    여기저기 검색해보니 그 방법말고는 없는것 같네요…
    파이썬에서 while문을 이용하여 4가지의 함수를 호출하는데, 순서대로 잘 됩니다.
    그런데 혹시 이 함수를 동시에 수행하도록 하는 방법이 있을까요?
    = = =
    동시실행 해결했습니다.
    파이썬 파일을 따로 따로 만들어서 rc.local파일에 각각 실행되도록 하니까 동시 실행이 되네요…


  • Global Moderator

    @hipertech
    여러개의 파일을 돌리는 것으로 결정하셨군요.
    좋은 프로젝트로 완성되길 기대합니다.



  • 감사합니다.
    파이썬뿐만이 아니고 프로그래밍은 이제 처음 파이썬으로 공부하며 하는중입니다.
    앞으로 조언 부탁드립니다.


답변을 위해 로그인하기