# Виртуелни рачунар са једном плочом Уместо куповине 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-а. > 💁 Слободно користите било који Python IDE или уређивач за ове лекције ако имате омиљени алат, али упутства у лекцијама ће бити заснована на коришћењу VS Code-а. 1. Инсталирајте VS Code Pylance екстензију. Ово је екстензија за VS Code која пружа подршку за Python језик. Погледајте [документацију за 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 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 апликацију као и шимове за 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) и покренути команду након тога. VS Code је подразумевано додат у PATH на Windows-у и Linux-у. 1. Када се VS Code покрене, активираће Python виртуелно окружење. Изабрано виртуелно окружење ће се појавити у доњој статусној траци: ![VS Code приказује изабрано виртуелно окружење](../../../../../translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.sr.png) 1. Ако је VS Code терминал већ покренут када се VS Code стартује, виртуелно окружење неће бити активирано у њему. Најлакше је угасити терминал користећи дугме **Kill the active terminal instance**: ![VS Code дугме за гашење активног терминала](../../../../../translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.sr.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 explorer-а и додајте следећи код: ```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 ``` Апликација ће почети са радом и отворити се у вашем веб прегледачу: ![CounterFit апликација покренута у прегледачу](../../../../../translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.sr.png) Биће означена као *Disconnected*, са искљученим LED-ом у горњем десном углу. 1. Додајте следећи код на врх `app.py`: ```python from counterfit_connection import CounterFitConnection CounterFitConnection.init('127.0.0.1', 5000) ``` Овај код увози `CounterFitConnection` класу из `counterfit_connection` модула, који долази из `counterfit-connection` pip пакета који сте раније инсталирали. Затим иницијализује везу са CounterFit апликацијом која ради на `127.0.0.1`, што је IP адреса која се увек користи за приступ вашем локалном рачунару (често називан *localhost*), на порту 5000. > 💁 Ако имате друге апликације које раде на порту 5000, можете променити ово ажурирањем порта у коду и покретањем CounterFit-а користећи `CounterFit --port `, замењујући `` са портом који желите да користите. 1. Биће потребно да покренете нови VS Code терминал одабиром дугмета **Create a new integrated terminal**. Ово је зато што CounterFit апликација ради у тренутном терминалу. ![VS Code дугме за креирање новог интегрисаног терминала](../../../../../translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.sr.png) 1. У овом новом терминалу, покрените `app.py` датотеку као и раније. Статус CounterFit-а ће се променити у **Connected** и LED ће се упалити. ![CounterFit приказује статус као повезан](../../../../../translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.sr.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). Иако се трудимо да обезбедимо тачност, молимо вас да имате у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати ауторитативним извором. За критичне информације препоручује се професионални превод од стране људи. Не преузимамо одговорност за било каква погрешна тумачења или неспоразуме који могу настати услед коришћења овог превода.