# Віртуальний одноплатний комп'ютер Замість того, щоб купувати IoT-пристрій разом із сенсорами та актуаторами, ви можете використовувати свій комп'ютер для симуляції IoT-обладнання. Проєкт [CounterFit](https://github.com/CounterFit-IoT/CounterFit) дозволяє запускати локальний застосунок, який симулює IoT-обладнання, таке як сенсори та актуатори, і отримувати доступ до них через локальний Python-код, написаний так само, як і код для Raspberry Pi з використанням фізичного обладнання. ## Налаштування Щоб використовувати CounterFit, вам потрібно встановити безкоштовне програмне забезпечення на свій комп'ютер. ### Завдання Встановіть необхідне програмне забезпечення. 1. Встановіть Python. Перейдіть на [сторінку завантаження Python](https://www.python.org/downloads/) для інструкцій щодо встановлення останньої версії Python. 1. Встановіть Visual Studio Code (VS Code). Це редактор, який ви будете використовувати для написання коду вашого віртуального пристрою на Python. Перейдіть до [документації VS Code](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) для інструкцій щодо встановлення VS Code. > 💁 Ви можете використовувати будь-який IDE або редактор для Python, якщо у вас є улюблений інструмент, але в уроках будуть надані інструкції на основі використання VS Code. 1. Встановіть розширення Pylance для VS Code. Це розширення забезпечує підтримку мови Python у VS Code. Перейдіть до [документації розширення Pylance](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-python.vscode-pylance) для інструкцій щодо встановлення цього розширення у VS Code. Інструкції щодо встановлення та налаштування застосунку CounterFit будуть надані у відповідний момент у завданнях, оскільки він встановлюється для кожного проєкту окремо. ## Hello world Традиційно, починаючи з нової мови програмування або технології, створюють застосунок "Hello World" — невеликий застосунок, який виводить текст на кшталт `"Hello World"`, щоб переконатися, що всі інструменти налаштовані правильно. Застосунок Hello World для віртуального IoT-обладнання допоможе переконатися, що Python і Visual Studio Code встановлені правильно. Він також підключиться до CounterFit для віртуальних IoT-сенсорів та актуаторів. Він не використовуватиме жодного обладнання, а лише підключиться, щоб довести, що все працює. Цей застосунок буде знаходитися в папці `nightlight`, і його буде повторно використовувати з іншим кодом у наступних частинах цього завдання для створення застосунку нічного світильника. ### Налаштування віртуального середовища Python Однією з потужних функцій Python є можливість встановлювати [Pip-пакети](https://pypi.org) — це пакети коду, написані іншими людьми та опубліковані в Інтернеті. Ви можете встановити Pip-пакет на свій комп'ютер однією командою, а потім використовувати цей пакет у своєму коді. Ви будете використовувати Pip для встановлення пакета, щоб працювати з CounterFit. За замовчуванням, коли ви встановлюєте пакет, він доступний усюди на вашому комп'ютері, і це може призвести до проблем із версіями пакетів — наприклад, один застосунок залежить від однієї версії пакета, яка перестає працювати після встановлення нової версії для іншого застосунку. Щоб уникнути цієї проблеми, ви можете використовувати [віртуальне середовище Python](https://docs.python.org/3/library/venv.html), яке є копією Python у спеціальній папці, і коли ви встановлюєте Pip-пакети, вони встановлюються лише в цю папку. > 💁 Якщо ви використовуєте Raspberry Pi, то ви не налаштовували віртуальне середовище на цьому пристрої для управління Pip-пакетами, натомість ви використовуєте глобальні пакети, оскільки пакети Grove встановлюються глобально за допомогою скрипта встановлення. #### Завдання — налаштування віртуального середовища Python Налаштуйте віртуальне середовище Python і встановіть Pip-пакети для CounterFit. 1. У вашому терміналі або командному рядку виконайте наступне в обраному вами місці, щоб створити та перейти до нової директорії: ```sh mkdir nightlight cd nightlight ``` 1. Тепер виконайте наступне, щоб створити віртуальне середовище в папці `.venv`: ```sh python3 -m venv .venv ``` > 💁 Вам потрібно явно викликати `python3`, щоб створити віртуальне середовище, на випадок, якщо у вас встановлений Python 2 разом із Python 3 (остання версія). Якщо у вас встановлений 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](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, а також шими для обладнання Grove. Ці шими дозволяють писати код так, ніби ви програмуєте з використанням фізичних сенсорів та актуаторів з екосистеми 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) і повторно виконати команду. У Windows і Linux VS Code додається до PATH за замовчуванням. 1. Коли VS Code запуститься, він активує віртуальне середовище Python. Вибране віртуальне середовище з'явиться в нижній панелі стану: ![VS Code показує вибране віртуальне середовище](../../../../../translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.uk.png) 1. Якщо термінал VS Code вже працює, коли VS Code запускається, віртуальне середовище в ньому не буде активоване. Найпростіше — закрити термінал за допомогою кнопки **Kill the active terminal instance**: ![Кнопка VS Code Kill the active terminal instance](../../../../../translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.uk.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 ``` Застосунок почне працювати і відкриється у вашому веб-браузері: ![Застосунок Counter Fit працює у браузері](../../../../../translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.uk.png) Він буде позначений як *Disconnected*, а світлодіод у верхньому правому куті буде вимкнений. 1. Додайте наступний код на початок `app.py`: ```python from counterfit_connection import CounterFitConnection CounterFitConnection.init('127.0.0.1', 5000) ``` Цей код імпортує клас `CounterFitConnection` із модуля `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](../../../../../translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.uk.png) 1. У цьому новому терміналі запустіть файл `app.py`, як і раніше. Статус CounterFit зміниться на **Connected**, і світлодіод засвітиться. ![Counter Fit показує статус Connected](../../../../../translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.uk.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). Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ на його рідній мові слід вважати авторитетним джерелом. Для критичної інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникають внаслідок використання цього перекладу.