<p><strong>作者:Jacob Beningo,Digi-Key's North American Editors</strong></p>
<p>设计互联网连接产品需要掌握众多技能。开发人员必须知道如何编写嵌入式软件和构建电路板,还要了解如何保护设备安全,以及如何将设备连接到网络以便进行远程更新和管理。</p>
<p>为单个物联网产品开发原理和建立架构可能具有很大挑战,且非常耗时,成本昂贵。开发团队需要一种方法,能够快速启动开发,最大程度减少在典型设计周期中需要完成的工作,从而可以满足成本和上市时间要求。</p>
<p>现在已出现了许多不同的物联网平台可以帮助实现这一目标,但 Electric Imp 提供的平台尤其引人注目,因为该平台集成了所有必要的硬件和软件,可让开发人员快速启动开发。</p>
<p>本文将介绍 Electric Imp 物联网平台及其使用方法。</p>
<p><strong>定义 Electric Imp 物联网平台</strong></p>
<p>Electric Imp 平台是一个为开发人员提供完整物联网设备连接和管理解决方案的物联网平台。该平台包含了开发团队需要的所有构件,可帮助他们快速开发产品并投入生产。这些构件包括:</p>
<ul>
<li>全集成硬件</li>
<li>嵌入式操作系统</li>
<li>驱动器</li>
<li>API</li>
<li>云服务</li>
<li>代码库</li>
<li>安全解决方案</li>
</ul>
<p>首先,开发人员将其传感器和专有硬件连接到 Electric Imp 无线电模块,该模块不仅包含定制软件,还包含管理到 Imp Cloud 的安全连接的 ImpOS(图 1)。最终用户和开发人员都能通过移动设备使用一个称作 BlinkUp 的应用,将其 Wi-Fi 设置提供给产品或开发平台。一旦 Imp 硬件获取了 Wi-Fi 信息,即可安全地与 Imp Cloud 直接通信,还可通过云与互联网连接。</p>
<p><img alt="图 1:Electric Imp 平台提供了成熟的全集成硬件、软件、操作系统、API、云服务和安全功能,可快速将物联网设备连接到云。" data-entity-type="file" data-entity-uuid="d319c85e-4263-47a9-8d17-7a18956eea45" src="/sites/default/files/inline-images/%E5%9B%BE%201%EF%BC%9AElectric%20Imp%20%E5%B9%B3%E5%8F%B0%E6%8F%90%E4%BE%9B%E4%BA%86%E6%88%90%E7%86%9F%E7%9A%84%E5%85%A8%E9%9B%86%E6%88%90%E7%A1%AC%E4%BB%B6%E3%80%81%E8%BD%AF%E4%BB%B6%E3%80%81%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E3%80%81API%E3%80%81%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%92%8C%E5%AE%89%E5%85%A8%E5%8A%9F%E8%83%BD.jpg" /></p>
<p>图 1:Electric Imp 平台提供了成熟的全集成硬件、软件、操作系统、API、云服务和安全功能,可快速将物联网设备连接到云。(图片来源:Electric Imp)</p>
<p>使用像 Electric Imp 这样的物联网平台,可为开发人员带来多种优势:</p>
<ul>
<li>显著缩短产品上市时间</li>
<li>专注于公司的核心专业技术,而非互联网连接</li>
<li>提升产品价值并增强产品差异</li>
<li>无需构建连接基础架构和掌握相关专业知识</li>
</ul>
<p><strong>Electric Imp 硬件</strong></p>
<p>Electric Imp 硬件为开发人员提供了一组标准硬件,包括:</p>
<ul>
<li>802.11 b/g/n or a/b/g/n Wi-Fi 收发器</li>
<li>32 位 ARM® Cortex® 处理器</li>
<li>坚固耐用的嵌入式操作系统,提供故障保护固件更新</li>
<li>用户可选的 I/O 接口,例如 GPIO、PWM 和 Analog In</li>
<li>通过 SPI、UART 和 I2C 进行通信</li>
</ul>
<p>这些模块由 <a href="https://www.digikey.com.cn/zh/supplier-centers/m/murata-electronics">Mu… Electronics</a> 制造。对设计人员而言,主要的区别在于内部处理器、Wi-Fi 连接选项以及封装。例如,imp005 (<a href="https://www.digikey.com.cn/search/zh/LBWA1UZ1GC-901/IMP005-1-ND?recordI…;) 基于 320 MHz ARM Cortex-R4 处理器,可同时在 2.45 GHz 和 5 GHz 频段工作。而 imp003 (<a href="https://www.digikey.com.cn/search/zh/LBWA1ZV1CD-716/IMP003-1-ND?recordI…;) 基于 144 MHz ARM Cortex-M4F 处理器,仅可在 2.45 GHz 频段工作。它们都采用表面贴装式封装(图 2)。</p>
<p><img alt="图 2:imp005(左)和 imp003(右)模块集成了 Wi-Fi 模块和 ARM Cortex 微控制器,以最大程度地减小设备尺寸。(图片来源:Murata Electronics)" data-entity-type="file" data-entity-uuid="603715be-5339-4504-9416-adc2d4bb7107" src="/sites/default/files/inline-images/%E5%9B%BE%202%EF%BC%9Aimp005%EF%BC%88%E5%B7%A6%EF%BC%89%E5%92%8C%20imp003%EF%BC%88%E5%8F%B3%EF%BC%89%E6%A8%A1%E5%9D%97%E9%9B%86%E6%88%90%E4%BA%86%20Wi-Fi%20%E6%A8%A1%E5%9D%97%E5%92%8C%20ARM%20Cortex%20%E5%BE%AE%E6%8E%A7%E5%88%B6%E5%99%A8.jpg" /></p>
<p>图 2:imp005(左)和 imp003(右)模块集成了 Wi-Fi 模块和 ARM Cortex 微控制器,以最大程度地减小设备尺寸。(图片来源:Murata Electronics)</p>
<p>没有分线板,表面贴装式封装将难以访问。imp003 采用了 <a href="http://www.digikey.com.cn/search/zh/PartDetail?recordId=6205491">IMP003…;,它是一种简单的分线装置,包括一个 USB 接口(可供开发人员用于为设备供电)、模块编程所需的光电晶体管(使用 Electric Imp 独有的 BlinkUp 方法设置 Wi-Fi),以及一些其他支持元件(图 3)。</p>
<p><img alt="图 3:imp003 分线模块是一种低引脚数的开发板" data-entity-type="file" data-entity-uuid="48362ee0-7a3e-4bdb-9a13-62a01e0bb79b" src="/sites/default/files/inline-images/%E5%9B%BE%203%EF%BC%9Aimp003%20%E5%88%86%E7%BA%BF%E6%A8%A1%E5%9D%97%E6%98%AF%E4%B8%80%E7%A7%8D%E4%BD%8E%E5%BC%95%E8%84%9A%E6%95%B0%E7%9A%84%E5%BC%80%E5%8F%91%E6%9D%BF.jpg" /></p>
<p>图 3:imp003 分线模块是一种低引脚数的开发板,能够让开发人员轻松地熟悉和使用将用于最终产品的 Electric Imp 硬件。(图片来源:Murata Electronics)</p>
<p>imp005 分线板有些复杂,因为 imp005 模块不仅有更多的引脚数,而且还有性能更加强大的 ARM Cortex-R4 处理器(图 4)。imp005 分线板还包括了以太网支持、一个用于设备供电和连接到主机的标准 USB 接口以及光电晶体管。</p>
<p><img alt="图 4:imp005 分线模块让开发人员能够使用性能更加强大的 imp005" data-entity-type="file" data-entity-uuid="10036e62-3a58-4ae4-a348-a227f7971a6e" src="/sites/default/files/inline-images/%E5%9B%BE%204%EF%BC%9Aimp005%20%E5%88%86%E7%BA%BF%E6%A8%A1%E5%9D%97%E8%AE%A9%E5%BC%80%E5%8F%91%E4%BA%BA%E5%91%98%E8%83%BD%E5%A4%9F%E4%BD%BF%E7%94%A8%E6%80%A7%E8%83%BD%E6%9B%B4%E5%8A%A0%E5%BC%BA%E5%A4%A7%E7%9A%84%20imp005.jpg" /></p>
<p>图 4:imp005 分线模块让开发人员能够使用性能更加强大的 imp005,它包含 ARM Cortex-R4 微控制器,还包括高级连接选项,例如 USB 和以太网。(图片来源:Murata Electronics)</p>
<p><strong>使用 BlinkUp 设置 Electric Imp</strong></p>
<p>所有物联网设备面临的一个共同问题是如何利用本地 Wi-Fi 路由器信息为设备编程。Electric Imp 通过一种独特的方法解决了这个问题,它使用光电晶体管,为设备进行 SSID 和密码信息的编程。</p>
<p>平台和最终产品的用户将 Electric Imp BlinkUp 应用下载到移动设备上,然后将其网络信息输入该应用中。收到提示时,用户对准光电晶体管按一下移动设备。接着,移动设备的屏幕会闪烁一个命令序列,它可为 Electric Imp 硬件进行编程(图 5)。编程完成之后,即可开始开发工作。</p>
<p>警告!在进行网络信息编程时,不要盯着移动设备屏幕。这样可能导致剧烈头痛或癫痫发作。</p>
<p><img alt="图 5:使用 BlinkUp 应用,开发人员或用户可输入 Wi-Fi SSID 和密码" data-entity-type="file" data-entity-uuid="90870c67-a14b-4f87-bfe9-36e751d6cfdf" src="/sites/default/files/inline-images/%E5%9B%BE%205%EF%BC%9A%E4%BD%BF%E7%94%A8%20BlinkUp%20%E5%BA%94%E7%94%A8%EF%BC%8C%E5%BC%80%E5%8F%91%E4%BA%BA%E5%91%98%E6%88%96%E7%94%A8%E6%88%B7%E5%8F%AF%E8%BE%93%E5%85%A5%20Wi-Fi%20SSID%20%E5%92%8C%E5%AF%86%E7%A0%81_0.jpg" /></p>
<p>图 5:使用 BlinkUp 应用,开发人员或用户可输入 Wi-Fi SSID 和密码,并通过从移动设备到光电晶体管的一系列闪烁,轻松将这些信息传输到 Electric Imp 模块。这种方法无需蓝牙或 USB 等额外连接。(图片来源:Electric Imp)</p>
<p>开发人员将 Electric Imp 模块连接到互联网之后,该模块将向 Imp Cloud 注册一个唯一的 ID。在 BlinkUp 应用中可以找到这个 ID。这个唯一 ID 可用于标识模块身份,并将模块连接到在线开发环境。该 ID 还可用于将固件更新推送至产品以及管理设备。用户可以登录到开发环境,然后创建新的软件应用(也称为“模型”),再将模块 ID 与该模型相关联,通过这种方式将模块连接至云(图 6)。</p>
<p><img alt="图 6:要通过云将模块连接到软件模型" data-entity-type="file" data-entity-uuid="88ac525f-37d1-44c0-8344-e31fd21f0d36" src="/sites/default/files/inline-images/%E5%9B%BE%206%EF%BC%9A%E8%A6%81%E9%80%9A%E8%BF%87%E4%BA%91%E5%B0%86%E6%A8%A1%E5%9D%97%E8%BF%9E%E6%8E%A5%E5%88%B0%E8%BD%AF%E4%BB%B6%E6%A8%A1%E5%9E%8B.jpg" /></p>
<p>图 6:要通过云将模块连接到软件模型,只需查看可用 Imp 模块列表,然后将现有软件模型或新模型连接到设备即可。(图片来源:Electric Imp)</p>
<p>一旦创建好模型,开发人员即可访问在线开发环境。通过这种方式,他们可为 Electric Imp 模块编写软件和要在云中运行的代码,以便与模块进行通信。服务器和模块应用代码使用名为 Squirrel 的脚本语言编写。Squirrel 的表示法类似于 C 编程语言,因此对于大多数嵌入式开发人员而言,这种转换是非常自然的。</p>
<p>开发环境分为三个主要部分。第一个部分是服务器端代码,也称为代理代码。第二个部分是设备代码,一旦编译好脚本,即可部署到模块并由 Imp Cloud 进行管理。第三个部分是日志,可用于监控代理和设备行为,还可用于调试。</p>
<p><img alt="图 7:Electric Imp 开发环境是一种完全集成的环境" data-entity-type="file" data-entity-uuid="da9ea4ec-5c18-4df5-a06c-ff91a8eec462" src="/sites/default/files/inline-images/%E5%9B%BE%207%EF%BC%9AElectric%20Imp%20%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E6%98%AF%E4%B8%80%E7%A7%8D%E5%AE%8C%E5%85%A8%E9%9B%86%E6%88%90%E7%9A%84%E7%8E%AF%E5%A2%83.jpg" /></p>
<p>图 7:Electric Imp 开发环境是一种完全集成的环境,能够让开发人员通过单个视图,同时处理其设备固件和云软件。(图片来源:Electric Imp)</p>
<p><strong>使用闪烁 LED 程序显示“Hello World”</strong></p>
<p>在 Electric Imp 模块上构建和运行应用非常简单。我们可从较高的抽象层级,将对象分配给硬件功能。这样一来,Imp 模块和底层微控制器将变成一个黑盒。</p>
<p>开发人员采取的第一个步骤是通过终端或闪烁 LED 打印“Hello World”。我们看一下闪烁 LED 所需的代码。</p>
<p>首先,开发人员需要登录开发环境,并创建“<a href="https://electricimp.com/docs/gettingstarted/developer/helloworld/">Hello World</a>”或“Blinky”模型,然后将其分配给目标模块。如任何应用一样,开发人应该分配和配置引脚及变量。在本例中,如果 LED 连接到引脚 5,则开发人员可以编写相应代码,以配置 LED 并创建状态变量(列表 1)。</p>
<p>// Create a global variable called 'led' and assign the 'pin' object to it</p>
<p>led <- hardware.pin5;</p>
<p> </p>
<p>// Configure 'led' to be a digital output with a starting value of digital 0 (low, 0V)</p>
<p>led.configure(DIGITAL_OUT, 0);</p>
<p> </p>
<p>// Create a global variable to store current state of 'led‘</p>
<p>state <- 0;</p>
<p>列表 1:为 Electric Imp 模块编写软件非常简单,只需使用预先存在的库和 Squirrel 脚本语言即可。此脚本可配置 LED 及创建状态变量。(代码来源:Electric Imp)</p>
<p>然后可以编写简单的应用功能,让 LED 闪烁(列表 2)。</p>
<p>function blink()</p>
<p>{ </p>
<p> // Invert the value of state: </p>
<p> // when state = 1, 1-1 = 0 </p>
<p> // when state = 0, 1-0 = 1 </p>
<p> state = 1 - state; </p>
<p> </p>
<p> // Write current state to 'led' (which is pin9) </p>
<p> led.write(state); </p>
<p> </p>
<p> // Schedule the imp to wakeup in 0.5 seconds and call blink() again </p>
<p> imp.wakeup(0.5, blink);</p>
<p>}</p>
<p>列表 2:通过一组可简化开发的库,可以让 LED 闪烁或控制硬件,从而大幅缩短开发时间。在本例中,我们使用了一个简单函数来访问 LED 资源,并通过 ImpOS 将函数执行延迟 500 毫秒(代码来源:Electric Imp)</p>
<p>大功告成!这就是配置 LED 并让它在硬件上闪烁所需的全部 Squirrel 代码。LED 程序的代码长度不足十行,开发人员也不需要知道任何 ARM 内核寄存器。如此一来,便可轻松访问高级 API,从而减少开发人员的工作负担。</p>
<p><strong>将外部传感器集成到 Electric Imp 模型中</strong></p>
<p>将外部传感器和元器件集成到 Electric Imp 平台也比较简单。平台允许开发人员使用 #require 指令包括一个已经开发好的库,与 C 编程语言中的 #include 指令相似。我们已经开发了多种类型的库,可供开发人员随时使用。这些库包括:</p>
<ul>
<li>网络服务</li>
<li>实用工具</li>
<li>硬件驱动程序</li>
</ul>
<p>产品开发人员可将继电器、加速计、磁力仪等各种器件连接到 Electric Imp 模块,然后使用已为这些元器件编写的库,从而快速启动设计。这些库可从 Electric Imp 开发中心网站获取。</p>
<p><img alt="图 8:Electric Imp 提供了各种各样的库" data-entity-type="file" data-entity-uuid="cc52c8d5-c6b3-40d5-9d7b-c2489881dd6d" src="/sites/default/files/inline-images/%E5%9B%BE%208%EF%BC%9AElectric%20Imp%20%E6%8F%90%E4%BE%9B%E4%BA%86%E5%90%84%E7%A7%8D%E5%90%84%E6%A0%B7%E7%9A%84%E5%BA%93.jpg" /></p>
<p>图 8:Electric Imp 提供了各种各样的库,从启动开发的那一刻即可随时使用。这些库可以加快开发速度,让用户能够非常便利地使用常用硬件设备和软件服务。(图片来源:Electric Imp)</p>
<p><strong>Electric Imp 物联网平台使用技巧与窍门</strong></p>
<p>在使用像 Electric Imp 这样的物联网平台时,开发团队必须考虑多个注意事项。首先,Electric Imp 模块在单个封装中集成了两个主要元器件(Wi-Fi 无线电和微控制器)。这种集成可以节省成本和板空间。第二,在为产品选择元器件时,开发人员应该查看现有的硬件和驱动程序库。使用现有库有助于加快开发周期。</p>
<p>最后,开发人员必须牢记:Electric Imp 不直接连接到互联网。所有通信都必须先通过到 Imp Cloud 的安全连接方可执行。然后使用代理,将信息传送到更大范围的网络。开发人员在云侧还可以使用第三方服务库,例如数据存储和分析。应该尽可能使用库提供的现有代码。</p>
<p><strong>总结</strong></p>
<p>如果设计人员使用现有技术,并且充分利用物联网平台,他们将能非常快速地开发物联网设备。通过充分利用市场上的物联网平台,开发人员能够专注于自己的专业领域,从而将基础架构问题留给其他公司处理。正如我们所看到的那样,Electric Imp 物联网平台是一种独特而有趣的解决方案,值得我们进一步深入研究。</p>
<p>文章转载自:https://www.digikey.com.cn/zh/articles/techzone/2017/may/jumpstart-iot-…;