10 KiB
កំណត់ម៉ោង - ឧបករណ៍ IoT វិជ្ជមាន និង Raspberry Pi
នៅក្នុងផ្នែកនេះនៃមេរៀន អ្នកនឹងហៅកូដ serverless របស់អ្នកដើម្បីយល់ពីសំលេងនិងកំណត់ម៉ោងនៅលើឧបករណ៍ IoT វិជ្ជមានរបស់អ្នក ឬ Raspberry Pi dựa trên kết quả.
កំណត់ម៉ោង
អត្ថបទដែលត្រូវបានវិលត្រឡប់ពីការហៅសំលេងទៅអត្ថបទត្រូវតែត្រូវបានផ្ញើទៅកូដ serverless របស់អ្នកដើម្បីដំណើរការដោយ LUIS, រកបានចំនួនវិនាទីសម្រាប់ម៉ោង។ ចំនួនវិនាទីនេះអាចត្រូវបានប្រើដើម្បីកំណត់ម៉ោង។
ម៉ោងអាចត្រូវបានកំណត់ដោយប្រើថ្នាក់ Python threading.Timer។ ថ្នាក់នេះទទួលបានពេលពន្យាពេល និងមុខងារ ហើយបន្ទាប់ពីពេលពន្យាពេលមុខងារនេះត្រូវបានអនុវត្ត។
ភារកិច្ច - ផ្ញើអត្ថបទទៅមុខងារ serverless
-
បើកគម្រោង
smart-timerនៅក្នុង VS Code ហើយធានាថាបរិបទវីរុច đã được tải trong terminal ប្រសិនបើអ្នកកំពុងប្រើឧបករណ៍ IoT វិជ្ជមាន។ -
មុន
process_textមុខងារ បង្កើតមុខងារដែលមានឈ្មោះget_timer_timeដើម្បីហៅ REST endpoint ដែលអ្នកបានបង្កើត៖def get_timer_time(text): -
បន្ថែមកូដដូចខាងក្រោមទៅមុខងារនេះដើម្បីកំណត់ URL ដែលត្រូវហៅ៖
url = '<URL>'ប្ដូរ
<URL>ជាមួយ URL នៃ REST endpoint របស់អ្នកដែលបានបង្កើតក្នុងមេរៀនមុននេះ ទៅលើកុំព្យូទ័ររបស់អ្នក ឬនៅពពក។ -
បន្ថែមកូដដូចខាងក្រោមដើម្បីកំណត់អត្ថបទជាគុណលក្ខណៈមួយផ្ញើជាទ្រង់ទ្រាយ 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 ជោគជ័យចេញកូដស្ថានភាពនៅលំដាប់ 200 ហើយកូដ serverless របស់អ្នកត្រឡប់ 200 ប្រសិនបើអត្ថបទត្រូវបានដំណើរការនិងទទួលស្គាល់ថាជាចេតនាកំណត់ម៉ោង។
ភារកិច្ច - កំណត់ម៉ោងលើ thread ផ្ទៃខាងក្រោយ
-
បន្ថែមប្រកាសនាំចូលខាងក្រោមនៅលើបណ្ដាញឯកសារ ដើម្បីនាំចូលបណ្ណាល័យ 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ហើយផ្ញើមាតិកានៃបញ្ជីនេះជាពារ៉ាម៉ែត្រ - ដូច្នេះធាតុដំបូងក្នុងបញ្ជីត្រូវបានផ្ញើជាពារ៉ាម៉ែត្រនាទី និងធាតុទីពីរជាវិនាទី។ -
ចុងក្រោយមុខងារ
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។
-
បើករត់កម្មវិធី ហើយធានាថា function app កំពុងរត់ដែរ។ កំណត់ម៉ោងមួយចំនួន ហើយលទ្ធផលនឹងបង្ហាញការកំណត់ម៉ោង ហើយបង្ហាញពេលវាលេច:
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។ ខណៈពេលដែលយើងខិតខំរក្សាការត្រឹមត្រូវ សូមយល់ថាការបកប្រែដោយស្វ័យប្រវត្តិនេះអាចមានកំហុស ឬខុសត្រូវបានចលាចល។ ឯកសារដើមក្នុងភាសាដើមគួរត្រូវបានគេពិចារណាថាជាទិន្នន័យផ្លូវការផ្ទាល់។ សម្រាប់ព័ត៌មានសំខាន់ៗ ការបកប្រែដោយអ្នកជំនាញមនុស្សត្រូវបានផ្តល់អនុសាសន៍។ យើងមិនទទួលខុសត្រូវចំពោះការយល់ប្លែក ឬការបកប្រែខុសរាល់ប្រភេទឡើយដែលកើតមានពីការប្រើប្រាស់ការបកប្រែនេះ។