You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/1-getting-started/lessons/1-introduction-to-iot/translations/virtual-device.zh-cn.md

211 lines
9.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 虚拟单板机
除了买一个 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?itemName=ms-python.vscode-pylance&WT.mc_id=academic-17441-jabenn) 找安装扩展的指示。
我们将在合适的时间在作业指示中提供安装及设置 CounterFit 的程序,因为我们需要在每个项目中安装它。
## Hello world你好世界
第一次用新的编程语言或科技通常以创建一个“Hello World”应用开始——一个输出像`"Hello World"`的字的小小应用,为了确保所有的工具被设置好。
这个虚拟 IoT 硬件的“Hello World”应用将确保你有安装好 Python 与 Visual Studio Code。它也将把虚拟 IoT 感应器和执行器连接到 CounterFit。它不会用到任何硬件他只会以连接来证明每个部分运作良好。
这个应用正在被称为`夜灯`的文件夹中,而且我们等一下会跟着不同的代码再次利用它,为了在作业当中创建夜灯应用。
### 配置 Python 虚拟环境
Python 的其中一个强大功能是安装 [pip 软件包](https://pypi.org)的能力;它们是别人写并在网上上载的代码软件包。只要用着一个命令,你就可以在你的电脑上安装一个 pip 软件包,并在你的代码中使用它。你将用 pip 安装一个软件包,把它用来跟 CounterFit 沟通。
默认情况下,当你安装一个软件包,你的电脑哪里都可以访问它,而那可以造成关于软件包版本的问题,例如:当你为新应用安装软件包的新版本,依靠旧版本的另一个应用就有可能出些状况。为了以免这种事发生,你可以用一个 [Python 虚拟环境](https://docs.python.org/3/library/venv.html),在一个专用文件夹中的 Python那当你安装 pip 软件包它们只会在那个文件夹中。
#### 任务:配置一个 Python 虚拟环境
配置一个 Python 虚拟环境便安装为 CounterFit 的 pip 软件包。
1. 从你的终端或命令行,在你选的地方运行以下的程序,来创建和导航到一个新目录:
```sh
mkdir nightlight
cd nightlight
```
2. 现在,运行以下的程序来在`.venv` 文件夹中创建一个虚拟环境
```sh
python3 -m venv .venv
```
> 💁 为了创建虚拟环境,你必须明确地调用 `python3`,万一 Python 3 (最新版本)以外你也曾经安装过 Python 2。如果你安装过 Python 2那调用 `python` 将用到 Python 2 而不是 Python 3。
3. 激活虚拟环境:
* 在 Windows 运行:
```cmd
.venv\Scripts\activate.bat
```
* 在 macOS 或 Linux运行
```cmd
source ./.venv/bin/activate
```
4. 虚拟环境一被激活,默认的 `python` 命令将运行用来创建虚拟环境的 Python 版本。为了拿到版本,运行以下的程序:
```sh
python --version
```
输出应该包括一下:
```output
(.venv) ➜ nightlight python --version
Python 3.9.1
```
> 💁 你的 Python 版本有可能不一样,但只要版本是 3.6 或以上就没事。不然,请删除这个文件夹,并安装较新的 Python 版本,再试一试。
5. 运行以下的命令来安装为 CounterFit 的 pip 软件包。这些软件包包括主要的 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. 从你的终端或命令行,在虚拟环境中运行以下的程序来创建一个叫做`app.py` 的 Python 文件:
* 在 Windows 运行:
```cmd
type nul > app.py
```
* 在 macOS 或 Linux运行
```cmd
touch app.py
```
2. 在 VS Code 打开当前的文件夹:
```sh
code .
```
> 💁 如果你的终端在 macOS 返回`command not found`,那就代表 VS Code 还未被加进你的 PATH。为了把 VS Code 加进你的 PATH你可以按照 [Launching from the command line section of the VS Code 文档](https://code.visualstudio.com/docs/setup/mac?WT.mc_id=academic-17441-jabenn#_launching-from-the-command-line) 的指示,然后运行命令。在 Windows 和 LinuxVS Code 默认被加进你的 PATH。
3. 当 VS Code 被启动,它会激活 Python 虚拟环境。被选择的虚拟环境将在底部状态栏出现:
![ 被选择的虚拟环境将在 VS Code的底部状态栏出现](../../../images/vscode-virtual-env.png)
4. 如果VS Code 被启动时VS Code 终端已经正在运行,虚拟环境不会被激活。这时,最容易做的是用 **Kill the active terminal instance** 的按钮:
![VS Code Kill the active terminal instance 按钮](../../../images/vscode-kill-terminal.png)
虚拟环境的名字将是终端提示的字首,所以你可以把它用来确认虚拟环境已经被激活。例如,它可能是:
```sh
(.venv) ➜ nightlight
```
如果你没有 `.venv` 的字首在提示上,虚拟环境不在终端中活动。
5. 为了启动一个新的 VS Code 终端,选择*Terminal -> New Terminal 或按`` CTRL+` ``。这个新终端将加载虚拟环境,以及激活它的调用将在终端中出现。提示也会有虚拟环境的名字(`.venv`
```output
➜ nightlight source .venv/bin/activate
(.venv) ➜ nightlight
```
6. 从 VS Code explorer 打开 `app.py` 文件,在加以下的代码:
```python
print('Hello World!')
```
`print` 函数将在控制台打印出函数中的任何东西。
7. 从 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 应用在网页浏览器运行](../../../images/counterfit-first-run.png)
他会有个 *Disconnected*(断开连接)的标记,右上角的 LED 也会关着。
2.`app.py` 上加以下的代码:
```python
from counterfit_connection import CounterFitConnection
CounterFitConnection.init('127.0.0.1', 5000)
```
这个代码从 `counterfit_connection` 模块进口`CounterFitConnection` 类;这个模块来自你刚才安装的 `counterfit-connection` pip 软件包。然后,它初始化跟 CounterFit 应用的连接。应用在`127.0.0.1` 运行着它是一个IP 地址,而你一直可以用它在端口 5000 访问你的本地电脑(通常被叫为*localhost*)。
> 💁 如果你有其它应用正在端口 5000 运行着,你可以在代码更新端口,再用 `CounterFit --port <port_number>` 运行 CounterFit在`<port_number>` 填着你想用的端口。
3. 你必须选择 **Create a new integrated terminal** 按钮来启动一个新 VS Code 终端。这是因为 CounterFit 应用正在当前终端运行着。
![VS Code Create a new integrated terminal 按钮](../../../images/vscode-new-terminal.png)
4. 在这个新终端,像以前一样运行`app.py` 文件。CounterFit 的状态将改成 **Connected** 连接LED也会开着。
![CounterFit 被连接了](../../../images/counterfit-connected.png)
> 💁 你可以在 [code/virtual-device](code/virtual-device) 文件夹找到这个代码。
😀 你的硬件连接成功了!