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...

11 KiB

ตั้งเวลา - ฮาร์ดแวร์ IoT เสมือนและ Raspberry Pi

ในส่วนนี้ของบทเรียน คุณจะเรียกใช้โค้ดแบบไร้เซิร์ฟเวอร์ของคุณเพื่อทำความเข้าใจคำพูด และตั้งเวลาในอุปกรณ์ IoT เสมือนหรือ Raspberry Pi ตามผลลัพธ์ที่ได้

ตั้งเวลา

ข้อความที่ได้จากการแปลงเสียงเป็นข้อความจำเป็นต้องถูกส่งไปยังโค้ดแบบไร้เซิร์ฟเวอร์ของคุณเพื่อให้ LUIS ประมวลผล และส่งกลับจำนวนวินาทีสำหรับการตั้งเวลา จำนวนวินาทีนี้สามารถใช้ในการตั้งเวลาได้

คุณสามารถตั้งเวลาได้โดยใช้คลาส threading.Timer ของ Python คลาสนี้รับค่าความล่าช้าและฟังก์ชัน และหลังจากเวลาความล่าช้าผ่านไป ฟังก์ชันจะถูกเรียกใช้งาน

งาน - ส่งข้อความไปยังฟังก์ชันแบบไร้เซิร์ฟเวอร์

  1. เปิดโปรเจกต์ smart-timer ใน VS Code และตรวจสอบให้แน่ใจว่าสภาพแวดล้อมเสมือนถูกโหลดในเทอร์มินัล หากคุณใช้อุปกรณ์ IoT เสมือน

  2. เหนือฟังก์ชัน process_text ให้ประกาศฟังก์ชันชื่อ get_timer_time เพื่อเรียก REST endpoint ที่คุณสร้างขึ้น:

    def get_timer_time(text):
    
  3. เพิ่มโค้ดต่อไปนี้ในฟังก์ชันนี้เพื่อกำหนด URL ที่จะเรียกใช้:

    url = '<URL>'
    

    แทนที่ <URL> ด้วย URL ของ REST endpoint ที่คุณสร้างขึ้นในบทเรียนที่ผ่านมา ไม่ว่าจะอยู่ในคอมพิวเตอร์ของคุณหรือในคลาวด์

  4. เพิ่มโค้ดต่อไปนี้เพื่อกำหนดข้อความเป็น property ที่ส่งผ่าน JSON ไปยังการเรียกใช้:

    body = {
        'text': text
    }
    
    response = requests.post(url, json=body)
    
  5. ด้านล่างนี้ ดึงค่า seconds จาก payload ของการตอบกลับ โดยคืนค่า 0 หากการเรียกใช้ล้มเหลว:

    if response.status_code != 200:
        return 0
    
    payload = response.json()
    return payload['seconds']
    

    การเรียก HTTP ที่สำเร็จจะคืนค่า status code ในช่วง 200 และโค้ดแบบไร้เซิร์ฟเวอร์ของคุณจะคืนค่า 200 หากข้อความถูกประมวลผลและรับรู้ว่าเป็น intent การตั้งเวลา

งาน - ตั้งเวลาในเธรดพื้นหลัง

  1. เพิ่มคำสั่ง import ต่อไปนี้ที่ด้านบนของไฟล์เพื่อ import ไลบรารี threading ของ Python:

    import threading
    
  2. เหนือฟังก์ชัน process_text ให้เพิ่มฟังก์ชันเพื่อพูดข้อความตอบกลับ ตอนนี้จะเขียนลงในคอนโซล แต่ในบทเรียนนี้จะเปลี่ยนเป็นการพูดข้อความ:

    def say(text):
        print(text)
    
  3. ด้านล่างนี้ เพิ่มฟังก์ชันที่จะถูกเรียกโดยตัวตั้งเวลาเพื่อประกาศว่าตัวตั้งเวลาสิ้นสุดแล้ว:

    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

  4. ด้านล่างนี้ เพิ่มฟังก์ชัน 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

  5. ที่ท้ายฟังก์ชัน create_timer เพิ่มโค้ดบางส่วนเพื่อสร้างข้อความที่จะพูดกับผู้ใช้เพื่อประกาศว่าตัวตั้งเวลาเริ่มต้นแล้ว:

    announcement = ''
    if minutes > 0:
        announcement += f'{minutes} minute '
    if seconds > 0:
        announcement += f'{seconds} second '    
    announcement += 'timer started.'
    say(announcement)
    

    อีกครั้ง ข้อความนี้จะรวมเฉพาะหน่วยเวลาที่มีค่า ประโยคนี้จะถูกส่งไปยังฟังก์ชัน say

  6. เพิ่มโค้ดต่อไปนี้ที่ท้ายฟังก์ชัน process_text เพื่อรับเวลาสำหรับตัวตั้งเวลาจากข้อความ จากนั้นสร้างตัวตั้งเวลา:

    seconds = get_timer_time(text)
    if seconds > 0:
        create_timer(seconds)
    

    ตัวตั้งเวลาจะถูกสร้างขึ้นก็ต่อเมื่อจำนวนวินาทีมากกว่า 0

  7. รันแอป และตรวจสอบให้แน่ใจว่าแอปฟังก์ชันกำลังทำงานอยู่ ตั้งเวลาบางตัว และผลลัพธ์จะแสดงว่าตัวตั้งเวลาถูกตั้งค่า และจะแสดงเมื่อเวลาสิ้นสุด:

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