# คอมพิวเตอร์บอร์ดเดี่ยวเสมือน แทนที่จะซื้ออุปกรณ์ IoT พร้อมกับเซ็นเซอร์และแอคชูเอเตอร์ คุณสามารถใช้คอมพิวเตอร์ของคุณเพื่อจำลองฮาร์ดแวร์ IoT ได้ โครงการ [CounterFit](https://github.com/CounterFit-IoT/CounterFit) ช่วยให้คุณสามารถรันแอปในเครื่องที่จำลองฮาร์ดแวร์ IoT เช่น เซ็นเซอร์และแอคชูเอเตอร์ และเข้าถึงเซ็นเซอร์และแอคชูเอเตอร์จากโค้ด Python ในเครื่องที่เขียนในลักษณะเดียวกับโค้ดที่คุณจะเขียนบน Raspberry Pi โดยใช้ฮาร์ดแวร์จริง ## การตั้งค่า ในการใช้ CounterFit คุณจะต้องติดตั้งซอฟต์แวร์ฟรีบางตัวบนคอมพิวเตอร์ของคุณ ### งาน ติดตั้งซอฟต์แวร์ที่จำเป็น 1. ติดตั้ง Python ดูคำแนะนำในการติดตั้งเวอร์ชันล่าสุดของ Python ได้ที่ [หน้า Python downloads](https://www.python.org/downloads/) 1. ติดตั้ง Visual Studio Code (VS Code) ซึ่งเป็นโปรแกรมแก้ไขที่คุณจะใช้เขียนโค้ดอุปกรณ์เสมือนใน Python ดูคำแนะนำในการติดตั้ง VS Code ได้ที่ [เอกสาร VS Code](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) > 💁 คุณสามารถใช้ Python IDE หรือโปรแกรมแก้ไขใด ๆ ที่คุณชอบสำหรับบทเรียนนี้ได้ แต่บทเรียนจะให้คำแนะนำโดยอิงจากการใช้ VS Code 1. ติดตั้งส่วนขยาย VS Code Pylance ซึ่งเป็นส่วนขยายสำหรับ VS Code ที่ให้การสนับสนุนภาษา Python ดูคำแนะนำในการติดตั้งส่วนขยายนี้ใน VS Code ได้ที่ [เอกสารส่วนขยาย Pylance](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-python.vscode-pylance) คำแนะนำในการติดตั้งและกำหนดค่าแอป CounterFit จะมีให้ในเวลาที่เหมาะสมในคำแนะนำของงาน เนื่องจากจะติดตั้งในแต่ละโปรเจกต์ ## Hello world ตามธรรมเนียมเมื่อเริ่มต้นกับภาษาโปรแกรมหรือเทคโนโลยีใหม่ ๆ เราจะสร้างแอป 'Hello World' ซึ่งเป็นแอปเล็ก ๆ ที่แสดงข้อความ เช่น `"Hello World"` เพื่อแสดงว่าเครื่องมือทั้งหมดได้รับการกำหนดค่าอย่างถูกต้อง แอป Hello World สำหรับฮาร์ดแวร์ IoT เสมือนจะช่วยให้คุณมั่นใจได้ว่า Python และ Visual Studio Code ได้รับการติดตั้งอย่างถูกต้อง นอกจากนี้ยังจะเชื่อมต่อกับ CounterFit สำหรับเซ็นเซอร์และแอคชูเอเตอร์ IoT เสมือน โดยไม่ใช้ฮาร์ดแวร์ใด ๆ เพียงแค่เชื่อมต่อเพื่อพิสูจน์ว่าทุกอย่างทำงานได้ แอปนี้จะอยู่ในโฟลเดอร์ชื่อ `nightlight` และจะถูกนำมาใช้ซ้ำพร้อมโค้ดที่แตกต่างกันในส่วนถัดไปของงานนี้เพื่อสร้างแอปพลิเคชัน nightlight ### กำหนดค่าสภาพแวดล้อมเสมือน Python หนึ่งในคุณสมบัติที่ทรงพลังของ Python คือความสามารถในการติดตั้ง [Pip packages](https://pypi.org) ซึ่งเป็นแพ็กเกจโค้ดที่เขียนโดยผู้อื่นและเผยแพร่บนอินเทอร์เน็ต คุณสามารถติดตั้งแพ็กเกจ Pip ลงในคอมพิวเตอร์ของคุณด้วยคำสั่งเดียว จากนั้นใช้แพ็กเกจนั้นในโค้ดของคุณ คุณจะใช้ Pip เพื่อติดตั้งแพ็กเกจสำหรับการเชื่อมต่อกับ CounterFit โดยปกติเมื่อคุณติดตั้งแพ็กเกจ มันจะพร้อมใช้งานทุกที่ในคอมพิวเตอร์ของคุณ ซึ่งอาจนำไปสู่ปัญหาเกี่ยวกับเวอร์ชันของแพ็กเกจ เช่น แอปพลิเคชันหนึ่งต้องการเวอร์ชันหนึ่งของแพ็กเกจที่อาจใช้งานไม่ได้เมื่อคุณติดตั้งเวอร์ชันใหม่สำหรับแอปพลิเคชันอื่น เพื่อหลีกเลี่ยงปัญหานี้ คุณสามารถใช้ [สภาพแวดล้อมเสมือน Python](https://docs.python.org/3/library/venv.html) ซึ่งเป็นสำเนาของ Python ในโฟลเดอร์เฉพาะ และเมื่อคุณติดตั้งแพ็กเกจ Pip แพ็กเกจเหล่านั้นจะถูกติดตั้งเฉพาะในโฟลเดอร์นั้น > 💁 หากคุณใช้ Raspberry Pi คุณไม่ได้ตั้งค่าสภาพแวดล้อมเสมือนบนอุปกรณ์นั้นเพื่อจัดการแพ็กเกจ Pip แต่คุณใช้แพ็กเกจแบบ global เนื่องจากแพ็กเกจ Grove ถูกติดตั้งแบบ global โดยสคริปต์ติดตั้ง #### งาน - กำหนดค่าสภาพแวดล้อมเสมือน Python กำหนดค่าสภาพแวดล้อมเสมือน Python และติดตั้งแพ็กเกจ Pip สำหรับ CounterFit 1. จากเทอร์มินัลหรือคอมมานด์ไลน์ของคุณ รันคำสั่งต่อไปนี้ในตำแหน่งที่คุณเลือกเพื่อสร้างและนำทางไปยังไดเรกทอรีใหม่: ```sh mkdir nightlight cd nightlight ``` 1. รันคำสั่งต่อไปนี้เพื่อสร้างสภาพแวดล้อมเสมือนในโฟลเดอร์ `.venv`: ```sh python3 -m venv .venv ``` > 💁 คุณต้องเรียก `python3` อย่างชัดเจนเพื่อสร้างสภาพแวดล้อมเสมือนในกรณีที่คุณติดตั้ง Python 2 ไว้ด้วย หากคุณติดตั้ง Python 2 การเรียก `python` จะใช้ Python 2 แทน Python 3 1. เปิดใช้งานสภาพแวดล้อมเสมือน: * บน Windows: * หากคุณใช้ Command Prompt หรือ Command Prompt ผ่าน Windows Terminal ให้รัน: ```cmd .venv\Scripts\activate.bat ``` * หากคุณใช้ PowerShell ให้รัน: ```powershell .\.venv\Scripts\Activate.ps1 ``` > หากคุณได้รับข้อผิดพลาดเกี่ยวกับการรันสคริปต์ที่ถูกปิดใช้งานในระบบนี้ คุณจะต้องเปิดใช้งานการรันสคริปต์โดยตั้งค่านโยบายการดำเนินการที่เหมาะสม คุณสามารถทำได้โดยเปิด PowerShell ในฐานะผู้ดูแลระบบ จากนั้นรันคำสั่งต่อไปนี้: ```powershell Set-ExecutionPolicy -ExecutionPolicy Unrestricted ``` กด `Y` เมื่อถูกถามเพื่อยืนยัน จากนั้นเปิด PowerShell ใหม่และลองอีกครั้ง คุณสามารถรีเซ็ตนโยบายการดำเนินการนี้ในภายหลังหากจำเป็น คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ใน [หน้าการตั้งค่านโยบายการดำเนินการใน Microsoft Docs](https://docs.microsoft.com/powershell/module/microsoft.powershell.core/about/about_execution_policies?WT.mc_id=academic-17441-jabenn) * บน macOS หรือ Linux ให้รัน: ```cmd source ./.venv/bin/activate ``` > 💁 คำสั่งเหล่านี้ควรรันจากตำแหน่งเดียวกับที่คุณรันคำสั่งเพื่อสร้างสภาพแวดล้อมเสมือน คุณไม่จำเป็นต้องนำทางเข้าไปในโฟลเดอร์ `.venv` คุณควรรันคำสั่งเปิดใช้งานและคำสั่งใด ๆ เพื่อการติดตั้งแพ็กเกจหรือรันโค้ดจากโฟลเดอร์ที่คุณอยู่เมื่อคุณสร้างสภาพแวดล้อมเสมือน 1. เมื่อสภาพแวดล้อมเสมือนถูกเปิดใช้งาน คำสั่ง `python` เริ่มต้นจะรันเวอร์ชันของ Python ที่ใช้สร้างสภาพแวดล้อมเสมือน รันคำสั่งต่อไปนี้เพื่อดูเวอร์ชัน: ```sh python --version ``` ผลลัพธ์ควรมีดังนี้: ```output (.venv) ➜ nightlight python --version Python 3.9.1 ``` > 💁 เวอร์ชัน Python ของคุณอาจแตกต่างออกไป - ตราบใดที่เป็นเวอร์ชัน 3.6 หรือสูงกว่าก็ถือว่าใช้ได้ หากไม่ใช่ ให้ลบโฟลเดอร์นี้ ติดตั้งเวอร์ชันใหม่ของ Python และลองอีกครั้ง 1. รันคำสั่งต่อไปนี้เพื่อติดตั้งแพ็กเกจ Pip สำหรับ CounterFit แพ็กเกจเหล่านี้รวมถึงแอป CounterFit หลักและ shims สำหรับฮาร์ดแวร์ Grove shims เหล่านี้ช่วยให้คุณเขียนโค้ดเหมือนกับว่าคุณกำลังเขียนโปรแกรมโดยใช้เซ็นเซอร์และแอคชูเอเตอร์จริงจากระบบ Grove แต่เชื่อมต่อกับอุปกรณ์ IoT เสมือน ```sh pip install CounterFit pip install counterfit-connection pip install counterfit-shims-grove ``` แพ็กเกจ Pip เหล่านี้จะถูกติดตั้งเฉพาะในสภาพแวดล้อมเสมือน และจะไม่สามารถใช้งานได้ภายนอก ### เขียนโค้ด เมื่อสภาพแวดล้อมเสมือน Python พร้อมแล้ว คุณสามารถเขียนโค้ดสำหรับแอป 'Hello World' ได้ #### งาน - เขียนโค้ด สร้างแอปพลิเคชัน Python เพื่อพิมพ์ `"Hello World"` ลงในคอนโซล 1. จากเทอร์มินัลหรือคอมมานด์ไลน์ของคุณ รันคำสั่งต่อไปนี้ภายในสภาพแวดล้อมเสมือนเพื่อสร้างไฟล์ Python ชื่อ `app.py`: * บน Windows รัน: ```cmd type nul > app.py ``` * บน macOS หรือ Linux รัน: ```cmd touch app.py ``` 1. เปิดโฟลเดอร์ปัจจุบันใน VS Code: ```sh code . ``` > 💁 หากเทอร์มินัลของคุณแสดง `command not found` บน macOS หมายความว่า VS Code ยังไม่ได้ถูกเพิ่มใน PATH ของคุณ คุณสามารถเพิ่ม VS Code ใน PATH ได้โดยทำตามคำแนะนำใน [ส่วนการเปิดใช้งานจากบรรทัดคำสั่งในเอกสาร VS Code](https://code.visualstudio.com/docs/setup/mac?WT.mc_id=academic-17441-jabenn#_launching-from-the-command-line) และรันคำสั่งหลังจากนั้น VS Code จะถูกเพิ่มใน PATH โดยค่าเริ่มต้นบน Windows และ Linux 1. เมื่อ VS Code เปิดขึ้น มันจะเปิดใช้งานสภาพแวดล้อมเสมือน Python สภาพแวดล้อมเสมือนที่เลือกจะปรากฏในแถบสถานะด้านล่าง: ![VS Code showing the selected virtual environment](../../../../../translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.th.png) 1. หากเทอร์มินัลของ VS Code กำลังทำงานอยู่เมื่อ VS Code เริ่มต้นขึ้น มันจะไม่มีสภาพแวดล้อมเสมือนเปิดใช้งานในนั้น วิธีที่ง่ายที่สุดคือปิดเทอร์มินัลโดยใช้ปุ่ม **Kill the active terminal instance**: ![VS Code Kill the active terminal instance button](../../../../../translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.th.png) คุณสามารถบอกได้ว่าเทอร์มินัลมีสภาพแวดล้อมเสมือนเปิดใช้งานหรือไม่จากชื่อของสภาพแวดล้อมเสมือนที่จะแสดงเป็นคำนำหน้าบนพรอมต์ของเทอร์มินัล ตัวอย่างเช่น อาจเป็น: ```sh (.venv) ➜ nightlight ``` หากคุณไม่มี `.venv` เป็นคำนำหน้าบนพรอมต์ สภาพแวดล้อมเสมือนจะไม่เปิดใช้งานในเทอร์มินัล 1. เปิดเทอร์มินัลใหม่ใน VS Code โดยเลือก *Terminal -> New Terminal* หรือกด `` CTRL+` `` เทอร์มินัลใหม่จะโหลดสภาพแวดล้อมเสมือน และคำสั่งเปิดใช้งานนี้จะปรากฏในเทอร์มินัล พรอมต์จะมีชื่อของสภาพแวดล้อมเสมือน (`.venv`): ```output ➜ nightlight source .venv/bin/activate (.venv) ➜ nightlight ``` 1. เปิดไฟล์ `app.py` จากตัวสำรวจของ VS Code และเพิ่มโค้ดต่อไปนี้: ```python print('Hello World!') ``` ฟังก์ชัน `print` จะพิมพ์สิ่งที่ถูกส่งผ่านไปยังมันลงในคอนโซล 1. จากเทอร์มินัลของ VS Code รันคำสั่งต่อไปนี้เพื่อรันแอป Python ของคุณ: ```sh python app.py ``` ผลลัพธ์ต่อไปนี้จะปรากฏ: ```output (.venv) ➜ nightlight python app.py Hello World! ``` 😀 โปรแกรม 'Hello World' ของคุณสำเร็จแล้ว! ### เชื่อมต่อ 'ฮาร์ดแวร์' ในขั้นตอน 'Hello World' ที่สอง คุณจะรันแอป CounterFit และเชื่อมต่อโค้ดของคุณกับมัน นี่คือสิ่งที่เทียบเท่ากับการเชื่อมต่อฮาร์ดแวร์ IoT เข้ากับชุดพัฒนา #### งาน - เชื่อมต่อ 'ฮาร์ดแวร์' 1. จากเทอร์มินัลของ VS Code เปิดแอป CounterFit ด้วยคำสั่งต่อไปนี้: ```sh counterfit ``` แอปจะเริ่มทำงานและเปิดในเว็บเบราว์เซอร์ของคุณ: ![The Counter Fit app running in a browser](../../../../../translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.th.png) มันจะแสดงสถานะเป็น *Disconnected* โดยมีไฟ LED ที่มุมขวาบนปิดอยู่ 1. เพิ่มโค้ดต่อไปนี้ที่ด้านบนของ `app.py`: ```python from counterfit_connection import CounterFitConnection CounterFitConnection.init('127.0.0.1', 5000) ``` โค้ดนี้นำเข้า `CounterFitConnection` class จากโมดูล `counterfit_connection` ซึ่งมาจากแพ็กเกจ `counterfit-connection` ที่คุณติดตั้งก่อนหน้านี้ จากนั้นจะเริ่มต้นการเชื่อมต่อกับแอป CounterFit ที่รันอยู่บน `127.0.0.1` ซึ่งเป็นที่อยู่ IP ที่คุณสามารถใช้เข้าถึงคอมพิวเตอร์ของคุณเองได้เสมอ (มักเรียกว่า *localhost*) บนพอร์ต 5000 > 💁 หากคุณมีแอปอื่นที่รันอยู่บนพอร์ต 5000 คุณสามารถเปลี่ยนพอร์ตนี้ได้โดยอัปเดตพอร์ตในโค้ด และรัน CounterFit โดยใช้ `CounterFit --port ` โดยแทนที่ `` ด้วยพอร์ตที่คุณต้องการใช้ 1. คุณจะต้องเปิดเทอร์มินัลใหม่ใน VS Code โดยเลือกปุ่ม **Create a new integrated terminal** เนื่องจากแอป CounterFit กำลังรันอยู่ในเทอร์มินัลปัจจุบัน ![VS Code Create a new integrated terminal button](../../../../../translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.th.png) 1. ในเทอร์มินัลใหม่นี้ รันไฟล์ `app.py` เหมือนเดิม สถานะของ CounterFit จะเปลี่ยนเป็น **Connected** และไฟ LED จะสว่างขึ้น ![Counter Fit showing as connected](../../../../../translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.th.png) > 💁 คุณสามารถหาโค้ดนี้ได้ในโฟลเดอร์ [code/virtual-device](../../../../../1-getting-started/lessons/1-introduction-to-iot/code/virtual-device) 😀 การเชื่อมต่อกับฮาร์ดแวร์ของคุณสำเร็จแล้ว! --- **ข้อจำกัดความรับผิดชอบ**: เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI [Co-op Translator](https://github.com/Azure/co-op-translator) แม้ว่าเราจะพยายามให้การแปลมีความถูกต้องมากที่สุด แต่โปรดทราบว่าการแปลโดยอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาที่เป็นต้นฉบับควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้