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/2-deeper-dive/translations/README.zh-cn.md

267 lines
23 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.

# 深入了解物联网
![本课程概述草图](../../../sketchnotes/lesson-2.jpg)
> Sketchnote by [Nitya Narasimhan](https://github.com/nitya). 单击图像可查看大图。
本课程是 [Hello IoT series](https://youtube.com/playlist?list=PLmsFUfdnGr3xRts0TIwyaHyQuHaNQcb6-) 是由 [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn) 制作。 该课程以 2 个视频的形式授课 - 1小时的课程时间和1小时的答疑时间使您能更深入地了解课程的各个部分并答疑解惑。
[![课程 2: 深入了解物联网](https://img.youtube.com/vi/t0SySWw3z9M/0.jpg)](https://youtu.be/t0SySWw3z9M)
[![课程 2: 深入了解物联网 - 答疑解惑](https://img.youtube.com/vi/tTZYf9EST1E/0.jpg)](https://youtu.be/tTZYf9EST1E)
> 🎥 点击以上图片观看视频教程
## 课前小测试
[课前小测试](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/3)
## 介绍
本课程将深入探讨上一课程中介绍的一些概念。
在本课程中,我们将介绍:
* [物联网应用程序组件](#components-of-an-iot-application)
* [深入了解微控制器](#deeper-dive-into-microcontrollers)
* [深入了解单板计算机](#deeper-dive-into-single-board-computers)
## 物联网应用程序组件
物联网应用程序的两个组成部分是 *网络**物* 。现在让我们更详细地探讨这两个组件。
### 物
![树莓派 4](../../../images/raspberry-pi-4.jpg)
物联网的 **物** 部分是指可以与物理世界交互的设备。这些设备通常是小型,低价的计算机,它们使用低功耗并以低速运行 - 例如只有千字节RAM与PC中的千兆字节对比鲜明的简单微控制器仅以几百兆赫兹运行与PC中的千兆赫对比鲜明但其消耗的功率非常小它们可以仅通过电池供电就运行数周数月甚至数年。
这些设备与物理世界进行交互,通过使用传感器从周围环境收集数据,或者通过反馈输出或控制执行器改变物理世界。典型的例子是智能恒温器 - 一种具有温度传感器的设备,可通过表盘或触摸屏设置所需温度,该设备与加热或冷却系统的连接,当检测到的温度超出所需范围时进行调节。当温度传感器检测到房间太冷,就会触发执行器打开暖气。
![该图图显示了作为物联网设备输入的温度和刻度盘,以及作为输出的加热控制器](../../../images/basic-thermostat.png)
有各种各样的东西可以充当物联网设备,从感知状态的专用硬件到通用设备,甚至是您的智能手机!智能手机可以使用传感器来检测周围的世界,并使用执行器与世界进行交互 - 例如使用GPS传感器来检测您的位置并使用扬声器为您提供前往目的地的导航指令。
✅ 想想你周围的其他系统,它们从传感器读取数据并做出决策。比如烤箱上的恒温器。你能找到更多吗?
### 网络
物联网应用程序的 **网络** 由可以连接以发送和接收数据的应用,以及其它负责处理设备数据并帮助决定向执行器发送哪些请求的应用组成。
一种典型的场景是拥有物联网设备连接的云服务,此云服务可处理安全性等事项,并从物联网设备收发消息。然后,此云服务将连接到可以处理或存储传感器数据的其他应用程序,或者综合其他系统的数据一起来做出决策。
设备也并不总是通过WiFi或有线连接直连到互联网。一些设备使用蓝牙等技术通过 mesh网状网络的相互通信再通过集线器连接到互联网。
以智能恒温器为例,恒温器将使用家庭 WiFi 连接到在云端服务器。它将温度数据发送到云服务并写入数据库,房主便可使用手机应用程序查询当前和历史温度。云服务还可获取房主预设的温度,并将其发送给物联网设备,以控制供暖系统的开关。
![该图显示了温度和表盘作为物联网设备的输入,物联网设备与云有两条通路,云又与电话有两条通路,物联网设备的输出则是对加热器的控制](../../../images/mobile-controlled-thermostat.png)
更智能的版本可以在云服务中使用 AI (人工智能),将连接到其他物联网设备的传感器数据,例如探测哪些房间正在使用的占用传感器,以及天气或日历信息等,以决定如何更智能地设置温度。例如它从你的日历中读取到你正在度假,它将关闭暖气,或者根据使用房间情况关闭特定房间的暖气,从数据中学习的准确性将随时间推移逐步提高。
![该图表显示了多个温度传感器和一个表盘作为物联网设备的输入,物联网设备与云有两条通路,云又与电话、日历和天气服务有两条通路,并控制加热器作为物联网设备的输出](../../../images/smarter-thermostat.png)
✅ 还有哪些数据可以帮助连接互联网的恒温器更智能?
### 边缘物联网
虽然物联网中的 I 代表网络,但这些设备不是必须连接到互联网。在某些情况下,设备可以连接到“边缘”设备 - 即在本地网络上运行的网关设备,这意味着你无需通过互联网进行即可处理数据。当有大量数据或网络连接速度较慢时,这可能会更快,它允许你在无法连接互联网的地方离线运行,例如在船上或在灾区应对危机时,还可保持数据的私密性。某些设备将云上创建的工具代码下发至本地运行以收集和响应数据,而无需使用互联网传输到云端再做出决策。
这方面的一个例子是智能家居设备,如 Apple HomePodAmazon Alexa 或 Google Home它们将在云上训练 AI 辨别你的声音,但在设备本地运行训练好的程序。当你说出某个单词或短语时,这些设备将被“唤醒”,然后通过互联网发送语音进行处理。设备将在适当的时间点停止发送语音,例如当它检测到语音暂停时。你在使用唤醒词唤醒设备之前说的内容,和在设备停止监听后说的内容都不会通过互联网发送给设备提供商,因此这些数据是私密的。
✅ 想想侧重隐私性的其他场景,这些场景下数据处理最好在边缘而非云中完成。提示 - 考虑带有摄像头或其他成像设备的物联网设备。
### 物联网安全
对于任何互联网连接安全性都是一个重要的考虑因素。有一个古老的笑话“物联网中的S代表安全” - 当然物联网中没有“S”这意味着它并不安全。
物联网设备会连接到云服务,因此安全性与该云服务一致 - 如果你的云服务允许任意设备连接,那么有可能收到恶意数据或者被病毒攻击。当物联网设备交互和控制其他设备时,则会产生非常严重的后果。例如,震网病毒通过操纵离心机中的阀门来实施破坏。黑客还会攻击婴儿监视器或其他家庭监控等安全防护薄弱的设备。
> 💁 有时物联网设备和边缘设备会运行在物理隔离网络上,以保持数据的私密性和安全性。这称为 [air-gapping](https://wikipedia.org/wiki/Air_gap_(networking))。
## 深入了解微控制器
在上一课中,我们介绍了微控制器。现在让我们更深入地介绍它们。
### CPU
CPU 是微控制器的“大脑”。它是运行代码的处理器可以向任何连接的设备收发数据。CPU 可以包含一个或多个内核 - 实质上是一个或多个 CPU 可以协同工作运行代码。
CPU 依靠时钟每秒滴答数百万或数十亿次。每个时钟周期都会同步 CPU 可以执行的操作。每次时钟滴答时CPU 都可以执行来自程序的指令,例如从外部设备检索数据或执行数学计算。此常规循环会在处理下一条指令之前完成所有操作。
时钟周期越快每秒可以处理的指令就越多CPU 的速度就越快。 CPU 速度以赫兹 [Hertz (Hz)](https://wikipedia.org/wiki/Hertz) 为单位, 这是一个标准单位,其中 1 Hz 表示每秒一个时钟周期。
> 🎓 CPU速度通常以MHz或GHz为单位1MHz是100万Hz1GHz是10亿Hz。
> 💁 CPU 使用 [获取-解码-执行周期](https://wikipedia.org/wiki/Instruction_cycle) 执行程序。 对于每个时钟滴答CPU 将从内存中获取下一条指令,对其进行解码,然后执行它,例如使用算术逻辑单元 ALU 将 2 个数字相加。某些执行需要多次滴答才能运行,因此下一个周期将在指令完成后的下一个时钟滴答运行。
![该取码解码执行周期图显示了从存储在RAM中的程序中获取指令然后在CPU上解码执行](../../../images/fetch-decode-execute.png)
微控制器的时钟速度比台式机或笔记本甚至大多数智能手机低得多。例如Wio 终端的 CPU 以120MHz或每秒 120000000个周期运行。
✅ 普通的 PC 或 Mac 的 CPU 具有多个内核,以多千兆赫兹运行,这意味着时钟每秒滴答数十亿次。研究计算机的时钟速度,并比较它比 Wio 终端快多少倍。
每个时钟周期都会消耗功率并产生热量。滴答声越快消耗的功率和产生的热量就越多。PC 具有散热器和风扇来散热否则它们会在几秒钟内因过热而关闭。微控制器通常两者都没有因为运行温度低得多因此速度也慢得多。PC 使用主电源或大电池运行几个小时,微控制器可以使用小型电池运行数天,数月甚至数年。微控制器还能以不同速率运行内核,当对 CPU 的需求较低时,将切换到较慢的低功耗模式。
> 💁 一些 PC 和 Mac 采用相同的快速高功率和较慢低功耗模式组合以节省电量。例如,最新的 Apple 笔记本电脑中的 M1 芯片可以在4个性能核心和4个效率核心之间切换以根据正在运行的任务优化电池寿命或速度。
✅ 做点研究:阅读[维基百科上的CPU文章](https://wikipedia.org/wiki/Central_processing_unit)
#### 任务
查阅 Wio 终端资料。
如果你使用 Wio 终端实现此课程开发,可尝试寻找其 CPU 位置。找到 [Wio 终端产品页面](https://www.seeedstudio.com/Wio-Terminal-p-4509.html) 的 *硬件概述* 部分以获取内部结构的图片,并尝试通过背面的透明塑料窗口找到 CPU。
### 内存
微控制器通常有两种类型的存储器 - 程序存储器和随机存取存储器RAM
程序存储器具有非易失性,这意味着当设备断电时,写入它的内容都会被保留。这是存储程序代码的内存。
RAM 随机存取存储器是程序用于运行时的内存包含程序分配的变量和从外围设备收集的数据。RAM 具有易失性,当断电时内容会丢失,状态会被重置。
> 🎓 程序存储器存储你的代码,并在断电时保留。
> 🎓 RAM 用于运行程序,并在断电时重置。
与 CPU 一样,微控制器上的内存比 PC 或 Mac 小几个数量级。一台典型的电脑可能有 8 千兆字节 GB 的 RAM即 8000000000 字节,每个字节的空间足以存储一个字母或 0-255 之间的数字。微控制器只有千字节 KB 的 RAM千字节为 1000 字节。上面提到的 Wio 终端只具有 192KB 的 RAM即192000字节 - 比普通 PC 少40000倍以上
下图显示了 192KB 和 8GB 之间的相对大小差异 - 中间的点表示 192KB。
![192KB和8GB之间的比较-差距超过40000倍](../../../images/ram-comparison.png)
程序存储也比 PC 小。典型的 PC 可能具有用于程序存储的500GB硬盘驱动器而微控制器可能只有千字节或几兆字节MB的存储空间1MB是1000KB或1000000字节。Wio 终端有4MB的程序存储空间。
✅ 做点研究:你的计算机有多少 RAM 和存储空间?与微控制器相比如何?
### 输入/输出
微控制器需要输入和输出I/O连接从传感器读取数据并将控制信号发送到执行器。它们通常包含多个通用输入/输出 GPIO 引脚。这些引脚可以在软件中配置为输入(即接收信号)或输出(发送信号)。
🧠⬅️ 输入引脚用于读取传感器值
🧠➡️ 输出引脚向执行器发送指令
✅ 你将在后续课程中了解此内容的更多信息。
#### 任务
查阅 Wio 终端资料。
如果你使用 Wio 终端实现此课程开发可尝试寻找其GPIO引脚。找到 [Wio 终端产品页面](https://www.seeedstudio.com/Wio-Terminal-p-4509.html) 的 *引脚排列图* 部分了解引脚用途。Wio 终端带有一个贴纸,你可以将引脚号贴在背面,如果没有,请立即添加。
### 物理尺寸
微控制器通常尺寸较小,[Freescale Kinetis KL03 MCU 可以藏入高尔夫球中](https://www.edn.com/tiny-arm-cortex-m0-based-mcu-shrinks-package/)。PC 中仅CPU就有 40毫米 x 40毫米这还不包括散热所需的散热器和风扇这比完整的微控制器尺寸大得多。带有微控制器、外壳、屏幕以及一系列连接和组件的 Wio 终端开发套件并不比裸露的英特尔 i9 CPU 大多少,更比带有散热器和风扇的 CPU 小得多!
| 设备 | 尺寸 |
| ------------------------------- | -------------------------- |
| Freescale Kinetis KL03 | 1.6 毫米 x 2 毫米 x 1 毫米 |
| Wio 终端 | 72 毫米 x 57 毫米 x 12 毫米 |
| Intel i9 CPU, 散热器和风扇 | 136毫米 x 145毫米 x 103毫米 |
### 架构和操作系统
由于其低速度和内存限制微控制器不能运行桌面意义上的操作系统OS。PC 运行的操作系统WindowsLinux或macOS需要大量的内存和处理能力来运行微控制器完全不需要的任务。请记住微控制器通常被编程来完成一个或多个特定任务这与 PC 或 Mac 等通用计算机不同,后者需要支持用户界面、播放音乐或电影、提供编写文档或代码的工具、玩游戏或浏览互联网。
在没有操作系统的情况下对微控制器进行编程,确实需要一些工具,这些工具通过 API 来与外设通信,以达到构建代码的目的。每个微控制器都是不同的,因此制造商通常需支持标准架构,这些架构遵循标准“配方”来构建代码,并实现在支持该架构的任何微控制器上运行。
你可以使用操作系统(通常称为实时操作系统 RTOS )对微控制器进行编程,因为它们旨在实时处理与外设间的数据收发。这些操作系统是轻量级的,可提供以下功能:
* 多线程,允许你的代码同时运行多个代码块,无论是在多个内核上还是在一个内核上轮流执行
* 允许通过互联网地进行安全通信
* 图形用户界面 GUI 组件,用于在具有屏幕的设备上构建用户界面 UI
✅ 了解一些不同的RTOS: [Azure RTOS](https://azure.microsoft.com/services/rtos/?WT.mc_id=academic-17441-jabenn), [FreeRTOS](https://www.freertos.org), [Zephyr](https://www.zephyrproject.org)
#### Arduino
![Arduino 的 logo](../../../images/arduino-logo.svg)
[Arduino](https://www.arduino.cc) 可能是最受欢迎的微控制器框架尤其是在学生业余爱好者和创客中。Arduino 是一个结合软件和硬件的开源电子平台。您可以从 Arduino 官方或其他制造商处购买 Arduino 兼容板,然后使用 Arduino 框架进行开发。
Arduino 开发板使用 C 或 C++ 编码。使用 C/C++ 可以编译教小的代码且运行速度快这是在资源受限设备如微控制器上所需要的。Arduino 应用程序的核归纳为两个功能模块 - `setup``loop`当开发板启动时Arduino 框架代码将运行 `setup` 功能模块,然后循环运行 `loop` 直到断电。
你可以将启动代码写在 `setup` 函数中,例如连接到 WiFi 和云服务或初始化输入和输出引脚。然后,将处理代码写入 `loop` 循环,例如从传感器读取数据并发送到云。通常会在每次循环中包含一个延迟,例如,如果只希望传感器数据每 10 秒发送一次,则可以在环路结束时添加 10 秒的延迟以便微控制器休眠节省功耗10 秒后再次循环。
![Arduino 开机首先执行 setup 函数, 然后循环执行 loop 函数](../../../images/arduino-sketch.png)
✅ 此程序体系结构称为 *事件循环**消息循环*。许多应用程序在后台使用该结构,该结构也是 WindowsmacOS 或 Linux 等操作系统上大多数桌面应用的标准。监听来自用户界面组件(如按钮)或设备(如键盘)的消息,并对其进行响应。可以在[这篇文章](https://wikipedia.org/wiki/Event_loop)中阅读有关事件循环的更多信息。
Arduino 提供了用于与微控制器和 I/O 引脚交互的标准库,在不同的微控制器上有不同的实现。例如,延迟函数将暂停程序一段时间,[`digitalRead` 函数](https://www.arduino.cc/reference/en/language/functions/digital-io/digitalread/)将从给定引脚读取数据,而无论代码在哪个板上运行。这些标准库意味着在一个 Arduino 开发板编写的代码可以在其他 Arduino 开发板上重新编译运行,只要引脚正确且开发板支持相同功能。
有一个庞大的第三方 Arduino 库生态系统,可为 Arduino 项目添加额外的功能,例如使用传感器和执行器或连接到云物联网服务。
##### 任务
查阅 Wio 终端资料。
如果使用 Wio 终端进行课程开发,请重新阅读你在上一课程中编写的代码。找到 `setup``loop` 函数,观察重复调用循环函数的串口输出。尝试向 `setup` 函数添加代码在串口输出,并观察是否每次重启时会重新执行一次此代码。使用侧面的电源开关重启设备,并观察此代码是否在每次重启时调用。
## 深入了解单板计算机
在上一课程中,我们介绍了单板计算机。现在让我们更深入地研究它们。
### 树莓派
![树莓派 logo](../../../images/raspberry-pi-logo.png)
树莓派基金会是来自英国的慈善机构成立于2009年旨在促进计算机科学研究特别是学校层面。作为这项任务的一部分他们开发了一种单板计算机称为Raspberry Pi (树莓派)。树莓派目前有 3 种版本 - 全尺寸版本、尺寸较小的树莓派 Zero 和可以内置到物联网终端设备中的计算模块。
![树莓派 4](../../../images/raspberry-pi-4.jpg)
截至目前全尺寸树莓派最新版本是树莓派 4B。它有一个四核4 核CPU运行在 1.5GHz、2、4 或 8GB RAM、千兆以太网、WiFi、2 个支持 4k 屏幕的 HDMI 端口、一个音频和复合视频输出端口、USB 端口2 个 USB 2.0、2 个 USB 3.0、40 个 GPIO 引脚、一个用于树莓派相机模块的相机连接器和一个 SD 卡插槽。所有这些都在一块 88毫米 x 58毫米 x 19.5毫米 的开发板上,由 3A USB-C 电源供电。起价为35美元比 PC 或 Mac 便宜得多。
> 💁 还有一个 Pi 400 一体机,键盘内置 Pi 4。
![树莓派 Zero](../../../images/raspberry-pi-zero.jpg)
树莓派 Zero要小得多功耗更低。它具有单核1GHz CPU512MB内存WiFi在Zero W型号中单个HDMI端口微型USB端口40个GPIO引脚树莓派相机模块的相机连接器和SD卡插槽。它的尺寸为 65毫米 x 30毫米 x 5毫米功耗极低。Zero是5美元WiFi版本是10美元。
> 🎓 这两种开发板中的 CPU 都是 ARM 架构,而不是大多数 PC 和 Mac 中的 Intel / AMD x86 或 x64 架构。这类似于某些微控制器以及几乎所有手机微软Surface X 和 基于Apple Silicon 的新 Apple Mac 中的 CPU。
树莓派的所有版本都可运行一个名为树莓派 OS 的 Debian Linux 分支系统。这是没有桌面的精简版非常适合不需要屏幕的“无头”项目也可运行具有完整桌面环境的版本其带有Web浏览器办公应用程序编码工具和游戏。由于该操作系统基于 Debian Linux你可以安装任何 ARM 架构下 Debian 的应用程序或工具。
#### 任务
查询树莓派相关资料。
如果你在此课程中使用树莓派作开发,请研究开发板上的不同硬件组件。
* 可以在[树莓派硬件文档页面](https://www.raspberrypi.org/documentation/hardware/raspberrypi/)上找到有关所用处理器的详细信息。查阅你正在使用的树莓派中的处理器信息。
* 找到 GPIO 引脚。使用[树莓派 GPIO文档](https://www.raspberrypi.org/documentation/hardware/raspberrypi/gpio/README.md)中阅读有关的更多信息。使用[GPIO 引脚使用指南](https://www.raspberrypi.org/documentation/usage/gpio/README.md)来识别树莓派上的不同引脚。
### 单板计算机开发
单板计算机是运行完整操作系统的完整计算机。这意味着你可以使用多种编程语言、框架和工具来编写程序,这与 Arduino 一类的微控制器需要开发板架构支持不同。大多数编程语言都有可以访问 GPIO 引脚以收发来自传感器和执行器的数据。
✅ 你熟悉哪些编程语言?在 Linux 上受支持吗?
在树莓派上编写物联网应用程序的最常用语言是Python。在一个专为树莓派设计的庞大硬件生态中几乎所有硬件包括相关代码都会使用Python库。其中一些生态系统基于“帽子”扩展 - 之所以这样称呼是因为它们像帽子一样扩展在树莓派的顶部并通过一个大插座连接到40个GPIO引脚。“帽子”提供额外的功能如屏幕、传感器、遥控汽车或适配器通过其使用标准化接口扩展传感器。
### 在专业物联网部署中使用单板计算机
单板计算机用于专业的物联网部署而不仅仅是作为开发人员套件。它们提供一种有效的方法来控制硬件和运行复杂的任务比如运行机器学习模型。举个例子有一个树莓派4计算模块它可提供树莓派4的所有功能但外形紧凑且更便宜没有大多数端口旨在安装到定制硬件中。
---
## 🚀 挑战
上一课的挑战是列出尽可能多的物联网设备,这些设备位于你的家庭、学校或工作场所。对于此列表中的每个设备,你认为它们是围绕微控制器或单板计算机构建的,还是两者的混合?
## 课后小测试
[课后小测试](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/4)
## 复习与自学
* 阅读 [Arduino 入门指南](https://www.arduino.cc/en/Guide/Introduction) 了解有关 Arduino 平台的更多信息。
* 阅读 [树莓派 4 介绍](https://www.raspberrypi.org/products/raspberry-pi-4-model-b/) 了解更多关于树莓派的信息。
* 一些概念和首字母缩略词的信息可参阅《电气工程杂志》中[CPU、MPU、MCU 和 GPU 常见问题解答](https://www.eejournal.com/article/what-the-faq-are-cpus-mpus-mcus-and-gpus/)一文。
✅ 使用本文和 [硬件指南](../../../hardware.md) 中的成本信息来决定你所需的硬件平台,或者使用虚拟设备。
## 作业
[比较与对比微控制器和单板计算机](assignment.zh-cn.md)