11 KiB
ตั้งเวลา - ฮาร์ดแวร์ IoT เสมือนและ Raspberry Pi
ในส่วนนี้ของบทเรียน คุณจะเรียกใช้โค้ดแบบไร้เซิร์ฟเวอร์ของคุณเพื่อทำความเข้าใจคำพูด และตั้งเวลาในอุปกรณ์ IoT เสมือนหรือ Raspberry Pi ตามผลลัพธ์ที่ได้
ตั้งเวลา
ข้อความที่ได้จากการแปลงเสียงเป็นข้อความจำเป็นต้องถูกส่งไปยังโค้ดแบบไร้เซิร์ฟเวอร์ของคุณเพื่อให้ LUIS ประมวลผล และส่งกลับจำนวนวินาทีสำหรับการตั้งเวลา จำนวนวินาทีนี้สามารถใช้ในการตั้งเวลาได้
คุณสามารถตั้งเวลาได้โดยใช้คลาส threading.Timer
ของ Python คลาสนี้รับค่าความล่าช้าและฟังก์ชัน และหลังจากเวลาความล่าช้าผ่านไป ฟังก์ชันจะถูกเรียกใช้งาน
งาน - ส่งข้อความไปยังฟังก์ชันแบบไร้เซิร์ฟเวอร์
-
เปิดโปรเจกต์
smart-timer
ใน VS Code และตรวจสอบให้แน่ใจว่าสภาพแวดล้อมเสมือนถูกโหลดในเทอร์มินัล หากคุณใช้อุปกรณ์ IoT เสมือน -
เหนือฟังก์ชัน
process_text
ให้ประกาศฟังก์ชันชื่อget_timer_time
เพื่อเรียก REST endpoint ที่คุณสร้างขึ้น:def get_timer_time(text):
-
เพิ่มโค้ดต่อไปนี้ในฟังก์ชันนี้เพื่อกำหนด URL ที่จะเรียกใช้:
url = '<URL>'
แทนที่
<URL>
ด้วย URL ของ REST endpoint ที่คุณสร้างขึ้นในบทเรียนที่ผ่านมา ไม่ว่าจะอยู่ในคอมพิวเตอร์ของคุณหรือในคลาวด์ -
เพิ่มโค้ดต่อไปนี้เพื่อกำหนดข้อความเป็น property ที่ส่งผ่าน JSON ไปยังการเรียกใช้:
body = { 'text': text } response = requests.post(url, json=body)
-
ด้านล่างนี้ ดึงค่า
seconds
จาก payload ของการตอบกลับ โดยคืนค่า 0 หากการเรียกใช้ล้มเหลว:if response.status_code != 200: return 0 payload = response.json() return payload['seconds']
การเรียก HTTP ที่สำเร็จจะคืนค่า status code ในช่วง 200 และโค้ดแบบไร้เซิร์ฟเวอร์ของคุณจะคืนค่า 200 หากข้อความถูกประมวลผลและรับรู้ว่าเป็น intent การตั้งเวลา
งาน - ตั้งเวลาในเธรดพื้นหลัง
-
เพิ่มคำสั่ง import ต่อไปนี้ที่ด้านบนของไฟล์เพื่อ import ไลบรารี threading ของ Python:
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 แม้ว่าเราจะพยายามให้การแปลมีความถูกต้องมากที่สุด แต่โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้