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.
140 lines
11 KiB
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) แม้ว่าเราจะพยายามให้การแปลมีความถูกต้องมากที่สุด แต่โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้ |