互联设备是IoT的核心。设备会收集数据并监控参数。从工业设备、建筑物和汽车,到动物、货物运输、管道和人员,互联设备无处不在。硬件和软件部分是通过标准设计协议为IoT应用程序设计的:规范开发、概念设计、原型、测试,以及集成到网络中的硬件和软件的部署。一些平台,如Arduino和Raspberry Pi,可以加快设计以及快速进行原型构建,而无需定制,从而缩短实施IoT配置的时间。
设计需要确定性能需求,实现这些要求所必需的硬件和软件,然后是组件的规格(商用现成(COTS)设计或定制设计),并适当考虑到运行环境及其内部使用的应用。
在我们谈到IoT时,设备是指任何获取信息和传输信息的物件。例如,管道内的压力传感器,冷藏轨道车内的温度传感器,或分布在母牛皮肤下的微小芯片,这些都是设备。设备可能独立运行,也可能与其他设备同步工作。
在本文中,我将回顾一些现成的硬件选项,以及在选择这些硬件开发下一个IoT项目时需要考虑的一些因素。
用于为IoT项目设计原型的现有硬件类型
开发IoT应用程序变得更容易了,这得益于越来越多现有的低成本、商业性硬件开发板、平台和原型设计工具包。模块化的硬件设计使得开发IoT应用程序更加灵活。随着零部件选择的增多,设计师可以更换不同规格的新传感器。或者,您可以独立地升级设备的网络、数据处理或存储模块,以满足不断变化的需求。
包括微控制器和单板计算机在内的许多现有的商业性硬件设备,都是围绕单芯片系统(SoC)集成电路而设计。SoC将数据处理、存储和联网等功能集成到一个芯片上。这种配置意味着,您会牺牲一些灵活性来换取便捷性,但幸运的是,有大量具有一系列配置的商业性设备可供选择。例如,表1列出了选择用于IoT项目原型设计的微控制器的技术规格,并对3种常见的单板计算机(SBC)进行了比较。
微控制器开发板
微控制器是一种提供数据处理和存储功能的SoC。微控制器包括一个(或多个)处理器内核、内存(RAM),以及用于存储在微控制器上运行的自定义程序的可擦除可编程只读存储器(EPROM)。微控制器开发板属于PCB,但增加了额外的电路来支持微控制器,使对芯片进行原型设计和编程变得更方便。
传感器和执行器通过数字或模拟通用输入/输出(GPIO)引脚或通过硬件总线连接到微控制器。I2C和SPI等标准通信协议用于与总线上连接的组件进行设备内通信。通过采用各种标准,可以更容易地添加或替换与总线连接的组件。
Arduino是一个开源设备平台,其制造兼容开发板和工具的社区十分活跃。不同官方Arduino型号的设备功能不同,数十种第三方兼容电路板的设备功能也有差异。表1中的设备都是兼容Arduino的微控制器,包括无处不在的Arduino Uno、Particle的Electron(其中集成了一个蜂窝式调制解调器),以及Espressif Systems集成了WiFi的低成本、低功耗微控制器ESP8266-01。
像Arduino一样,ESP8266拥有一个活跃的采用者社区。基于ESP8266的著名开发板包括NodeMCU、WeMos D1以及AdaFruit的Feather Huzzah。开源和制造者社区已为基于ESP8266的开发板开发了许多备选固件,使IoT开发者能使用Lua、Python和JavaScript为这些开发板编程,并支持无线(OTA)更新。
表1:Arduino Uno、Particle Electron和Espressif Systems ESP8266-01微控制器技术规格
要开发在兼容Arduino的微控制器上运行的软件,标准方法是使用C或C++和Arduino IDE,但是也有一些社区开发的语言绑定和可视编程工具。具有相同引脚布局且兼容Arduino的开发板能使用可选的第三方孔壁进行扩展,例如为了向Arduino Uno添加以太网端口或蓝牙。Arduino是采用最广泛的业余爱好者微控制器开发环境,但像Tessel这样的开发环境原生支持JavaScript,而MicroPython的PyBoard和WeIO等开发板则支持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.2GHz 32位ARM微处理器,而表1仅提供了8位16KHz微控制器)。表2列出了以下三个SBC的技术规格:Raspberry Pi4、BeagleBone®Black和DragonBoard 410c。
微控制器与单板计算机之间的区别没有固定标准。一些设备介于二者之间,比如Onion Omega 2的板载内存和处理能力与低端SBC相当。还有一些混合设备,比如UDOO Quad,它将基于ARM的Linux系统与兼容Arduino的微控制器相集成。
表2:Raspberry Pi 4、BeagleBone®Black和 DragonBoard 3种SBC的技术规格
与微控制器一样,SBC设备功能也可通过增加可堆叠的开发板来扩展,这些开发板在Raspberry Pi上被称为hat,在BeagleBone®Black上被称为cape,还可以通过增加电动机控制器或模数转换器等外部模块来扩展开发板,减轻设备内置功能的限制。
许多SBC设备更像一台微型PC,而且运行着嵌入式操作系统(通常是简化的Linux发行版)。因此,与微控制器开发板相比,对于这些设备上连接的传感器和执行器,要开发用于它们的嵌入式应用程序,有更多开发工具和语言可供选择。但是,SBC的设置更复杂、更大、能耗更高,而且更容易出现一些问题,比如存储应用程序的SD卡或闪存损坏。
在微控制器开发板和单板计算机之间进行选择
尽管现有的微控制器开发板和单板计算机可能只能在IoT解决方案中发挥部分作用,但它们是初始开发的理想选择。
一种入门方式是根据应用程序的需求来考虑关键的IoT设备特征,然后制定以下设计决策:
确定您需要的外围传感器和输出组件的类型和数量,如有必要,还需要确定这些组件的设计电路
选择一个微控制器或单板设备来协同控制外围组件并从中读取数据
确定您用于设备内通信的数据通信协议(例如,对微控制器与任何附加传感器之间的通信使用I2C)
选择需要用来与云服务和应用程序进行通信的网络硬件和协议
例如,要在预算内设置一个家庭自动化系统,您可以选择Raspberry Pi Zero W,因为它是一个成本非常低的小巧的SBC设备,而且拥有充足的处理能力和内存(1GHz ARM6处理器和512MB RAM)来在设备上执行数据处理和分析。它支持采用最高64GB的microSD闪存扩展卡来存储程序和数据。而且像Raspberry Pi 4一样,它配备了一个完整的40引脚GPIO端板,允许连接多个传感器,同时还支持SPI和I2C协议。它拥有板载WiFi,可用于连接家庭网络,而且可以通过micro-USB从移动电源或墙插式电源供电。
随着您在IoT架构设计方面的深入,您可以停下来,将您的预期性能与设计意图进行比较。进行设备设计和原型设计,选择嵌入式软件,选择上游服务和应用程序,然后停下来对其进行评估。您可以根据功能需求和非功能需求(包括性能、可靠性和安全性)定期评估原型,并在必要时重新考虑这些选择。
部署IoT项目的硬件要求
IoT设备是高度专业化的,而且是为在非常特定的上下文和环境中运行而设计的。所以IoT项目的硬件千差万别。虽然可以通过通用的现成硬件进行原型设计,但最终您可以根据IoT解决方案的要求着手设计和开发定制PCB和组件。作为此过程的一部分,您需要考虑以下几种硬件需求。
安全需求:安全是IoT的关键要素。在设计和开发的所有阶段都必须考虑到这一点。即使是在原型设计期间,也必须保证设备捕获的数据的完整性和安全性。安全需求适用于IoT设备本身、网络以及云、移动和Web服务应用。
相关安全需求包括:
确保每个设备拥有足够的处理能力和内存,以便能以发送和接收数据和消息的速率对它们进行加密和解密;
确保嵌入式软件开发库支持在向上游服务和应用程序执行验证时使用的授权和访问控制机制;
选择采用现有的设备来实现设备管理协议,以便在将新设备添加到网络时,安全地注册这些设备以免发生欺诈;此外,选择包含固件功能的现有设备,可用无线方式安全地更新安全补丁。
易开发性:在原型设计期间,易开发性是另一个要优先考虑的需求,满足该需求才能快速轻松地让您的IoT设备正常运行,捕获数据,并与其他设备和云进行通信。
考虑API文档、开发工具,以及硬件制造商或开发社区所提供的支持的可访问性、可用性和质量。选择的设备要能快速轻松地编程和刷新,而且在部署时只需较少的接触,不需要配置或只需针对每个设备进行极少的配置,以便在开发IoT应用程序时少走弯路并节省时间。
数据获取、处理和存储需求:连接的传感器数量、捕获的数据的分辨率,以及数据采样速率,这些都决定了要处理的数据量,还会影响数据处理和存储需求。
需要保留在设备上的数据量,取决于连接设备向上游传输数据的频率。安装在智慧建筑中的始终通过电缆连接的设备,会直接向一个高度可用的服务器传输少量的原始数据,与需要处理大量突然传入的数据相比,这种设备需要的处理能力和存储空间相对较少。为了省电而每隔几小时进行连接的设备需要更大的存储空间,在连电期间将数据记录到本地。
连接需求:无线网络的连接需求包括操作范围,或者信号的传输距离,以及预计要传输的数据量和传输速率。考虑设备的容错能力,以及在断开连接后重连并重新尝试发送数据的能力。您的硬件可能拥有集成式网络连接,比如蓝牙或WiFi,或者可能需要通过扩展板或模块来添加此能力。可升级的外部模块能提供更高的灵活性,因为您可以选择试用不同模块来评估它们的范围和功耗。
电源需求:其他许多需求也会对设备的电源需求产生影响,这些需求包括需要的传感器数量和网络传输速率。考虑您的设备是连接电源,还是需要需要电池或超级电容之类的移动电源。如果需要便携式电源(如电池),那么您需要了解电池的大小、重量和容量需求,以及电池是否可以重复充电、更换,或者在电池耗尽后是否应丢弃。如果设备可再充电,应多久充一次,通过什么方式充电?
物理设备设计需求:物理设备设计需求包括设备的外观和大小。
还需要考虑设备将安装到哪些环境条件下,例如它是否需要防水或有坚固的外壳?例如,作为车队监控应用的一部分,安装在卡车底部的设备需要得到妥善保护,以确保它们在恶劣条件下能够继续运行;它需要防水、耐脏和抗震。
成本需求:硬件的成本包括硬件和关联组件(比如任何传感器)的初始费用,以及它们的持续操作成本,比如电源成本和更换磨损部件或缺陷组件的维护成本。还要考虑某些组件或设备驱动程序的版权费。购买商用的现成开发板或SBC可能比制造定制板更经济。如果您通过许多设备扩展IoT网络,那么专用硬件设备可能是更明智的选择。
每种应用和情况各有不同。在为IoT项目选择硬件时,没有万全之策。采用基于标准的商业性硬件,比如微控制器或单板计算机,可以在开发的早期阶段节省时间和开支,而不会牺牲灵活性。您在原型设计阶段学到的知识,能帮助您在之后部署IoT解决方案时制定关键的硬件设计决策。