You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/th/6-consumer/lessons/3-spoken-feedback/single-board-computer-set-t...

140 lines
11 KiB

<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "64ad4ddb4de81a18b7252e968f10b404",
"translation_date": "2025-08-27T20:30:17+00:00",
"source_file": "6-consumer/lessons/3-spoken-feedback/single-board-computer-set-timer.md",
"language_code": "th"
}
-->
# ตั้งเวลา - ฮาร์ดแวร์ IoT เสมือนและ Raspberry Pi
ในส่วนนี้ของบทเรียน คุณจะเรียกใช้โค้ดแบบไร้เซิร์ฟเวอร์ของคุณเพื่อทำความเข้าใจคำพูด และตั้งเวลาในอุปกรณ์ IoT เสมือนหรือ Raspberry Pi ตามผลลัพธ์ที่ได้
## ตั้งเวลา
ข้อความที่ได้จากการแปลงเสียงเป็นข้อความจำเป็นต้องถูกส่งไปยังโค้ดแบบไร้เซิร์ฟเวอร์ของคุณเพื่อให้ LUIS ประมวลผล และส่งกลับจำนวนวินาทีสำหรับการตั้งเวลา จำนวนวินาทีนี้สามารถใช้ในการตั้งเวลาได้
คุณสามารถตั้งเวลาได้โดยใช้คลาส `threading.Timer` ของ Python คลาสนี้รับค่าความล่าช้าและฟังก์ชัน และหลังจากเวลาความล่าช้าผ่านไป ฟังก์ชันจะถูกเรียกใช้งาน
### งาน - ส่งข้อความไปยังฟังก์ชันแบบไร้เซิร์ฟเวอร์
1. เปิดโปรเจกต์ `smart-timer` ใน VS Code และตรวจสอบให้แน่ใจว่าสภาพแวดล้อมเสมือนถูกโหลดในเทอร์มินัล หากคุณใช้อุปกรณ์ IoT เสมือน
1. เหนือฟังก์ชัน `process_text` ให้ประกาศฟังก์ชันชื่อ `get_timer_time` เพื่อเรียก REST endpoint ที่คุณสร้างขึ้น:
```python
def get_timer_time(text):
```
1. เพิ่มโค้ดต่อไปนี้ในฟังก์ชันนี้เพื่อกำหนด URL ที่จะเรียกใช้:
```python
url = '<URL>'
```
แทนที่ `<URL>` ด้วย URL ของ REST endpoint ที่คุณสร้างขึ้นในบทเรียนที่ผ่านมา ไม่ว่าจะอยู่ในคอมพิวเตอร์ของคุณหรือในคลาวด์
1. เพิ่มโค้ดต่อไปนี้เพื่อกำหนดข้อความเป็น property ที่ส่งผ่าน JSON ไปยังการเรียกใช้:
```python
body = {
'text': text
}
response = requests.post(url, json=body)
```
1. ด้านล่างนี้ ดึงค่า `seconds` จาก payload ของการตอบกลับ โดยคืนค่า 0 หากการเรียกใช้ล้มเหลว:
```python
if response.status_code != 200:
return 0
payload = response.json()
return payload['seconds']
```
การเรียก HTTP ที่สำเร็จจะคืนค่า status code ในช่วง 200 และโค้ดแบบไร้เซิร์ฟเวอร์ของคุณจะคืนค่า 200 หากข้อความถูกประมวลผลและรับรู้ว่าเป็น intent การตั้งเวลา
### งาน - ตั้งเวลาในเธรดพื้นหลัง
1. เพิ่มคำสั่ง import ต่อไปนี้ที่ด้านบนของไฟล์เพื่อ import ไลบรารี threading ของ Python:
```python
import threading
```
1. เหนือฟังก์ชัน `process_text` ให้เพิ่มฟังก์ชันเพื่อพูดข้อความตอบกลับ ตอนนี้จะเขียนลงในคอนโซล แต่ในบทเรียนนี้จะเปลี่ยนเป็นการพูดข้อความ:
```python
def say(text):
print(text)
```
1. ด้านล่างนี้ เพิ่มฟังก์ชันที่จะถูกเรียกโดยตัวตั้งเวลาเพื่อประกาศว่าตัวตั้งเวลาสิ้นสุดแล้ว:
```python
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`
1. ด้านล่างนี้ เพิ่มฟังก์ชัน `create_timer` ต่อไปนี้เพื่อสร้างตัวตั้งเวลา:
```python
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`
1. ที่ท้ายฟังก์ชัน `create_timer` เพิ่มโค้ดบางส่วนเพื่อสร้างข้อความที่จะพูดกับผู้ใช้เพื่อประกาศว่าตัวตั้งเวลาเริ่มต้นแล้ว:
```python
announcement = ''
if minutes > 0:
announcement += f'{minutes} minute '
if seconds > 0:
announcement += f'{seconds} second '
announcement += 'timer started.'
say(announcement)
```
อีกครั้ง ข้อความนี้จะรวมเฉพาะหน่วยเวลาที่มีค่า ประโยคนี้จะถูกส่งไปยังฟังก์ชัน `say`
1. เพิ่มโค้ดต่อไปนี้ที่ท้ายฟังก์ชัน `process_text` เพื่อรับเวลาสำหรับตัวตั้งเวลาจากข้อความ จากนั้นสร้างตัวตั้งเวลา:
```python
seconds = get_timer_time(text)
if seconds > 0:
create_timer(seconds)
```
ตัวตั้งเวลาจะถูกสร้างขึ้นก็ต่อเมื่อจำนวนวินาทีมากกว่า 0
1. รันแอป และตรวจสอบให้แน่ใจว่าแอปฟังก์ชันกำลังทำงานอยู่ ตั้งเวลาบางตัว และผลลัพธ์จะแสดงว่าตัวตั้งเวลาถูกตั้งค่า และจะแสดงเมื่อเวลาสิ้นสุด:
```output
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](../../../../../6-consumer/lessons/3-spoken-feedback/code-timer/pi) หรือ [code-timer/virtual-iot-device](../../../../../6-consumer/lessons/3-spoken-feedback/code-timer/virtual-iot-device)
😀 โปรแกรมตั้งเวลาของคุณสำเร็จแล้ว!
---
**ข้อจำกัดความรับผิดชอบ**:
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI [Co-op Translator](https://github.com/Azure/co-op-translator) แม้ว่าเราจะพยายามให้การแปลมีความถูกต้องมากที่สุด แต่โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้