码恋 码恋

ALL YOUR SMILES, ALL MY LIFE.

目录
为您的下一个 IoT 项目选择最佳硬件
/  

为您的下一个 IoT 项目选择最佳硬件

硬件设备连网是 IoT 的核心。IoT 设备监视并测量 “事物” 或现实物品,包括工业设备、家用电器、建筑、汽车、仓库库存商品,以及人类(在使用可穿戴设备的情况下)。

开发新 IoT 解决方案时,需要通过一个迭代式的反馈和评估过程来对软硬件组件进行设计、塑造原型并完善。诸如 Arduino 和 Raspberry Pi 之类的业余爱好者硬件平台,有助于在快速设计原型并完善的过程中领先一步,原因在于这些平台是现成的,而且需要的投资也比每次在设计迭代中设计和制造定制的_印刷电路板_ (PCB) 要少一些。作为此过程的一部分,您需要考虑自己的 IoT 应用程序的硬件需求,评估和完善为了满足这些需求而构建的 IoT 设备原型,并适当地采用现成的组件或定制组件来调整它们。

在 IoT 的背景下,设备 这个词被过度使用,它描述了针对特定用途而设计或调整的硬件。它被用于表示各个硬件组件,包括传感器和执行器,也用于表示现成的电路板,比如 Raspberry Pi,还被用于表示由若干子设备构建的定制原型和生产单元。在本文中,我将分析一些广泛使用的现成硬件选项,讨论在开发下一个 IoT 项目和为其设计原型时,为什么可能会选择这一种设备而不是另一种设备。

IoT 设备特征

随着 IoT 环境的日趋成熟,新设备和设备平台也在不断发布。您需要理解大多数 IoT 设备中常见的关键特征,才能在新设备可用时对它们进行比较和评估。

我们可以根据这些高级性能来描述 IoT 设备的特征:

  • 数据获取和控制
  • 数据处理和存储
  • 连接性
  • 电源管理

数据获取和控制

数据获取 (DAQ) 是按固定时间间隔(数据取样速度)测量实际状况,并将测量结果转换为数字读数的过程。DAQ 还涉及到信号调节和模数转换器,前者用于操作和缩放原始传感器读数,后者用于将模拟传感器读数转换为数字值,以便对它们进行处理和分析。

传感器 是测量物理变量并将它们转换为电信号(电压)的输入组件。您可以从数千种类型的现有传感器中进行选择,用它们来测量一系列变量,包括温度、湿度、压力、烟雾、瓦斯、光纤、声音、震动、气流、水流、速度、加速度、距离、GPS 位置、海拔或力,等等。但传感器并不是只能测量环境条件;本体感受传感器还能监视设备的内部状态,诸如按钮、滑块或触摸屏之类的传感器还可用于直接与设备交互,提供一个人机接口。对于每种类型的传感器,比如温度传感器,众多制造商提供了数十种备选组件,每种组件的准确性和精确度规格都稍有不同,而且每种组件都是为特定应用和操作条件而设计的,比如用在水下或用于抵抗极热和极冷条件。

传感器组件的一个重要特征是分辨率。传感器的分辨率表示传感器能可靠地读取的最小变化量,它与用于表示原始传感器读数的数值大小相关。例如,一个具有 10 位分辨率的模拟温度传感器,使用 0 到 1023 之间的数值表示温度读数。位是二进制数字,所以 10 位总共提供了 2 的 10 次方或 1024 个可能值。但实际上,传感器会受电气噪声影响,导致实际的分辨率降低。

传感器将温度等物理变量转换为电信号,而输出设备正好相反:它们将电信号转换为物理变量。输出设备包括 LED、扬声器和屏幕,以及诸如发动机和螺线管之类能移动或控制物理世界中的事物的_执行器 (actuator)_。执行器通常部署在工业 IoT 应用程序内;例如,制造中广泛采用气动线性执行器在组装过程中移动和抓住产品。

数据处理和存储

IoT 设备需要具备处理和存储数据的能力,才能对它们捕获的数据执行基本的处理、转换和分析。IoT 设备可直接处理数据,或者可以将数据传输到其他设备、网关设备、云设备或应用程序来进行聚合和分析。

边缘分析涉及到在网络边缘而不是在中心位置执行数据分析。可在设备自身上或在 IoT 设备直接连接的附近网关设备(比如路由器)上近实时地分析数据,而无需让设备将大量数据传输到上游的云服务器或数据中心来进行进一步分析。在边缘处理数据使得在收集数据时就能够对其进行聚合和过滤,仅选出最重要的数据发送给上游。最终,边缘分析既能减少上游的处理和存储需求,又能减轻网络上的负载。

IoT 应用程序的处理能力和存储取决于设备自身完成的处理工作量,而不是使用数据的服务或应用程序所完成的处理工作量。可用内存量和处理器规格(包括时钟速率和内核数量)决定了设备处理数据的速率。在将数据传输到上游之前,可以使用非易失性闪存存储器来保存数据,该存储器的容量决定了可在设备上存储的数据量。与仅执行诸如验证、标准化、缩放或转换读数(比如将原始温度读数转换为摄氏度)之类的基本数据处理的设备相比,执行边缘分析的设备需要的处理能力要高得多。

连接性

网络连接是所有 IoT 设备的界定特征之一。设备与本地的其他设备通信,并向云中的服务和应用程序发布数据。一些设备使用 802.11 (wifi)、蓝牙、RFID、蜂窝网络,或者诸如 LoRa、SigFox 或 NB-IoT 之类的低功耗广域物联网 (LPWAN) 技术来进行无线通信。有线通信适用于安装在智慧建筑、家庭自动化和工业控制系统中的固定设备,可将这些设备连接到以太网或通过有源以太网对其进行改良。串行通信也是设备之间的一种有线连接形式,它使用_通用异步收发传输器_ (UART) 或_控制器局域网_(CAN) 协议(起源于汽车行业)等标准协议。

电源管理

对于依靠电池或其他无线电源(比如太阳能)供电的便携和可穿戴 IoT 设备,电源管理特别重要。根据提供数据获取和控制、存储、处理和连网功能的相连传感器、执行器或_集成电路_ (IC) 的使用模式和电源需求,设备可能需要定期进入休眠模式或低功耗模式,以节省电量或延长电池寿命。例如,类似 Raspberry Pi 3 这样的单板计算机,在典型使用情况下大约需要 700 - 1000mA 电流才能运转。如果不断通过 WiFi 网络传输数据,或者使用设备执行大量数据处理而使设备高负荷运转时,电源消耗将处于该范围的较高水平,当设备空闲时电源消耗才会下降。如果连接了相机模块,在使用相机时,需要的电流会增加大约 250mA。传感器通常需要电源才能运行,Raspberry Pi 上的 GPIO 引脚提供了 3.3V 或 5V 电压,所有引脚上的总电流最高为 50mA,所以随着引脚上连接的组件数量的增加,设备的总体电源消耗也会增加。

用于为 IoT 项目设计原型的现有硬件类型

开发 IoT 应用程序比以往更容易,这得益于现在有越来越多低成本、商业性的硬件开发板、平台和原型设计工具包。模块化的硬件设计使得开发 IoT 应用程序更加灵活。您可以替换备用组件,试用规格略有不同的传感器,或者可以独立地升级设备的网络、数据处理或存储模块,以满足不断变化的需求。

包括微控制器和单板计算机在内的许多现有的商业性硬件设备,都是围绕_单芯片系统_ (SoC) IC 而设计。SoC 将包括数据处理、存储和网络在内的大量功能集成到一个芯片上。这种配置意味着,您会牺牲一些灵活性来换取便捷性,但幸运的是,有大量具有一系列配置的商业性设备可供选择。例如,表 1列出选择用于 IoT 项目原型设计的微控制器的技术规格,表 2对 3 种常见的_单板计算机_ (SBC) 进行了比较。

微控制器开发板

微控制器 是一种提供数据处理和存储功能的 SoC。微控制器包含一个(或多个)处理器内核、内存 (RAM,随机存取存储器),以及用于存储在微控制器上运行的自定义程序的_可擦除可编程只读寄存器_ (EPROM)。微控制器开发板 属于 PCB(印制电路板),但增加了额外的电路来支持微控制器,使对芯片进行原型设计和编程变得更方便。

传感器和执行器通过数字或模拟_通用输入/输出_ (GPIO) 引脚或硬件总线来连接到微控制器。I2C 和 SPI 等标准通信协议用于与总线上连接的组件进行设备内通信。通过采用各种标准,可以更容易地添加或替换与总线连接的组件。

Arduino (http://arduino.cc/en/Main/) 是一个开源设备平台,其制造兼容开发板和工具的社区十分活跃。不同官方 Arduino 型号 (https://www.arduino.cc/en/Products/Compare))的设备功能不同,数十种第三方兼容电路板的设备功能也有差异。表 1 中的所有设备都是兼容 Arduino 的微控制器,包括无处不在的 Arduino Uno,Particle 的 Electron(其中集成了一个蜂窝式调试解调器),以及 Espressif Systems 集成了 WiFi 的低成本、低功耗微控制器 (https://espressif.com/en/products/hardware/esp8266ex/overview) ESP8266-01。

图 1. Arduino 微控制器开发板

像 Arduino 一样,ESP8266 拥有一个活跃的采用者社区。基于 ESP8266 的著名的开发板包括 NodeMCU (http://nodemcu.com/index_en.html)、WeMos D1 (https://www.wemos.cc/) 和 AdaFruit 的 Feather Huzzah (https://learn.adafruit.com/adafruit-feather-huzzah-esp8266/overview)。开源和制造者社区已为基于 ESP8266 的开发板开发了许多备选固件,使 IoT 开发人员能使用 Lua、Python 和 JavaScript 为这些开发板编程,并支持无线 (OTA) 更新。

表 1. Uno、Electron 和 ESP82566-01 微控制器的技术规格
特征功能Arduino UnoParticle ElectronEspressif Systems ESP8266-01
数据获取和控制
GPIO 引脚6 个模拟输入引脚
14 个数字引脚 - 6 PWM12 个模拟输入引脚

2 个模拟输出引脚 
30 个数字引脚 - 15 PWM
| 2 个数字引脚
1 个模拟引脚 |
| | 逻辑电平电压 | 5V | 3.3V | 3.3V |
| 数据处理和存储 |
| | 处理器 | ATMega328PU | 32 位 STM32F205 | 32 位 Tensilica L106 |
| | 处理器速度 | 16 KHz | 120 MHz | 80 MHz |
| | 内存 | 32 kB 闪存,
1 kB EEPROM | 1 Mb 闪存,
128 kB RAM | 1 Mb |
| 连接性 |
| | 网络接口 | 默认情况下没有连接。可通过孔壁添加。 | 集成蜂窝调制解调器 (2G / 3G) | 集成 WiFi |
| 电源 |
| | 推荐电源 | 9-12V DC 0.5 - 2A 孔壁或 5V 500mA USB 或通过 VIN 引脚提供 9 - 12 V 电压 | 5V micro USB 或通过 VIP 引脚提供 3.9V-12VDC 电压 | 通过 VCC 引脚提供稳定的 3.3V 300mA 电源 |
| 其他 |
| | 尺寸 | 2.7 英寸 X 2.1 英寸 | 2.0 英寸 x 0.8 英寸 | 1.4 英寸 x 1 英寸 |
| | 典型成本 | 25 美元 | 39 - 59 美元 | 10 美元 |

要开发在兼容 Arduino 的微控制器上运行的软件,标准方法是使用 C 或 C++ 和 Arduino IDE,但是也有一些社区开发的语言绑定和可视编程工具。具有相同引脚布局且兼容 Arduino 的开发板能使用可选的第三方孔壁进行扩展,例如为了向 Arduino Uno 添加以太网端口或蓝牙。Arduino 是采用最广泛的业余爱好者微控制器开发环境,但是其他的像 Tessel (https://tessel.io/) 和 Particle.io (http://particle.io) 这样的环境原生支持,而 MicroPython 的 PyBoard (http://micropython.org) 和 WeIO (http://we-io.net/hardware/) 等开发板支持 Python。

选择兼容 Arduino 的微控制器,更容易将使用跨平台 Arduino 库和 Arduino IDE 开发的程序移植到其他兼容 Arduino 的设备上运行。您仍然需要应对一些差异,例如,Arduino Uno 使用数字 I/O 引脚上的 5V 逻辑电压(其中 0V 等于 LOW 或 OFF,5V 等于 HIGH 或 ON),但 ESP8266 和 Particle 开发板使用 3.3V 逻辑电压(3.3V 表示 HIGH)。这可能影响您对传感器或执行器组件的选择,因为一些组件仅适用于某一种开发板。将针对 5V 逻辑电压设计的传感器替换为 3.3V 逻辑电压的传感器可能会导致意外结果,也可能损坏经受不住更高电压的引脚,所以您需要添加一个逻辑电平转换器才能使移植奏效。在实现低水平硬件功能时,比如启用深度睡眠模式或使用特定协议从连接的传感器读取数据,可能需要依靠特定于设备或组件的库,这些库会导致代码更不容易移植。

单板计算机

单板计算机 (SBC) 比微控制器更进一步,因为它们允许连接键盘、鼠标和屏幕等外围设备,并提供了更多内存和更强的处理能力(例如,表 2 提供了 1.2 GHz 32 位 ARM 微处理器,而 表 1 仅提供了 8 位 16KHz 微控制器)。表 2列出了 3 种 SBC 的技术规格:Raspberry Pi 3 Model B (https://www.raspberrypi.org/)、BeagleBone Black (http://beagleboard.org/black) 和 DragonBoard 410c (https://developer.qualcomm.com/hardware/dragonboard-410c)。

图 2. Raspberry Pi 单板计算机

微控制器与单板计算机之间的区别没有固定标准。一些设备介于二者之间,比如 Onion Omega 2 (https://docs.onion.io/omega2-docs/omega2.html#omega2) 的电路板存储器和处理能力与低端 SBC 相当。还有一些混合设备,比如 UDOO Quad (http://www.udoo.org/docs/Introduction/Introduction.html),它将一个基于 ARM 的 Linux 系统与一个兼容 Arduino 的微控制器相集成。

表 2. Raspberry Pi 3、BeagleBone Black 和 DragonBoard 3 种 SBC 的技术规格
特征功能Raspberry Pi 3 Model BBeagleBone BlackQualcomm DragonBoard 410c
数据获取和控制
GPIO 引脚40 个 I/O 引脚,包括 29 个数字引脚65 个数字引脚 - 8 PWM
7 个模拟输入引脚12 个数字引脚
逻辑电平电压3.3V5V1.8V
数据处理和存储
处理器ARM Cortex A53AM335X ARM Cortex A8ARM Cortex A53
处理器速度1.2GHz1 GHz1.2 GHz
内存1 Gb4 Gb1Gb、8Gb 闪存
连接性
网络接口Wifi、以太网、蓝牙以太网,
USB 端口支持外部 WiFi/蓝牙适配器Wifi、蓝牙、GPS
电源
推荐电源5V 2.5A micro USB 端口5V 1.2A - 2A 孔壁6.5 - 18V 2A 孔壁
其他
尺寸3.4 英寸 x 2.2 英寸3.4 英寸 x 2.1 英寸3.3 英寸 x 2.1 英寸
典型成本35 美元55 美元75 美元

与微控制器一样,SBC 设备功能也可通过增加可堆叠的开发板来扩展,这些开发板在 Raspberry Pi 上被称为 hat,在 BeagleBone Black 上被称为 cape,还可以通过增加电动机控制器或模数转换器等外部模块来扩展开发板,减轻设备内置功能的限制。

许多 SBC 设备更像一台微型 PC,而且运行着嵌入式操作系统(通常是简化的 Linux 发行版)。因此,与微控制器开发板相比,对于这些设备上连接的传感器和执行器,要开发用于它们的嵌入式应用程序,有更多开发工具和语言可供选择。但是,SBC 的设置更复杂、更大、能耗更高,而且更容易出现一些问题,比如存储应用程序的 SD 卡或闪存损坏。

在微控制器开发板与单板计算机之间进行选择

要实现完整的 IoT 解决方案,尽管现有的微控制器开发板和单板计算机仅能发挥部分作用,但它们非常适合初始开发。

一种入门方式是根据应用程序的需求来考虑关键的 IoT 设备特征,然后制定以下设计决策:

  • 确定您需要的外围传感器和输出组件的类型和数量,如有必要,还需要确定这些组件的设计电路
  • 选择一个微控制器或单板设备来协同控制外围组件并从中读取数据
  • 确定您用于设备内通信的数据通信协议(例如,对微控制器与任何附加传感器之间的通信使用 I2C)
  • 选择需要用来与云服务和应用程序进行通信的网络硬件和协议

例如,为了在预算内设置一个家庭自动化系统,我选择了 Raspberry Pi Zero W,因为它是一个成本很低(约 10 美元)的小巧的 SBC 设备,而且拥有充足的处理能力和内存(1GHz ARM6 处理器和 512 MB RAM)来在设备上执行对数据处理和分析。它支持采用最高 64GB 的 microSD 闪存扩展卡来存储程序和数据。而且像 Raspberry Pi 3 一样,它配备了一个完整的 40 引脚 GPIO 端板,允许连接多个传感器,同时还支持 SPI 和 I2C 协议。它拥有板载 WiFi,可用于连接家庭网络,而且可以通过 micro-USB 从移动电源或墙插式电源供电。

随着您进一步为 IoT 设备、嵌入式软件,以及上游服务和应用程序设计原型,可以针对您的功能和非功能需求(包括性能、可靠性和安全性)来定期评估这些原型,并在必要时重新考虑这些选择。

部署 IoT 项目的 IoT 硬件需求

IoT 设备是高度专业化的,而且是为在非常特定的上下文和环境中运行而设计的,所以 IoT 的硬件需求千差万别。您最初可能使用通用的现成硬件来设计原型,但随着您继续执行这个迭代式设计和需求验证流程,最终可能针对您的需求而定制设计和开发 PCB 和组件,这些 PCB 和组件将会部署到生产 IoT 解决方案中。作为此过程的一部分,您需要考虑以下几种硬件需求:

  • 安全需求
  • 易开发性
  • 数据获取、处理和存储需求
  • 连接需求
  • 电源需求
  • 物理设备设计
  • 成本需求

安全需求

安全性是 IoT 中的一个关键元素,必须在设计和开发的所有阶段考虑安全性。即使是在原型设计期间,也必须保证设备捕获的数据的完整性和安全性。安全需求关系到 IoT 设备本身的安全、网络的加固,以及相关云服务及移动和 Web 应用程序的安全。

相关安全需求包括:

  • 确保每个设备拥有足够的处理能力和内存,以便能以发送和接收数据和消息的速率对它们进行加密和解密
  • 确保嵌入式软件开发库支持在向上游服务和应用程序执行验证时使用的授权和访问控制机制
  • 选择采用现有的设备来实现设备管理协议,以便在将新设备添加到网络时,安全地注册这些设备以免发生欺诈;此外,选择包含固件功能的现有设备,可用无线方式安全地更新安全补丁

易开发性

在原型设计期间,易开发性是另一个要优先考虑的需求,满足该需求才能快速轻松地让您的 IoT 设备正常运行,捕获数据,并与其他设备和云进行通信。

考虑 API 文档、开发工具,以及硬件制造商或开发社区所提供的支持的可访问性、可用性和质量。选择的设备要能快速轻松地编程和刷新,而且在部署时只需较少的接触,不需要配置或只需针对每个设备进行极少的配置,以便在开发 IoT 应用程序时少走弯路并节省时间。

数据获取、处理和存储需求

连接的传感器数量、捕获的数据的分辨率,以及数据采样速率,这些都决定了要处理的数据量,还会影响数据处理和存储需求。

需要保留在设备上的数据量,取决于连接设备向上游传输数据的频率。安装在智慧建筑中的始终通过电缆连接的设备,会直接向一个高度可用的服务器传输少量的原始数据,与需要处理大量突然传入的数据相比,这种设备需要的处理能力和存储空间相对较少。为了省电而每隔几小时进行连接的设备需要更大的存储空间,在连电期间将数据记录到本地。

连接需求

无线网络的连接需求包括操作范围,或者信号的传输距离,以及预计要传输的数据量和传输速率。考虑设备的容错能力,以及在断开连接后重连并重新尝试发送数据的能力。

您的硬件可能拥有集成式网络连接,比如蓝牙或 WiFi,或者可能需要通过扩展板或模块来添加此能力。可升级的外部模块能提供更高的灵活性,因为您可以选择试用不同模块来评估它们的范围和功耗。

电源需求

其他许多需求也会对设备的电源需求产生影响,这些需求包括需要的传感器数量和网络传输速率。考虑您的设备是否将连接电源,或者是否需要电池或超级电容之类的移动电源。如果需要电池,您需要知道电池的大小、重量和容量需求,以及电池是否可以重复充电、更换,或者在电池耗尽后是否应将设备丢弃。如果设备可再充电,应多久充一次,通过什么方式充电?

物理设备设计需求

物理设备设计需求包括设备的外观和大小。

还需要考虑设备将安装到哪些环境条件下,例如它是否需要防水或有坚固的外壳?例如,作为车队监控应用的一部分,安装在卡车底部的设备需要得到妥善保护,以确保它们在恶劣条件下能够继续运行;它需要防水、耐脏和抗震。

成本需求

硬件的成本包括硬件和关联组件(比如任何传感器)的初始费用,以及它们的持续操作成本,比如电源成本和更换磨损部件或缺陷组件的维护成本。您可能还需要为一些组件或设备驱动程序支付持续授权费用。在开发的早期阶段,购买少量现有的商业性开发板或 SBC 可能比生产小批量定制开发板更划算;但是,随着设备数量开始扩展到几十或几百个,专用硬件设备可能具有更大的价值优势。

结束语

在为 IoT 项目选择硬件时,没有万全之策。采用基于标准的商业性硬件,比如微控制器或单板计算机,可以在开发的早期阶段节省时间和开支,而不会缺乏灵活性。您在原型设计阶段学到的知识,能帮助您在开始部署 IoT 解决方案时制定关键的硬件设计决策。

(作者 Anna Gerber)



❤ 转载请注明本文地址或来源,谢谢合作 ❤


center