物联网的深入探讨 本课概述的速写笔记 速写笔记由Nitya Narasimhan绘制。点击图片查看大图。 这节课是作为Hello IoT系列的一部分,由微软Reactors教授的。这节课分为两部分视频——一小时的课程和一小时的办公时间,深入探讨课程中的部分内容并回答问题。 第2课:物联网的深入探讨 第2课:物联网的深入探讨 - 办公时间 点击上面的图片观看视频 预习测验 预习测验 引言 本课深入探讨上一课中涵盖的一些概念。 在本课中,我们将涵盖以下内容: 物联网应用的组件 微控制器的深入探讨 单板计算机的深入探讨 物联网应用的组件 物联网应用的两个组件是“互联网”和“物”。让我们详细了解一下这两个组件。 物 树莓派4 “物”的部分指的是能够与物理世界互动的设备。

速写笔记由Nitya Narasimhan绘制。点击图片查看大图。
这节课是作为Hello IoT系列的一部分,由微软Reactors教授的。这节课分为两部分视频——一小时的课程和一小时的办公时间,深入探讨课程中的部分内容并回答问题。
点击上面的图片观看视频
本课深入探讨上一课中涵盖的一些概念。
在本课中,我们将涵盖以下内容:
物联网应用的两个组件是“互联网”和“物”。让我们详细了解一下这两个组件。

“物”的部分指的是能够与物理世界互动的设备。这些设备通常是小型、低成本的计算机,运行速度较低且功耗低——例如,简单的带有几千字节RAM(而不是PC上的几GB)的微控制器,运行速度仅为几百兆赫(而不是PC上的几吉赫),但有时消耗的功率如此之少,以至于它们可以使用电池运行数周、数月甚至数年。
这些设备通过传感器从周围环境中收集数据或通过控制输出或执行器来改变物理环境。典型的例子是智能恒温器——一种具有温度传感器、设置期望温度的方法(如旋钮或触摸屏),以及连接到加热或冷却系统以在检测到的温度超出期望范围时打开或关闭的设备。温度传感器检测房间太冷,执行器会打开加热装置。

物联网设备可以是各种各样的东西,从专用硬件到通用设备,甚至是你的智能手机!智能手机可以使用传感器检测周围的环境,并使用执行器与环境互动——例如,使用GPS传感器检测位置并使用扬声器提供导航指令。
✅ 想想你周围有哪些系统读取传感器的数据并根据这些数据做出决策。一个例子是烤箱上的恒温器。你能找到更多吗?
“互联网”部分是指物联网设备可以连接的应用程序,用于发送和接收数据,以及其他可以处理来自物联网设备的数据并帮助做出决定以向物联网设备的执行器发送请求的应用程序。
一种典型设置是物联网设备连接到某种云服务,这个云服务处理诸如安全等问题,接收来自物联网设备的消息,并向设备发送消息。然后,该云服务将连接到其他应用程序,这些应用程序可以处理或存储传感器数据,或者使用传感器数据与其他系统的数据结合来做出决策。
设备并不总是直接通过WiFi或有线连接连接到互联网。一些设备使用网状网络通过蓝牙等技术相互通信,通过具有互联网连接的集线器设备进行通信。
以智能恒温器为例,恒温器将使用家庭WiFi连接到云中的云服务。它将温度数据发送到该云服务,然后将其写入某种数据库,允许房主使用手机应用程序检查当前和过去的温度。另一个位于云中的服务知道房主要求的温度,并通过云服务向物联网设备发送消息,告诉加热系统打开或关闭。

更智能的一个版本可以使用云中的AI,结合来自其他物联网设备的传感器数据(例如占用传感器,检测哪些房间被使用),以及天气数据甚至日历数据,以智能方式设置温度。例如,如果它从你的日历中读取你正在度假,它可以关闭加热;或者根据你使用的房间按房间关闭加热,随着时间的推移,从数据中学习变得更准确。

✅ 哪些其他数据可以帮助互联网连接的恒温器变得更聪明?
尽管物联网中的“I”代表互联网,但这些设备不一定需要连接到互联网。在某些情况下,设备可以连接到“边缘”设备——即在本地网络上运行的网关设备,这意味着你可以处理数据而无需通过互联网进行调用。当你有大量的数据或互联网连接较慢时,这可以更快;当无法接入互联网时(如在船上或应对人道主义危机时的灾区),它允许你离线运行;还可以让你保持数据私密。一些设备将包含使用云工具创建的处理代码并在本地运行,以收集和响应数据而无需使用互联网连接来做出决策。
一个例子是像Apple HomePod、Amazon Alexa或Google Home这样的智能家居设备,它们会使用在云端训练的AI模型,但在设备上本地运行。这些设备会在听到特定词语或短语时“唤醒”,然后才会将你的语音通过互联网发送出去进行处理。设备会在检测到适当的停顿时停止发送语音。在唤醒设备之前所说的一切,以及设备停止监听后所说的一切都不会通过互联网发送给设备提供商,因此是私有的。
✅ 思考一下,在哪些场景下隐私非常重要,因此数据处理最好在边缘而不是云端进行。提示:想想带有摄像头或其他成像设备的物联网设备。
任何互联网连接都必须考虑安全性。有一个老笑话说“物联网中的'S'代表安全”——因为物联网中没有'S',暗示它是不安全的。
物联网设备连接到云服务,因此它们的安全性仅取决于那个云服务——如果云服务允许任何设备连接,则恶意数据可能会被发送,或病毒攻击可能发生。这可能对物联网设备交互和控制其他设备造成非常现实的后果。例如,震网蠕虫操纵了离心机中的阀门,使其损坏。黑客还利用较差的安全性访问婴儿监视器和其他家庭监控设备。
有时,物联网设备和边缘设备在完全隔离于互联网的网络上运行,以保持数据的私密性和安全性。这被称为空气间隙。
在上一课中,我们介绍了微控制器。现在让我们深入探讨它们。
中央处理器是微控制器的“大脑”。它是运行你的代码并可以向任何连接的设备发送和接收数据的处理器。中央处理器可以包含一个或多个核心——本质上是一起运行你的代码的一个或多个处理器。
中央处理器依靠时钟每秒跳动数百万次或数十亿次。每次跳动或周期,同步处理器可以采取的操作。每次跳动时,中央处理器都可以执行程序中的指令,例如从外部设备检索数据或执行数学计算。这种有规律的循环允许所有操作在处理下一个指令之前完成。
时钟频率越快,每秒可以处理的指令越多,因此中央处理器的速度越快。中央处理器的速度以赫兹(Hz)为单位测量,标准单位1 Hz表示每秒一次跳动或时钟滴答。
中央处理器的速度通常以MHz或GHz给出。1MHz是1百万Hz,1GHz是10亿Hz。
中央处理器使用取指-译码-执行周期执行程序。对于每次时钟跳动,中央处理器都会从内存中获取下一个指令,解码它,然后执行它,例如使用算术逻辑单元(ALU)执行加法运算。有些执行需要多次时钟周期才能完成,因此下一个周期将在指令完成后在下一个时钟周期运行。

微控制器的时钟速度远低于台式机或笔记本电脑,甚至大多数智能手机。例如,Wio终端的中央处理器运行速度为120MHz,即每秒120,000,000个周期。
✅ 平均PC或Mac的CPU有多核,运行速度达到多吉赫,意味着时钟每秒跳动数十亿次。研究一下你电脑的时钟速度,并比较它比Wio终端快多少倍。
每个时钟周期都会消耗能量并产生热量。时钟频率越高,消耗的能量越多,产生的热量也越多。PC上有散热片和风扇来散热,否则它们会在几秒钟内过热并关机。微控制器通常没有这些,因为它们运行得更凉爽,因此速度更慢。PC运行的是主电源或大型电池,微控制器可以在几天、几个月甚至几年内使用小型电池运行。微控制器也可以有不同的核心,当CPU的需求较低时,切换到速度较慢的低功耗核心以减少能耗。
一些PC和Mac采用了相同的速度快、功耗高的核心和速度慢、功耗低的核心,以节省电池。例如,最新款苹果笔记本电脑中的M1芯片可以在4个性能核心和4个效率核心之间切换,以优化电池寿命或速度,具体取决于正在运行的任务。
✅ 做一点研究:阅读关于中央处理器的维基百科文章。
调查Wio终端。
如果你正在使用Wio终端进行这些课程,请尝试找到CPU。查找Wio终端产品页面的硬件概述部分,寻找内部结构的照片,并尝试通过背面的透明塑料窗口找到CPU。
微控制器通常有两种类型的内存——程序内存和随机存取内存(RAM)。
程序内存是非易失性的,这意味着无论何时断电,写入的内容都会保留。这是存储你的程序代码的内存。
RAM是程序用来运行的内存,包含程序分配的变量和从外围设备收集的数据。RAM是易失性的,当断电时,内容会被清除,有效地重置你的程序。
程序内存存储你的代码并保持即使在断电时也不会丢失。
RAM用于运行你的程序并在断电时重置。
就像中央处理器一样,微控制器上的内存比PC或Mac小几个数量级。一台典型的PC可能有8GB(GB)的RAM,即8,000,000,000字节,每个字节足以存储一个字母或0到255之间的数字。微控制器可能只有几千字节(KB)的RAM,其中1KB等于1,000字节。上述提到的Wio终端有192KB的RAM,即192,000字节——比平均PC小40,000多倍!
下面的图表显示了192KB和8GB之间的相对大小差异——中心的小点代表192KB。

程序存储空间也比PC小。一台典型的PC可能有一个500GB的硬盘用于程序存储,而微控制器可能只有几千字节或几兆字节(MB)的存储空间(1MB是1,000KB,即1,000,000字节)。Wio终端有4MB的程序存储。
✅ 做一点研究:你正在使用的电脑有多少RAM和存储空间?这与微控制器相比如何?
微控制器需要输入和输出(I/O)连接来读取传感器数据和发送控制信号给执行器。它们通常包含多个通用输入/输出(GPIO)引脚。这些引脚可以通过软件配置为输入(即它们接收信号)或输出(即它们发送信号)。
⬅️ 输入引脚用于读取传感器值
➡️ 输出引脚发送指令给执行器
✅ 你将在后续课程中进一步了解这一点。
调查Wio终端。
如果你正在使用Wio终端进行这些课程,请找到GPIO引脚。查找Wio终端产品页面的引脚图部分,了解哪些引脚对应哪些功能。Wio终端附带一个可以贴在背面的标签,上面有引脚编号,如果你还没有贴上,现在就贴上吧。
微控制器通常体积很小,最小的,比如[Freescale Kinetis KL03 MCU],小到可以放在高尔夫球凹坑里。仅CPU部分,一台PC的尺寸可达40毫米 x 40毫米,还不包括散热片和风扇,以确保CPU在几秒钟内不会过热,比完整的微控制器要大得多。Wio终端开发套件,包含微控制器、外壳、屏幕和一系列连接和组件,与裸露的Intel 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)。使你的计算机运行的操作系统(Windows、Linux或macOS)需要大量的内存和处理能力来运行对于微控制器完全不必要的任务。记住,微控制器通常被编程为执行一个或多个非常具体的任务,而不是像PC或Mac这样的通用计算机,需要支持用户界面、播放音乐或电影、提供编写文档或代码的工具、玩游戏或浏览互联网。
为了在没有操作系统的微控制器上编程,你需要一些工具,以便以微控制器可以运行的方式构建你的代码,使用可以与任何外设通信的API。每个微控制器都不同,因此制造商通常支持标准框架,允许你遵循标准的“配方”来构建你的代码,并使其在支持该框架的任何微控制器上运行。
你可以使用操作系统编程微控制器——通常称为实时操作系统(RTOS),因为这些操作系统旨在实时处理来自外设的数据。这些操作系统非常轻量级,提供了如下功能:
✅ 阅读一些不同的RTOS:Azure RTOS、FreeRTOS、Zephyr
Arduino可能是最受欢迎的微控制器框架,尤其是在学生、业余爱好者和创客中。你可以从Arduino自己或其它制造商那里购买Arduino兼容板,然后使用Arduino框架进行编程。
Arduino板使用C或C++编程。使用C/C++可以使你的代码编译得很小并且运行速度快,这对于像微控制器这样资源受限的设备来说是必需的。Arduino应用程序的核心称为草图,是C/C++代码,包含两个函数——setup 和 loop。当板启动时,Arduino框架代码会运行一次setup 函数,然后会不断重复运行loop 函数,直到电源关闭。
你可以在setup 函数中编写设置代码,例如连接WiFi和云服务或初始化输入输出引脚。然后,循环代码应包含处理代码,例如从传感器读取数据并将值发送到云。你通常会在每个循环中添加延迟,例如,如果你只想每10秒发送一次传感器数据,可以在循环末尾添加10秒的延迟,让微控制器休眠以节省电力,然后在10秒后根据需要再次运行循环。
 ✅ 这种程序架构被称为“事件循环”或“消息循环”。许多应用程序在底层使用这种架构,它是大多数运行在Windows、macOS或Linux等操作系统上的桌面应用的标准。`loop`监听来自用户界面组件(如按钮)或设备(如键盘)的消息,并作出响应。你可以在这篇关于事件循环的文章中了解更多:[事件循环](https://zh.wikipedia.org/wiki/事件循环)。 Arduino提供了一系列标准库来与微控制器和I/O引脚进行交互,这些库在不同的微控制器下有不同的实现。例如,[`delay`函数](https://www.arduino.cc/reference/en/language/functions/time/delay/)会暂停程序一段时间,而[`digitalRead`函数](https://www.arduino.cc/reference/en/language/functions/digital-io/digitalread/)会从给定引脚读取高电平或低电平值,无论代码在哪个板上运行。这些标准库意味着为一个Arduino板编写的代码可以重新编译到任何其他Arduino板上运行,前提是引脚相同且板子支持相同的特性。 有一个庞大的第三方Arduino库生态系统,允许你在Arduino项目中添加额外的功能,比如使用传感器和执行器,或者连接到云IoT服务。 ##### 任务 研究Wio终端。 如果你正在使用Wio终端进行这些课程,请重新阅读上一课中编写过的代码。找到`setup`和`loop`函数。监控循环函数被反复调用时的串行输出。尝试向`setup`函数添加代码以写入串口,并观察此代码仅在每次重启时调用一次。尝试通过侧面的电源开关重启设备,以展示每次设备重启时都会调用该函数。 ## 单板计算机深入研究 在上一课中,我们介绍了单板计算机。现在让我们更深入地了解它们。 ### Raspberry Pi  [Raspberry Pi基金会](https://www.raspberrypi.org)是一家成立于2009年的英国慈善机构,旨在推广计算机科学的研究,特别是在学校层面。作为其使命的一部分,他们开发了一款名为Raspberry Pi的单板计算机。目前有三种Raspberry Pi型号——全尺寸版、较小的Pi Zero和可嵌入最终IoT设备的计算模块。  全尺寸Raspberry Pi的最新版本是Raspberry Pi 4B。它拥有四核(4核心)CPU,运行频率为1.5GHz,2GB、4GB或8GB的RAM,千兆以太网,Wi-Fi,两个支持4K屏幕的HDMI端口,音频和复合视频输出端口,USB端口(2个USB 2.0,2个USB 3.0),40个GPIO引脚,一个用于Raspberry Pi相机模块的摄像头接口,以及一个SD卡插槽。整个板子尺寸为88mm x 58mm x 19.5mm,由3A USB-C电源供电。这些设备起价35美元,远低于PC或Mac的价格。 > 还有一款Pi400一体机,将Pi4集成到了键盘中。  Pi Zero要小得多,功耗也更低。它拥有一颗单核1GHz的CPU,512MB的RAM,Wi-Fi(在Zero W型号中),一个HDMI端口,一个micro-USB端口,40个GPIO引脚,一个用于Raspberry Pi相机模块的摄像头接口,以及一个SD卡插槽。尺寸为65mm x 30mm x 5mm,功耗极低。Zero的价格为5美元,而带Wi-Fi的W版本价格为10美元。 > 这两款设备中的CPU都是ARM处理器,而不是大多数PC和Mac中常见的Intel/AMD x86或x64处理器。这些处理器类似于一些微控制器中使用的处理器,以及几乎所有的移动电话、Microsoft Surface X和基于Apple Silicon的新款Apple Mac。 所有版本的Raspberry Pi都运行一个名为Raspberry Pi OS的Debian Linux版本。这包括没有桌面环境的轻量版,非常适合“无头”项目(不需要屏幕),以及带有完整桌面环境的全功能版本,包括网络浏览器、办公软件、编码工具和游戏。由于操作系统是基于Debian Linux的,你可以安装任何适用于Debian且针对Pi内部ARM处理器构建的应用程序或工具。 #### 任务 研究Raspberry Pi。 如果你正在使用Raspberry Pi进行这些课程,请阅读板上的不同硬件组件。 * 你可以在[Raspberry Pi硬件文档页面](https://www.raspberrypi.org/documentation/hardware/raspberrypi/)上找到所用处理器的详细信息。阅读你所使用的Pi型号的处理器信息。 * 找到GPIO引脚。在[Raspberry Pi GPIO文档](https://www.raspberrypi.org/documentation/hardware/raspberrypi/gpio/README.md)中阅读更多关于它们的信息。使用[GPIO引脚使用指南](https://www.raspberrypi.org/documentation/usage/gpio/README.md)来识别你的Pi上的不同引脚。 ### 编程单板计算机 单板计算机是完整的计算机,运行完整的操作系统。这意味着你可以使用广泛的编程语言、框架和工具来编码它们,而微控制器则依赖于对板的支持,例如Arduino框架。大多数编程语言都有可以访问GPIO引脚的库,从而可以发送和接收传感器和执行器的数据。 ✅ 你熟悉哪些编程语言?它们是否支持Linux? 在Raspberry Pi上构建IoT应用最常用的编程语言是Python。有许多专门为Pi设计的硬件,几乎所有这些硬件都包含了必要的代码,以便作为Python库使用。其中一些生态系统是基于“帽子”的——因此得名,因为它们像帽子一样放在Pi上,并通过一个大插座连接到40个GPIO引脚。这些帽子提供了额外的功能,如屏幕、传感器、遥控车或适配器,使你能够使用标准化电缆连接传感器。 ### 单板计算机在专业IoT部署中的应用 单板计算机不仅作为开发套件使用,在专业IoT部署中也有广泛应用。它们可以提供强大的方式来控制硬件并运行复杂的任务,例如运行机器学习模型。例如,有一种[Raspberry Pi 4计算模块](https://www.raspberrypi.org/blog/raspberry-pi-compute-module-4/),它提供了与Raspberry Pi 4相同的强大功能,但采用了紧凑且更便宜的形式,去除了大部分端口,设计用于嵌入自定义硬件中。 --- ## 挑战 上一课的挑战是列出你家中、学校或工作场所中的所有IoT设备。对于列表中的每一种设备,你觉得它们是基于微控制器还是单板计算机,甚至两者兼有? ## 课后测验 [课后测验](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/4) ## 复习与自学 * 阅读[Ardunio入门指南](https://www.arduino.cc/en/Guide/Introduction),了解更多关于Arduino平台的知识。 * 阅读[Raspberry Pi 4介绍](https://www.raspberrypi.org/products/raspberry-pi-4-model-b/),了解更多关于Raspberry Pi的知识。 * 阅读一些概念和缩写的介绍,例如在《电子工程杂志》中的[什么是CPU、MPU、MCU和GPU](https://www.eejournal.com/article/what-the-faq-are-cpus-mpus-mcus-and-gpus/)文章。 ✅ 使用这些指南,结合[硬件指南](../../../hardware.md)中提供的链接所示的成本,决定你想要使用的硬件平台,或者你是否更愿意使用虚拟设备。 ## 作业 [比较和对比微控制器和单板计算机](assignment.md)
声明:
本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。