使用 Node.js 将 Raspberry Pi 3 连接到远程监控解决方案并启用远程固件更新

本教程演示如何使用适用于 Raspberry Pi 3 的 Microsoft Azure IoT 初学者工具包完成以下任务:

  • 开发可与云通信的温度和湿度读取器。
  • 启用并执行远程固件更新以更新 Raspberry Pi 上的客户端应用程序。

本教程使用:

  • Raspbian OS、Node.js 编程语言和 Azure IoT SDK for Node.js 实现示例设备。
  • IoT 套件远程监控预配置解决方案作为基于云的后端。

概述

本教程会完成以下步骤:

  • 将远程监控预配置解决方案的实例部署到 Azure 订阅。 此步骤会自动部署并配置多个 Azure 服务。
  • 将设备和传感器设置为与计算机和远程监控解决方案通信。
  • 更新用于连接到远程监控解决方案的示例设备代码,并发送可在解决方案仪表板上查看的遥测数据。
  • 使用示例设备代码更新客户端应用程序。

先决条件

需要有效的 Azure 订阅才能完成此教程。

Note

如果没有帐户,只需花费几分钟就能创建一个试用帐户。 有关详细信息,请参阅 Azure 试用

所需软件

需要在台式机上安装 SSH 客户端,然后才能远程访问 Raspberry Pi 上的命令行。

  • Windows 不包括 SSH 客户端。 建议使用 PuTTY
  • 大多数 Linux 发行版和 Mac OS 包括命令行 SSH 实用工具。 有关详细信息,请参阅 SSH Using Linux or Mac OS(使用 Linux 或 Mac OS 的 SSH)。

所需硬件

一个台式机,用于通过远程方式连接到 Raspberry Pi 上的命令行。

适用于 Raspberry Pi 3 的 Microsoft IoT 初学者工具包或等效组件。 本教程使用工具包中的以下项目:

  • Raspberry Pi 3
  • MicroSD 卡(带 NOOBS)
  • USB 迷你电缆
  • 以太网电缆
  • BME280 传感器
  • 试验板
  • 跳线
  • 电阻
  • LED

预配解决方案

如果尚未在帐户中预配远程监视预配置解决方案,请执行以下步骤:

  1. 使用 Azure 帐户凭据登录到 azureiotsuite.cn,然后单击“+”创建解决方案。
  2. 单击“远程监视”磁贴上的“选择”。
  3. 为远程监视预配置解决方案输入 解决方案名称
  4. 选择要用于预配解决方案的“区域”和“订阅”。
  5. 单击“创建解决方案” 开始预配过程。 运行此过程通常需要花费几分钟时间。

等待预配过程完成

  1. 单击状态为“正在预配”的解决方案磁贴。
  2. 在 Azure 订阅中部署 Azure 服务时,请注意“预配状态” 。
  3. 预配完成后,状态会更改为“就绪” 。
  4. 单击磁贴,右窗格中随即会显示解决方案的详细信息。

Note

如果在部署预配置解决方案时遇到问题,请参阅 azureiotsuite.cn 站点上的权限常见问题解答。 如果问题仍然存在,请在 门户中创建服务票证。

是否有你预期会看到但没有列出的解决方案详细信息? 请在 用户之声中向我们提供功能建议。

Warning

远程监控解决方案在 Azure 订阅中预配一组 Azure 服务。 部署反映实际企业体系结构。 要避免产生不必要的 Azure 使用费用,请在使用完预配置解决方案的实例后,在 azureiotsuite.cn 上将其删除。 如果再次需要预配置解决方案,可以轻松地重新创建它。 若要详细了解如何在远程监控解决方案运行时减少消耗,请参阅出于演示目的配置 Azure IoT 套件预配置解决方案

查看解决方案仪表板

该解决方案仪表板可让你管理部署的解决方案。 例如,可以查看遥测数据、添加设备以及调用方法。

  1. 当预配完成且预配置解决方案的磁贴指示“就绪”时,请选择“启动”,在新的选项卡中打开远程监视解决方案门户。

    启动预配置解决方案

  2. 默认情况下,此解决方案门户会显示 仪表板。 可以通过页面左侧的菜单导航到解决方案门户中的其他区域。

    远程监控预配置解决方案仪表板

添加设备

连接到预配置解决方案的设备必须能够使用有效凭据对 IoT 中心识别自身。 用户可从解决方案仪表板中检索设备凭据。 本教程后文中的客户端应用程序要采用该设备凭据。

如果尚未这样做,请向远程监视解决方案添加自定义设备。 在解决方案仪表板中完成以下步骤:

  1. 在仪表板左下角,单击“添加设备” 。

    添加设备

  2. 在“自定义设备”面板中,单击“新增”。

    添加自定义设备

  3. 选择“让我定义自己的设备 ID”。 输入设备 ID(例如“rasppi”),单击“检查 ID”验证该名称是否尚未在解决方案中使用,然后单击“创建”预配设备。

    添加设备 ID

  4. 记下设备凭据(“设备 ID”、“IoT 中心主机名”和“设备密钥”)。 Raspberry Pi 上的客户端应用程序需要这些值才能连接到远程监视解决方案。 然后单击“完成”。

    查看设备凭据

  5. 在解决方案仪表板上的设备列表中选择设备。 然后,在“设备详细信息”面板中,单击“启用设备”。 设备状态现在为“正在运行”。 远程监视解决方案现在可以从设备接收遥测数据,并在设备上调用方法。

准备 Raspberry Pi

安装 Raspbian

如果这是首次使用 Raspberry Pi,需使用工具包中随附的 SD 卡上的 NOOBS 来安装 Raspbian 操作系统。 Raspberry Pi 软件指南介绍了如何在 Raspberry Pi 上安装操作系统。 本教程假定已在 Raspberry Pi 上安装 Raspbian 操作系统。

Note

适用于 Raspberry Pi 3 的 Microsoft Azure IoT 初学者工具包随附的 SD 卡已安装 NOOBS。 可以从该卡启动 Raspberry Pi,然后选择安装 Raspbian OS。

安装硬件

本教程使用适用于 Raspberry Pi 3 的 Microsoft Azure IoT 初学者工具包中随附的 BME280 传感器生成遥测数据。 它使用 LED 来指示 Raspberry Pi 何时处理解决方案仪表板中的方法调用。

试验板上的组件包括:

  • 红色 LED
  • 220 欧电阻器(红色、红色、棕色)
  • BME280 传感器

下图显示了如何连接硬件:

Raspberry Pi 的硬件安装

下表总结了如何从 Raspberry Pi 连接到试验板上的组件:

Raspberry Pi 试验板 颜色
GND(引脚 14) LED - ve 引脚 (18A) 紫色
GPCLK0(引脚 7) 电阻器 (25A) 橙色
SPI_CE0(引脚 24) CS (39A) 蓝色
SPI_SCLK(引脚 23) SCK (36A) 黄色
SPI_MISO(引脚 21) SDO (37A) 白色
SPI_MOSI(引脚 19) SDI (38A) 绿色
GND(引脚 6) GND (35A) 黑色
3.3 V(引脚 1) 3Vo (34A) 红色

若要完成硬件设置,需执行以下操作:

  • 将 Raspberry Pi 连接到工具包中提供的电源。
  • 使用工具包中提供的以太网电缆将 Raspberry Pi 连接到网络。 也可为 Raspberry Pi 设置无线连接

现在已经完成 Raspberry Pi 的硬件设置。

登录并访问终端

可以通过两个选项来访问 Raspberry Pi 上的终端环境:

  • 如果已将键盘和显示器连接到 Raspberry Pi,则可使用 Raspbian GUI 访问终端窗口。

  • 使用台式机中的 SSH 访问 Raspberry Pi 上的命令行。

使用 GUI 中的终端窗口

Raspbian 的默认凭据为用户名 pi 和密码 raspberry。 在 GUI 的任务栏中,可以使用外观像显示器的图标启动 Terminal 实用工具。

使用 SSH 登录

可以使用 SSH 对 Raspberry Pi 进行命令行访问。 SSH(安全外壳)一文介绍了如何在 Raspberry Pi 上配置 SSH,以及如何从 WindowsLinux 和 Mac OS 进行连接。

使用用户名 pi 和密码 raspberry 登录。

可选:共享 Raspberry Pi 上的文件夹

(可选)可以将 Raspberry Pi 上的文件夹与桌面环境共享。 共享文件夹之后,即可使用偏好的桌面文本编辑器(例如 Visual Studio CodeSublime Text)在 Raspberry Pi 上编辑文件,而不必使用 nanovi

若要与 Windows 共享文件夹,请在 Raspberry Pi 上配置 Samba 服务器。 也可将内置的 SFTP 服务器与桌面上的 SFTP 客户端配合使用。

启用 SPI

在运行示例应用程序之前,必须在 Raspberry Pi 上启用串行外围设备接口 (SPI) 总线。 Raspberry Pi 通过 SPI 总线与 BME280 传感器设备通信。 使用以下命令编辑配置文件:

sudo nano /boot/config.txt

查找行:

#dtparam=spi=on
  • 若要取消注释行,请删除开头的 #
  • 保存所做的更改(按 Ctrl-O,然后按 Enter),然后退出编辑器(按 Ctrl-X)。
  • 若要启用 SPI,请重新启动 Raspberry Pi。 重新启动会断开终端的连接,需要在 Raspberry Pi 重新启动时重新登录:

    sudo reboot

下载并配置示例

现在,可以在 Raspberry Pi 上下载并配置远程监控客户端应用程序。

安装 Node.js

如果尚未这样做,请在 Raspberry Pi 上安装 Node.js。 IoT SDK for Node.js 需要版本 0.11.5 或更高版本的 Node.js。 以下步骤演示如何在 Raspberry Pi 上安装 Node.js v6.10.2:

  1. 使用以下命令更新 Raspberry Pi:

    sudo apt-get update
    
  2. 使用以下命令将 Node.js 二进制文件下载到 Raspberry Pi 上:

    wget https://nodejs.org/dist/v6.10.2/node-v6.10.2-linux-armv7l.tar.gz
    
  3. 使用以下命令安装二进制文件:

    sudo tar -C /usr/local --strip-components 1 -xzf node-v6.10.2-linux-armv7l.tar.gz
    
  4. 使用以下命令验证是否已成功安装 Node.js v6.10.2:

    node --version
    

克隆存储库

如果尚未这样做,请通过在 Pi 上运行以下命令,克隆所需的存储库:

cd ~
git clone --recursive https://github.com/Azure-Samples/iot-remote-monitoring-node-raspberrypi-getstartedkit.git

更新设备连接字符串

使用以下命令在 nano 编辑器中打开示例配置文件:

nano ~/iot-remote-monitoring-node-raspberrypi-getstartedkit/advanced/config/deviceinfo

将占位符值替换为在本教程开始时创建并保存的设备 ID 和 IoT 中心信息。

完成后,deviceinfo 文件的内容应如以下示例所示:

yourdeviceid
HostName=youriothubname.azure-devices.cn;DeviceId=yourdeviceid;SharedAccessKey=yourdevicekey

保存所做的更改(按 Ctrl-O,并按 Enter),退出编辑器(按 Ctrl-X)。

运行示例

运行以下命令以安装示例的必备组件包:

cd ~/iot-remote-monitoring-node-raspberrypi-getstartedkit/advance/1.0
npm install

现在可以在 Raspberry Pi 上运行示例程序。 输入以下命令:

sudo node ~/iot-remote-monitoring-node-raspberrypi-getstartedkit/advanced/1.0/remote_monitoring.js

以下示例输出是在 Raspberry Pi 的命令提示符下看到的输出示例:

Raspberry Pi 应用的输出

随时都可按 Ctrl-C 退出程序。

查看遥测数据

Raspberry Pi 现在正将遥测数据发送到远程监视解决方案。 可以在解决方案仪表板上查看遥测数据。 也可以从解决方案仪表板向 Raspberry Pi 发送消息。

  • 导航到解决方案仪表板。
  • 在“要查看的设备”下拉列表中选择设备。
  • 来自 Raspberry Pi 的遥测数据将显示在仪表板上。

显示来自 Raspberry Pi 的遥测数据

启动固件更新

固件更新过程会下载更新版的设备客户端应用程序并将其安装在 Raspberry Pi 上。 若要详细了解固件更新过程,请参阅使用 IoT 中心进行设备管理的概述一文中对固件更新模式的说明。

在设备上调用相应的方法即可启动固件更新过程。 该方法是异步方法,一旦更新过程开始就会返回。 设备使用报告的属性,将更新进展通知给解决方案。

可以通过解决方案仪表板调用 Raspberry Pi 上的方法。 Raspberry Pi 在首次连接到远程监视解决方案时,会发送所支持的方法的相关信息。

  1. 在解决方案仪表板中,单击“设备”即可访问“设备”页。 在“设备列表”中选择 Raspberry Pi。 然后选择“方法”:

    在仪表板中列出设备

  2. 在“调用方法”页的“方法”下拉列表中,选择“InitiateFirmwareUpdate”。

  3. 在“FWPackageURI”字段中,输入 https://raw.githubusercontent.com/Azure-Samples/iot-remote-monitoring-node-raspberrypi-getstartedkit/master/advanced/2.0/raspberry.js。 此文件包含固件版本 2.0 的实现。

  4. 选择“InvokeMethod”。 Raspberry Pi 上的应用会将确认发送回解决方案仪表板。 然后,它通过下载新版本的固件来启动固件更新过程:

    显示方法历史记录

观察固件更新过程

可以在设备运行固件更新过程时观察该更新过程,可通过在解决方案仪表板中查看报告的属性来实现此目的:

  1. 可以在 Raspberry Pi 上查看更新过程的进度:

    显示更新进度

    Note

    更新完成时,远程监控应用以无提示方式重新启动。 使用 ps -ef 命令验证它是否正在运行。 如果要终止该过程,请使用带过程 ID 的 kill 命令。

  2. 可以在解决方案门户中查看设备报告的固件更新状态。 以下屏幕截图显示更新过程的每个阶段的状态和持续时间,以及新的固件版本:

    显示作业状态

    如果导航回仪表板,则可以验证固件更新后设备是否仍发送遥测数据。

Warning

如果让远程监控解决方案在 Azure 帐户中保持运行状态,系统会按其运行时间计费。 若要详细了解如何在远程监控解决方案运行时减少消耗,请参阅出于演示目的配置 Azure IoT 套件预配置解决方案。 请在用完后从 Azure 帐户中删除预配置的解决方案。

后续步骤

有关 Azure IoT 的更多示例和文档,请访问 Azure IoT 开发人员中心