# کامپیوتر تک‌برد مجازی به جای خرید یک دستگاه IoT همراه با حسگرها و عملگرها، می‌توانید از کامپیوتر خود برای شبیه‌سازی سخت‌افزار IoT استفاده کنید. پروژه [CounterFit](https://github.com/CounterFit-IoT/CounterFit) به شما این امکان را می‌دهد که یک اپلیکیشن را به صورت محلی اجرا کنید که سخت‌افزار IoT مانند حسگرها و عملگرها را شبیه‌سازی می‌کند و از طریق کد پایتون محلی به این حسگرها و عملگرها دسترسی پیدا کنید. این کد به همان شیوه‌ای نوشته می‌شود که شما برای سخت‌افزار واقعی روی Raspberry Pi می‌نویسید. ## راه‌اندازی برای استفاده از CounterFit، باید نرم‌افزارهای رایگانی را روی کامپیوتر خود نصب کنید. ### وظیفه نرم‌افزارهای مورد نیاز را نصب کنید. 1. پایتون را نصب کنید. برای دستورالعمل‌های نصب آخرین نسخه پایتون به [صفحه دانلود پایتون](https://www.python.org/downloads/) مراجعه کنید. 1. Visual Studio Code (VS Code) را نصب کنید. این ویرایشگری است که برای نوشتن کد دستگاه مجازی خود در پایتون استفاده خواهید کرد. برای دستورالعمل‌های نصب VS Code به [مستندات VS Code](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) مراجعه کنید. > 💁 شما آزاد هستید که از هر IDE یا ویرایشگر پایتون دیگری که ترجیح می‌دهید برای این درس‌ها استفاده کنید، اما دستورالعمل‌های درس‌ها بر اساس استفاده از VS Code ارائه می‌شوند. 1. افزونه Pylance برای VS Code را نصب کنید. این افزونه پشتیبانی زبان پایتون را برای VS Code فراهم می‌کند. برای دستورالعمل‌های نصب این افزونه در VS Code به [مستندات افزونه Pylance](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-python.vscode-pylance) مراجعه کنید. دستورالعمل‌های نصب و پیکربندی اپلیکیشن CounterFit در زمان مناسب در دستورالعمل‌های تکلیف ارائه می‌شود، زیرا این اپلیکیشن به صورت پروژه‌ای نصب می‌شود. ## سلام دنیا به طور سنتی، هنگام شروع کار با یک زبان برنامه‌نویسی یا فناوری جدید، یک اپلیکیشن 'سلام دنیا' ایجاد می‌شود - یک اپلیکیشن کوچک که چیزی مانند متن `"Hello World"` را خروجی می‌دهد تا نشان دهد همه ابزارها به درستی پیکربندی شده‌اند. اپلیکیشن سلام دنیا برای سخت‌افزار IoT مجازی تضمین می‌کند که پایتون و Visual Studio Code به درستی نصب شده‌اند. همچنین به CounterFit برای حسگرها و عملگرهای IoT مجازی متصل می‌شود. این اپلیکیشن از هیچ سخت‌افزاری استفاده نمی‌کند، فقط برای اثبات عملکرد همه چیز به CounterFit متصل می‌شود. این اپلیکیشن در پوشه‌ای به نام `nightlight` قرار خواهد گرفت و در بخش‌های بعدی این تکلیف با کدهای مختلف برای ساخت اپلیکیشن چراغ شبانه استفاده خواهد شد. ### پیکربندی محیط مجازی پایتون یکی از ویژگی‌های قدرتمند پایتون امکان نصب [بسته‌های Pip](https://pypi.org) است - این‌ها بسته‌هایی از کد هستند که توسط افراد دیگر نوشته شده و در اینترنت منتشر شده‌اند. شما می‌توانید یک بسته Pip را با یک فرمان روی کامپیوتر خود نصب کنید و سپس از آن بسته در کد خود استفاده کنید. شما از Pip برای نصب بسته‌ای برای ارتباط با CounterFit استفاده خواهید کرد. به طور پیش‌فرض، وقتی یک بسته نصب می‌کنید، آن بسته در همه جای کامپیوتر شما در دسترس است، و این می‌تواند منجر به مشکلاتی با نسخه‌های بسته‌ها شود - مانند اینکه یک اپلیکیشن به یک نسخه خاص از یک بسته وابسته باشد که با نصب نسخه جدید برای یک اپلیکیشن دیگر خراب شود. برای حل این مشکل، می‌توانید از یک [محیط مجازی پایتون](https://docs.python.org/3/library/venv.html) استفاده کنید، که اساساً یک نسخه کپی از پایتون در یک پوشه اختصاصی است، و وقتی بسته‌های Pip نصب می‌کنید، فقط در آن پوشه نصب می‌شوند. > 💁 اگر از Raspberry Pi استفاده می‌کنید، نیازی به تنظیم محیط مجازی روی آن دستگاه برای مدیریت بسته‌های Pip ندارید، بلکه از بسته‌های جهانی استفاده می‌کنید، زیرا بسته‌های Grove به صورت جهانی توسط اسکریپت نصب‌کننده نصب شده‌اند. #### وظیفه - پیکربندی محیط مجازی پایتون یک محیط مجازی پایتون پیکربندی کنید و بسته‌های Pip برای CounterFit را نصب کنید. 1. از ترمینال یا خط فرمان خود، دستورات زیر را در مکانی دلخواه اجرا کنید تا یک دایرکتوری جدید ایجاد کرده و به آن بروید: ```sh mkdir nightlight cd nightlight ``` 1. اکنون دستورات زیر را اجرا کنید تا یک محیط مجازی در پوشه `.venv` ایجاد کنید: ```sh python3 -m venv .venv ``` > 💁 شما باید به طور صریح `python3` را فراخوانی کنید تا محیط مجازی ایجاد شود، زیرا ممکن است پایتون 2 نیز در کنار پایتون 3 (آخرین نسخه) نصب شده باشد. اگر پایتون 2 نصب شده باشد، فراخوانی `python` به جای پایتون 3 از پایتون 2 استفاده خواهد کرد. 1. محیط مجازی را فعال کنید: * در ویندوز: * اگر از 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 را دوباره اجرا کنید و دوباره امتحان کنید. در صورت نیاز می‌توانید این سیاست اجرایی را در آینده بازنشانی کنید. می‌توانید اطلاعات بیشتری در این مورد در [صفحه سیاست‌های اجرایی در مستندات مایکروسافت](https://docs.microsoft.com/powershell/module/microsoft.powershell.core/about/about_execution_policies?WT.mc_id=academic-17441-jabenn) پیدا کنید. * در macOS یا لینوکس، اجرا کنید: ```cmd source ./.venv/bin/activate ``` > 💁 این دستورات باید از همان مکانی اجرا شوند که دستور ایجاد محیط مجازی را اجرا کردید. شما هرگز نیازی به رفتن به داخل پوشه `.venv` ندارید، بلکه باید همیشه دستور فعال‌سازی و هر دستوری برای نصب بسته‌ها یا اجرای کد را از پوشه‌ای که محیط مجازی را در آن ایجاد کردید اجرا کنید. 1. پس از فعال شدن محیط مجازی، دستور پیش‌فرض `python` نسخه‌ای از پایتون را اجرا می‌کند که برای ایجاد محیط مجازی استفاده شده است. دستور زیر را اجرا کنید تا نسخه را دریافت کنید: ```sh python --version ``` خروجی باید شامل موارد زیر باشد: ```output (.venv) ➜ nightlight python --version Python 3.9.1 ``` > 💁 نسخه پایتون شما ممکن است متفاوت باشد - تا زمانی که نسخه 3.6 یا بالاتر باشد، مشکلی نیست. اگر نه، این پوشه را حذف کنید، نسخه جدیدتری از پایتون نصب کنید و دوباره امتحان کنید. 1. دستورات زیر را اجرا کنید تا بسته‌های Pip برای CounterFit نصب شوند. این بسته‌ها شامل اپلیکیشن اصلی CounterFit و همچنین شیم‌هایی برای سخت‌افزار Grove هستند. این شیم‌ها به شما امکان می‌دهند کدی بنویسید که گویی با استفاده از حسگرها و عملگرهای فیزیکی از اکوسیستم Grove برنامه‌نویسی می‌کنید، اما به دستگاه‌های IoT مجازی متصل است. ```sh pip install CounterFit pip install counterfit-connection pip install counterfit-shims-grove ``` این بسته‌های Pip فقط در محیط مجازی نصب خواهند شد و خارج از آن در دسترس نخواهند بود. ### نوشتن کد پس از آماده شدن محیط مجازی پایتون، می‌توانید کد اپلیکیشن 'سلام دنیا' را بنویسید. #### وظیفه - نوشتن کد یک اپلیکیشن پایتون ایجاد کنید که `"Hello World"` را در کنسول چاپ کند. 1. از ترمینال یا خط فرمان خود، دستورات زیر را در داخل محیط مجازی اجرا کنید تا یک فایل پایتون به نام `app.py` ایجاد کنید: * در ویندوز اجرا کنید: ```cmd type nul > app.py ``` * در macOS یا لینوکس اجرا کنید: ```cmd touch app.py ``` 1. پوشه فعلی را در VS Code باز کنید: ```sh code . ``` > 💁 اگر ترمینال شما در macOS دستور `command not found` را برگرداند، به این معنی است که 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 شما اضافه می‌شود. 1. وقتی VS Code راه‌اندازی شد، محیط مجازی پایتون را فعال می‌کند. محیط مجازی انتخاب شده در نوار وضعیت پایین ظاهر خواهد شد: ![VS Code showing the selected virtual environment](../../../../../translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.fa.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.fa.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، دستور زیر را اجرا کنید تا اپلیکیشن پایتون خود را اجرا کنید: ```sh python app.py ``` خروجی زیر در کنسول ظاهر خواهد شد: ```output (.venv) ➜ nightlight python app.py Hello World! ``` 😀 برنامه 'سلام دنیا' شما موفقیت‌آمیز بود! ### اتصال 'سخت‌افزار' به عنوان یک مرحله دوم 'سلام دنیا'، اپلیکیشن CounterFit را اجرا کرده و کد خود را به آن متصل خواهید کرد. این معادل مجازی اتصال برخی سخت‌افزارهای IoT به یک کیت توسعه است. #### وظیفه - اتصال 'سخت‌افزار' 1. از ترمینال VS Code، اپلیکیشن CounterFit را با دستور زیر اجرا کنید: ```sh counterfit ``` اپلیکیشن شروع به اجرا می‌کند و در مرورگر وب شما باز می‌شود: ![The Counter Fit app running in a browser](../../../../../translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.fa.png) این اپلیکیشن به عنوان *Disconnected* علامت‌گذاری شده است و LED در گوشه بالا-راست خاموش است. 1. کد زیر را به بالای فایل `app.py` اضافه کنید: ```python from counterfit_connection import CounterFitConnection CounterFitConnection.init('127.0.0.1', 5000) ``` این کد کلاس `CounterFitConnection` را از ماژول `counterfit_connection` وارد می‌کند، که از بسته Pip `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.fa.png) 1. در این ترمینال جدید، فایل `app.py` را همانند قبل اجرا کنید. وضعیت CounterFit به **Connected** تغییر خواهد کرد و LED روشن خواهد شد. ![Counter Fit showing as connected](../../../../../translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.fa.png) > 💁 می‌توانید این کد را در پوشه [code/virtual-device](../../../../../1-getting-started/lessons/1-introduction-to-iot/code/virtual-device) پیدا کنید. 😀 اتصال شما به سخت‌افزار موفقیت‌آمیز بود! **سلب مسئولیت**: این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.