6.4 KiB
타이머 설정 - 가상 IoT 하드웨어와 Raspberry Pi
이 수업의 이 부분에서는 서버리스 코드를 호출하여 음성을 이해하고, 결과를 바탕으로 가상 IoT 장치나 Raspberry Pi에서 타이머를 설정합니다.
타이머 설정
음성 인식 호출에서 반환된 텍스트는 서버리스 코드로 전송되어 LUIS에서 처리되어야 하며, 타이머를 위한 초 단위 숫자를 반환받습니다. 이 초 단위 숫자를 사용하여 타이머를 설정할 수 있습니다.
타이머는 Python의 threading.Timer
클래스를 사용하여 설정할 수 있습니다. 이 클래스는 지연 시간과 함수를 받아들여, 지연 시간이 지난 후 해당 함수를 실행합니다.
작업 - 텍스트를 서버리스 함수로 전송하기
-
VS Code에서
smart-timer
프로젝트를 열고, 가상 IoT 장치를 사용하는 경우 터미널에서 가상 환경이 로드되었는지 확인합니다. -
process_text
함수 위에, REST 엔드포인트를 호출하는get_timer_time
이라는 함수를 선언합니다:def get_timer_time(text):
-
이 함수에 다음 코드를 추가하여 호출할 URL을 정의합니다:
url = '<URL>'
<URL>
을 이전 수업에서 만든 REST 엔드포인트의 URL로 바꿉니다. 이 URL은 컴퓨터나 클라우드에 있을 수 있습니다. -
호출에 JSON으로 전달될 속성으로 텍스트를 설정하는 코드를 추가합니다:
body = { 'text': text } response = requests.post(url, json=body)
-
그 아래에 응답 페이로드에서
seconds
를 가져오고, 호출이 실패한 경우 0을 반환하는 코드를 추가합니다:if response.status_code != 200: return 0 payload = response.json() return payload['seconds']
성공적인 HTTP 호출은 200 범위의 상태 코드를 반환하며, 서버리스 코드는 텍스트가 처리되고 타이머 설정 의도로 인식되었을 때 200을 반환합니다.
작업 - 백그라운드 스레드에서 타이머 설정하기
-
파일 상단에 Python의 threading 라이브러리를 가져오기 위한 import 문을 추가합니다:
import threading
-
process_text
함수 위에 응답을 말하는 함수를 추가합니다. 지금은 단순히 콘솔에 출력하지만, 이후 수업에서는 이 텍스트를 음성으로 출력할 것입니다.def say(text): print(text)
-
그 아래에 타이머가 완료되었음을 알리는 타이머 호출용 함수를 추가합니다:
def announce_timer(minutes, seconds): announcement = 'Times up on your ' if minutes > 0: announcement += f'{minutes} minute ' if seconds > 0: announcement += f'{seconds} second ' announcement += 'timer.' say(announcement)
이 함수는 타이머의 분과 초를 받아 문장을 생성하여 타이머가 완료되었음을 알립니다. 분과 초를 확인하여 숫자가 있는 시간 단위만 포함합니다. 예를 들어, 분이 0이면 초만 메시지에 포함됩니다. 이 문장은
say
함수로 전달됩니다. -
그 아래에 타이머를 생성하는
create_timer
함수를 추가합니다:def create_timer(total_seconds): minutes, seconds = divmod(total_seconds, 60) threading.Timer(total_seconds, announce_timer, args=[minutes, seconds]).start()
이 함수는 명령에서 전달된 타이머의 총 초를 받아 분과 초로 변환합니다. 그런 다음, 총 초를 사용하여 타이머 객체를 생성하고 시작합니다. 이때
announce_timer
함수와 분과 초를 포함한 리스트를 전달합니다. 타이머가 만료되면announce_timer
함수가 호출되고, 이 리스트의 내용이 매개변수로 전달됩니다. 리스트의 첫 번째 항목은minutes
매개변수로, 두 번째 항목은seconds
매개변수로 전달됩니다. -
create_timer
함수 끝에 사용자에게 타이머가 시작되었음을 알리는 메시지를 생성하는 코드를 추가합니다:announcement = '' if minutes > 0: announcement += f'{minutes} minute ' if seconds > 0: announcement += f'{seconds} second ' announcement += 'timer started.' say(announcement)
이 메시지도 값이 있는 시간 단위만 포함합니다. 이 문장은
say
함수로 전달됩니다. -
process_text
함수 끝에 텍스트에서 타이머 시간을 가져오고 타이머를 생성하는 코드를 추가합니다:seconds = get_timer_time(text) if seconds > 0: create_timer(seconds)
초 단위 숫자가 0보다 클 때만 타이머가 생성됩니다.
-
앱을 실행하고, 함수 앱도 실행 중인지 확인합니다. 타이머를 설정하고, 출력에서 타이머가 설정되고 만료되었을 때의 메시지를 확인합니다:
pi@raspberrypi:~/smart-timer $ python3 app.py Set a two minute 27 second timer. 2 minute 27 second timer started. Times up on your 2 minute 27 second timer.
💁 이 코드는 code-timer/pi 또는 code-timer/virtual-iot-device 폴더에서 확인할 수 있습니다.
😀 타이머 프로그램이 성공적으로 작동했습니다!
면책 조항:
이 문서는 AI 번역 서비스 Co-op Translator를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문 번역가에 의한 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.