From 50f49d2c1249a955e04a7273a35d037d6ea9a462 Mon Sep 17 00:00:00 2001 From: Zed Xu Date: Wed, 21 Jul 2021 23:22:32 +0800 Subject: [PATCH 1/2] Add 1-introduction-to-iot/pi.md Simplified Chinese translation (#248) * Add 1-introduction-to-iot/pi.md Simplified Chinese translation * Fix typos * Fix typos --- .../translations/pi.zh-cn.md | 244 ++++++++++++++++++ 1 file changed, 244 insertions(+) create mode 100644 1-getting-started/lessons/1-introduction-to-iot/translations/pi.zh-cn.md diff --git a/1-getting-started/lessons/1-introduction-to-iot/translations/pi.zh-cn.md b/1-getting-started/lessons/1-introduction-to-iot/translations/pi.zh-cn.md new file mode 100644 index 00000000..426f26fc --- /dev/null +++ b/1-getting-started/lessons/1-introduction-to-iot/translations/pi.zh-cn.md @@ -0,0 +1,244 @@ +# 树莓派(Raspberry Pi) + +[树莓派](https://raspberrypi.org)是一个单板机,你可以用大量的设备和生态系统来给树莓派加上传感器和执行器,在这些课程中我们使用一个叫做[Grove](https://www.seeedstudio.com/category/Grove-c-1003.html)的硬件生态系统,你将会用Python来给你的Pi编程和读取传感器。 + +![一个树莓派 4](../../../../images/raspberry-pi-4.jpg) + +## 设置 + +如果你要使用树莓派来作为你的物联网硬件,那么你有两个选择来完成这些课程 - 直接在树莓派上编码,或者从你的计算机远程连接到无界面的树莓派上来编码。 + +在你开始之前,你还需要把Grove基础扩展板连接到你的Pi上。 + +### 任务 - 设置 + +安装Grove基础扩展板并配置好你的树莓派 + +1. 安装Grove基础扩展板到你的树莓派,扩展板上的插孔与Pi上的GPIO引脚一一对应,沿着引脚一路滑下去来压住底部,扩展板会在上面盖住树莓派。 + + ![安装grove扩展板](../../../../images/pi-grove-hat-fitting.gif) + +2. 决定你要如何来编码你的树莓派,并直接跳到下面相关的部分: + + * [在树莓派上直接编码](#在树莓派上直接编码) + * [远程连接来编码树莓派](#远程连接来编码树莓派) + +### 在树莓派上直接编码 + +如果你想要直接在树莓派上编码,你可以使用Raspberry Pi OS的桌面版本并安装你需要的所有工具。 + +#### 任务 - 在树莓派上直接编码 + +配置树莓派的开发环境。 + +1. 跟着[树莓派配置指南](https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up)的步骤来配置你的树莓派,给它连上一个键盘/鼠标/显示器,把它接入你的Wi-Fi或者以太网络,然后更新软件。你要安装的是**Raspberry Pi OS (32 bit)**,用Raspberry Pi Imager来烧写SD卡的时候一般都会推荐这个操作系统。 + +想要使用Grove传感器和执行器来给树莓派编程的话,你需要安装一个编辑器来编写设备代码和各种用来与Grove硬件交互的函数库、工具。 + +1. 当你的树莓派重启后,点击上方菜单栏的**Terminal** 图标或者选择*Menu -> Accessories -> Terminal*来启动终端。 + +1. 运行下面的命令来确保操作系统和已安装的软件都是最新的: + + ```sh + sudo apt update && sudo apt full-upgrade --yes + ``` + +1. 运行下面的命令来安装所有Grove硬件需要的函数库: + + ```sh + curl -sL https://github.com/Seeed-Studio/grove.py/raw/master/install.sh | sudo bash -s - + ``` + + Python一个强大的特性是可以安装[pip包](https://pypi.org) - 这些都是其他人编写了发布到网上的软件包,用一个命令你就可以把一个pip包安装到你的计算机上,然后在代码里面使用这个软件包了,这个Grove安装脚本会安装你用Python来操控Grove硬件时将会用到的pip软件包。 + +1. 用菜单点击或者运行下面的命令来重启树莓派: + + ```sh + sudo reboot + ``` + +1. 树莓派重启后,重新打开终端并运行下面的命令来安装[Visual Studio Code (VS Code)](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) - 你会使用这个编辑器来编写你的设备Python代码。 + + ```sh + sudo apt install code + ``` + + 安装完成后,上面的菜单栏就会出现VS Code了。 + + > 💁 如果你有更喜欢的工具,你也可以自由使用任意的Python IDE或者编辑器来学习课程,但是课程中会基于VS Code来给出指示。 + +1. 安装Pylance,这是给VS Code提供Python语言支持的扩展插件,可以参考这个[Pylance扩展文档](https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-pylance&WT.mc_id=academic-17441-jabenn)中的指示在VS Code中安装这个插件。 + +### 远程连接来编码树莓派 + +除了直接在树莓派上编码,它也可以无界面运行,不连接键盘/鼠标/显示器,使用Visual Studio Code从你的计算机来配置和编码树莓派。 + +#### 配置树莓派操作系统 + +树莓派操作系统需要被安装在一张SD卡上才能远程编码。 + +##### 任务 - 配置树莓派操作系统 + +配置无界面树莓派系统 + +1. 从[树莓派操作系统软件页面](https://www.raspberrypi.org/software/)下载**Raspberry Pi Imager**并安装 + +1. 在你的计算机上插入一张SD卡,必要时需要使用一个转换器 + +1. 启动Raspberry Pi Imager + +1. 在Raspberry Pi Imager点击**CHOOSE OS**,选择*Raspberry Pi OS (Other)*,然后选择*Raspberry Pi OS Lite (32-bit)* + + ![Raspberry Pi Imager选择Raspberry Pi OS Lite](../../../../images/raspberry-pi-imager.png) + + > 💁 Raspberry Pi OS Lite是一个没有桌面UI或者基于UI的工具的操作系统版本,这些对于无界面树莓派来说都是不需要的,而且这样可以安装更小的空间、启动速度也更快。 + +1. 点击**CHOOSE STORAGE** 按钮,然后选择你的SD卡 + +1. 按下`Ctrl+Shift+X`来启动**Advanced Options**,这些选项允许你在烧写到SD卡之前对Raspberry Pi OS进行一些预配置。 + + 1. 勾选**Enable SSH**,然后给用户`pi`设置一个密码,这是你等会用来登录的密码。 + + 2. 如果你打算通过WiFi连接到树莓派,那么需要勾选**Configure WiFi**,然后输入你WiFi的SSID和密码并选择你的国家码。如果打算使用以太网线缆来连接,那就不需要做这一步了,只需要确保树莓派和你的计算机连接的是同一个网络就行。 + + 3. 勾选**Set locale settings**,设置你的国家和时区。 + + 4. 点击 **SAVE** 按钮 + +2. 点击**WRITE**按钮把OS烧写到SD卡上,如果你使用的是MacOS,你会被要求输入你的密码,因为底层的写磁盘镜像的工具需要访问权限。 + +操作系统会被烧写到SD卡上,完成之后SD卡会被弹出,并且你会收到通知。从你的计算机拔出SD卡,再把它插到树莓派上并上电启动。 + +#### 连接到树莓派 + +接下来的一个步骤是远程连接树莓派,你可以使用`ssh`,这个工具在macOS、Linux和最近几个版本的Windows上都可以直接使用。 + +##### 任务 - 连接到树莓派 + +远程连接树莓派。 + +1. 启动一个终端或者命令提示符,输入下面的命令来连接树莓派: + + ```sh + ssh pi@raspberrypi.local + ``` + + 如果你是在一个老版本没有安装`ssh`的Windows上,可以使用OpenSSH,你可以在[OpenSSH安装文档](https://docs.microsoft.com//windows-server/administration/openssh/openssh_install_firstuse?WT.mc_id=academic-17441-jabenn)里找到安装指南。 + +2. 这应该会连上你的树莓派,并且会请求密码。 + + 通过`.local`来寻找你的网络中的计算机是Linux和Windows最近才加入的功能,如果你是在使用Linux或者Windows过程中遇到一些Hostname无法找到的问题,你会需要安装一些额外的软件来启用ZeroConf网络(也被Apple称为Bonjour): + + 1. 如果你在使用Linux,用下面的命令来安装Avahi: + + ```sh + sudo apt-get install avahi-daemon + ``` + + 2. 如果你在使用Windows,启用ZeroConf最简单的方法是安装[Bonjour Print Services for Windows](http://support.apple.com/kb/DL999),你也可以安装[iTunes for Windows](https://www.apple.com/itunes/download/)来获取更新版本的组件(无法独立下载安装)。 + + > 💁 如果你无法通过`raspberrypi.local`连接,那么你也可以使用你的树莓派的IP地址,参考[树莓派IP地址文档](https://www.raspberrypi.org/documentation/remote-access/ip-address.md)上大量的获取IP地址的方法。 + +3. 输入你在Raspberry Pi Imager高级选项中输入的密码 + +#### 在树莓派上配置软件 + +当你连接上树莓派之后,你需要确保这个操作系统是最新的,并且安装各类用于和Grove硬件交互的函数库和工具。 + +##### 任务 - 在树莓派上配置软件 + +配置已安装的树莓派软件并安装Grove的函数库。 + +1. 从你的`ssh`会话中,运行下面的命令来更新并重启树莓派: + + ```sh + sudo apt update && sudo apt full-upgrade --yes && sudo reboot + ``` + + 树莓派会被更新并重启,这个`ssh`会话在树莓派重启的时候会中断,等待30秒后重连就行。 + +2. 从重连的`ssh`会话中,运行下面的命令来安装Grove硬件需要的函数库: + + ```sh + curl -sL https://github.com/Seeed-Studio/grove.py/raw/master/install.sh | sudo bash -s - + ``` + Python一个强大的特性是可以安装[pip包](https://pypi.org) - 这些都是其他人编写了发布到网上的软件包,用一个命令你就可以把一个pip包安装到你的计算机上,然后在代码里面使用这个软件包了,这个Grove安装脚本会安装你用Python来操控Grove硬件时将会用到的pip软件包。 + +3. 用下面的命令来重启树莓派: + + ```sh + sudo reboot + ``` + + 树莓派重启的时候`ssh`会话会中断,不要再重新连接。 + +#### 配置VS Code的远程连接 + +树莓派配置完以后,你可以从你的计算机通过Visual Studio Code (VS Code)来连接到它 - 这是一个你将要用Python来写设备代码的免费开发者编辑器。 + +##### 任务 - 配置VS Code的远程连接 + +安装需要的软件并远程连接到你的树莓派。 + +1. 跟着[VS Code 文档](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn)在你的计算机上安装 VS Code + +2. 根据[VS Code远程SSH开发文档](https://code.visualstudio.com/docs/remote/ssh?WT.mc_id=academic-17441-jabenn)的步骤来安装需要的组件 + +3. 根据相同的指示,连接VS Code到树莓派 + +4. 连接上之后,根据[管理扩展程序](https://code.visualstudio.com/docs/remote/ssh#_managing-extensions?WT.mc_id=academic-17441-jabenn)的指示来远程安装[Pylance扩展程序](https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-pylance&WT.mc_id=academic-17441-jabenn)到树莓派上 + +## Hello world + +开始一门新的编程语言或者技术时创建一个'Hello World'的程序是一个传统 - 一个输出类似于`"Hello World"`文本的小程序,用来证明所有的工具都已经配置正确了。 + +树莓派的这个Hello World程序可以确保你已经把Python和Visual Studio Code正确安装了。 + +这个程序会在一个叫`nightlight`的文件夹里面,他会在这个任务后面部分的不同代码里面再次使用,用来构建夜灯程序。 + +### 任务 - hello world + +创建Hello World应用。 + +1. 直接在树莓派上启动VS Code,或者在你的计算机上用远程SSH扩展来连接到树莓派。 + +2. 选择 *Terminal -> New Terminal* 或者按下`` CTRL+` `` 来启动VS Code,这会打开在`pi`的home目录。 + +3. 运行下面的命令来为你的代码创建一个目录,并在目录里创建一个叫`app.py`的Python文件: + + ```sh + mkdir nightlight + cd nightlight + touch app.py + ``` + +4. 在VS Code中点击*File -> Open...*并选择*nightlight*文件夹和 **OK** 来打开这个文件夹 + + ![VS Code打开nightlight文件夹的对话框](../../../../images/vscode-open-nightlight-remote.png) + +5. 从VS Code窗口打开 `app.py` 文件并增加下面的代码: + + ```python + print('Hello World!') + ``` + + `print`函数会在终端打印任何传递给它的东西。 + +6. 从VS Code的终端运行下面的命令来运行你的Python应用: + + ```sh + python3 app.py + ``` + + > 💁 你需要显式的调用`python3`来运行这个代码,以防你除了Python 3(最新版本)还安装了Python 2,如果你安装了Python 2,那么调用`python`命令时会使用Python 2 而不是Python 3 + + 终端里会出现下面的输出: + + ```output + pi@raspberrypi:~/nightlight $ python3 app.py + Hello World! + ``` + +> 💁 你可以在[code/pi](code/pi) 文件夹里找到这个代码 + +😀 你的'Hello World'程序成功了! From caaca7b5b6dac7298d72c3bfa802fda4c3a49e29 Mon Sep 17 00:00:00 2001 From: Nero Blackstone Date: Wed, 21 Jul 2021 10:23:19 -0500 Subject: [PATCH 2/2] improve Chinese translation in "visual-device.zh-cn.md", fix some links (#244) * improve Chinese translation in "visual-device.zh-cn.md", fix some links * fix typo Co-authored-by: Jim Bennett --- .../translations/README.zh-cn.md | 6 +-- .../translations/virtual-device.zh-cn.md | 42 +++++++++---------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/1-getting-started/lessons/1-introduction-to-iot/translations/README.zh-cn.md b/1-getting-started/lessons/1-introduction-to-iot/translations/README.zh-cn.md index b635650f..80baeb2f 100644 --- a/1-getting-started/lessons/1-introduction-to-iot/translations/README.zh-cn.md +++ b/1-getting-started/lessons/1-introduction-to-iot/translations/README.zh-cn.md @@ -129,9 +129,9 @@ Raspberry Pi 是其中最流行的单板机。 按照相关的指南来设置你的设备,并完成一个“Hello World”项目。我们将用4个课程创造一个物联网夜灯,而这是第一步。 -* [Arduino:Wio Terminal](wio-terminal.md) -* [单板机:Raspberry Pi](pi.md) -* [单板机:虚拟设备](virtual-device.md) +* [Arduino:Wio Terminal](wio-terminal.zh-cn.md) +* [单板机:Raspberry Pi](../pi.md) +* [单板机:虚拟设备](virtual-device.zh-cn.md) 您将使用 VS Code在Arduino 和单板机上编程。如果您以前从未使用过它,请在 [VS Code 站点](https://code.visualstudio.com/?WT.mc_id=academic-17441-jabenn)上阅读更多相关信息。 diff --git a/1-getting-started/lessons/1-introduction-to-iot/translations/virtual-device.zh-cn.md b/1-getting-started/lessons/1-introduction-to-iot/translations/virtual-device.zh-cn.md index ee781a0e..e634044f 100644 --- a/1-getting-started/lessons/1-introduction-to-iot/translations/virtual-device.zh-cn.md +++ b/1-getting-started/lessons/1-introduction-to-iot/translations/virtual-device.zh-cn.md @@ -1,38 +1,38 @@ # 虚拟单板机 -除了买一个 IoT 设备、传感器和执行器,你也可以用你的电脑来模拟 IoT 硬件。[CounterFit 项目](https://github.com/CounterFit-IoT/CounterFit) 让你在自己的电脑上运行模拟 IoT 硬件(如传感器和执行器)的应用,以及用本地 Python 代码(就像你能在物质 Raspberry Pi 上写的代码)访问传感器和执行器。 +除了买一个 IoT 设备、传感器和执行器,你也可以用你的电脑来模拟 IoT 硬件。[CounterFit 项目](https://github.com/CounterFit-IoT/CounterFit) 让你在自己的电脑上运行模拟 IoT 硬件(如传感器和执行器)的应用,并从本地Python代码访问传感器和执行器,代码的编写方式,与使用Raspberry Pi物理硬件相同。 ## 设置 -利用 CounterFit 前,你必须在你的电脑上安装一些免费的软件。 +使用 CounterFit 前,你必须在你的电脑上安装一些免费的软件。 ### 任务 安装需要的软件。 -1. 安装 Python。 在 [Python 的下载页](https://www.python.org/downloads/) 找安装最新 Python 版本的指示。 +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 的指示。 +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。 + > 💁 如果你对其它平台比较熟悉,你当然可以用你较喜欢的 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 的程序,因为我们需要在每个项目中安装它。 +我们将在日后的作业中提供安装及设置 CounterFit 的说明,因为我们需要在每个项目中安装它。 ## Hello world(你好,世界) -第一次用新的编程语言或科技,通常以创建一个“Hello World”应用开始——一个输出像`"Hello World"`的字的小小应用,为了确保所有的工具被设置好。 +第一次用新的编程语言或技术,通常以创建一个“Hello World”应用开始——一个输出类似`"Hello World"`文本的小小应用,以确保所有的工具被设置好。 -这个虚拟 IoT 硬件的“Hello World”应用将确保你有安装好 Python 与 Visual Studio Code。它也将把虚拟 IoT 传感器和执行器连接到 CounterFit。它不会用到任何硬件,他只会以连接来证明每个部分运作良好。 +这个虚拟 IoT 硬件的“Hello World”应用将确保你安装好 Python 与 Visual Studio Code。它也会连接到 CounterFit以获取虚拟 IoT 传感器和执行器。它不会用到任何硬件,它只会以正确连接来证明每个部分运作良好。 -这个应用正在被称为`夜灯`的文件夹中,而且我们等一下会跟着不同的代码再次利用它,为了在作业当中创建夜灯应用。 +这个应用放在名为`nightlight`的文件夹中,稍后将和其他代码结合,以构建夜灯应用。 ### 配置 Python 虚拟环境 -Python 的其中一个强大功能是安装 [pip 软件包](https://pypi.org)的能力;它们是别人写并在网上上载的代码软件包。只要用着一个命令,你就可以在你的电脑上安装一个 pip 软件包,并在你的代码中使用它。你将用 pip 安装一个软件包,把它用来跟 CounterFit 沟通。 +Python 的强大功能之一是能够安装 [pip 软件包](https://pypi.org);这些是由其他人编写并发布到互联网上的代码包。只需一条命令就可以在你的电脑上安装pip 软件包,并在你的代码中使用它。你将用 pip 安装一个软件包,来与CounterFit 沟通。 -默认情况下,当你安装一个软件包,你的电脑哪里都可以访问它,而那可以造成关于软件包版本的问题,例如:当你为新应用安装软件包的新版本,依靠旧版本的另一个应用就有可能出些状况。为了以免这种事发生,你可以用一个 [Python 虚拟环境](https://docs.python.org/3/library/venv.html),在一个专用文件夹中的 Python,那当你安装 pip 软件包它们只会在那个文件夹中。 +默认情况下,当你安装软件包时,在计算机的任何位置都是可用的,而这可能会造成软件包版本问题,例如:当你为新应用安装软件包的新版本,依靠旧版本的另一应用就有可能出现状况。为了避免这种问题,你可以使用 [Python 虚拟环境](https://docs.python.org/3/library/venv.html),本质上是一个专用文件夹中的 Python 副本,当你安装 pip 软件包时,它们只会安装到那个文件夹中。 #### 任务:配置一个 Python 虚拟环境 @@ -82,7 +82,7 @@ Python 的其中一个强大功能是安装 [pip 软件包](https://pypi.org)的 > 💁 你的 Python 版本有可能不一样,但只要版本是 3.6 或以上就没事。不然,请删除这个文件夹,并安装较新的 Python 版本,再试一试。 -5. 运行以下的命令来安装为 CounterFit 的 pip 软件包。这些软件包包括主要的 CounterFit 应用以及为 Grove 硬件的垫片。这些垫片让你就像用来自 Grove 生态系统的物质传感器和执行器一样写代码,但把它连接到虚拟 IoT 设备。 +5. 运行以下的命令来安装CounterFit 软件包。这些软件包包括主要的 CounterFit 应用以及 Grove 硬件的[垫片](https://zh.wikipedia.org/wiki/%E5%9E%AB%E7%89%87_(%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1))。这些垫片让你就像用来自 Grove 生态系统的物理传感器和执行器一样写代码,但把它连接到虚拟 IoT 设备。 ```sh pip install CounterFit @@ -92,11 +92,11 @@ Python 的其中一个强大功能是安装 [pip 软件包](https://pypi.org)的 这些 pip 软件包只会在虚拟环境中安装,而你无法在虚拟环境外访问它。 -### 写代码 +### 编写代码 -Python 虚拟环境一被准备好,你就能为 “Hello World” 应用写代码。 +一旦Python 虚拟环境被准备好,你就能为 “Hello World” 应用写代码。 -#### 任务:写代码 +#### 任务:编写代码 创建一个 Python 应用在控制台上打印`"Hello World"` 输出。 @@ -145,7 +145,7 @@ Python 虚拟环境一被准备好,你就能为 “Hello World” 应用写代 (.venv) ➜ nightlight ``` -6. 从 VS Code explorer 打开 `app.py` 文件,在加以下的代码: +6. 从 VS Code explorer 打开 `app.py` 文件,并添加以下的代码: ```python print('Hello World!') @@ -170,7 +170,7 @@ Python 虚拟环境一被准备好,你就能为 “Hello World” 应用写代 ### 连接“硬件” -你的第二 “Hello World” 步将是运行 CounterFit 应用,再连接你的代码。这是把一些 IoT 硬件插入开发者套件的虚拟相等。 +你的第二个“Hello World”步骤,是运行 CounterFit 应用并连接你的代码。这相当于把一些 IoT 硬件插入开发者套件。 #### 任务:连接“硬件” @@ -182,7 +182,7 @@ Python 虚拟环境一被准备好,你就能为 “Hello World” 应用写代 应用将开始运行以及在你的网页浏览器打开: - ![CounterFit 应用在网页浏览器运行](../../../images/counterfit-first-run.png) + ![CounterFit 应用在网页浏览器运行](../../../../images/counterfit-first-run.png) 他会有个 *Disconnected*(断开连接)的标记,右上角的 LED 也会关着。 @@ -199,12 +199,12 @@ Python 虚拟环境一被准备好,你就能为 “Hello World” 应用写代 3. 你必须选择 **Create a new integrated terminal** 按钮来启动一个新 VS Code 终端。这是因为 CounterFit 应用正在当前终端运行着。 - ![VS Code Create a new integrated terminal 按钮](../../../images/vscode-new-terminal.png) + ![VS Code Create a new integrated terminal 按钮](../../../../images/vscode-new-terminal.png) 4. 在这个新终端,像以前一样运行`app.py` 文件。CounterFit 的状态将改成 **Connected** (连接),LED也会开着。 - ![CounterFit 被连接了](../../../images/counterfit-connected.png) + ![CounterFit 被连接了](../../../../images/counterfit-connected.png) -> 💁 你可以在 [code/virtual-device](code/virtual-device) 文件夹找到这个代码。 +> 💁 你可以在 [code/virtual-device](../code/virtual-device) 文件夹找到这个代码。 😀 你的硬件连接成功了!