将 Raspberry Pi 连接到 Azure IoT 中心 (Node.js)

在本文中,你将了解使用运行 Raspberry Pi OS 的 Raspberry Pi 的基础知识。 然后将学习如何使用 Azure IoT 中心将设备无缝连接到云。 有关 Windows 10 IoT Core 的示例,请访问 Windows 开发人员中心

还没有工具包? 请尝试 Raspberry Pi 联机模拟器。 或在此处购买新工具包。

准备工作

  • 创建 IoT 中心。

  • 在 IoT 中心内为 Pi 注册设备。

  • 设置 Raspberry Pi。

  • 在 Pi 上运行示例应用程序,以将传感器数据发送到 IoT 中心。

学习内容

  • 如何创建 Azure IoT 中心以及如何获取新的设备连接字符串。

  • 如何通过 BME280 传感器连接 Pi。

  • 如何通过在 Pi 上运行示例应用程序来收集传感器数据。

  • 如何将传感器数据发送到 IoT 中心。

所需条件

What you need

  • 一个 Raspberry Pi 2 或 Raspberry Pi 3 电路板。

  • Azure 订阅。 如果没有 Azure 订阅,可在开始前创建一个试用帐户

  • 连接到 Pi 的监视器、USB 键盘和鼠标。

  • 运行 Windows 或 Linux 的 Mac 或 PC。

  • Internet 连接。

  • 16 GB 或更大内存的 microSD 卡。

  • USB-SD 适配器或 microSD 卡,用于将操作系统映像刻录到 microSD 卡中。

  • 带有 6 英尺微型 USB 电缆的 5 伏 2 安电源。

以下项是可选项:

  • 已装配的 Adafruit BME280 温度、压力和湿度传感器。

  • 试验板。

  • 6 根 F/M 跳线。

  • 散射的 10 毫米 LED 灯。

注意

如果没有可选项,可以使用模拟的传感器数据。

创建 IoT 中心

此部分介绍如何使用 Azure 门户创建 IoT 中心。

  1. 登录 Azure 门户

  2. 在 Azure 主页上,选择“+ 创建资源”按钮。

  3. 在“类别”菜单中选择“物联网”,然后选择“IoT 中心”。

  4. 在“基本信息”选项卡上,按如下所示填写字段:

    重要

    由于 IoT 中心将作为 DNS 终结点公开可发现,因此请务必避免在命名它时输入任何敏感信息或个人身份信息。

    属性
    订阅 选择要用于中心的订阅。
    资源组 选择一个资源组或新建一个资源组。 若要新建资源组,请选择“新建”并填写要使用的名称。
    IoT 中心名称 输入中心的名称。 此名称必须全局唯一,长度介于 3 到 50 个字母数字字符之间。 名称还可以包含短破折号 ('-') 字符。
    区域 选择离你最近的地区,也就是你希望中心所在的位置。 某些功能(如 IoT 中心设备流)仅适用于特定区域。 对于这些受限功能,你必须选择受支持的区域之一。
    选择要用于中心的层。 根据你需要多少功能以及每天通过解决方案发送多少消息来选择层。

    免费层适用于测试和评估。 如果是免费层,则可将 500 台设备连接到中心,每天最多可传输 8,000 条消息。 每个 Azure 订阅可以在免费层中创建一个 IoT 中心。

    若要比较每个层可使用的功能,请选择“比较层”。 有关详细信息,请参阅选择适用于解决方案的 IoT 中心层
    每日消息数量限制 为中心选择消息的每日最大配额。 可用选项取决于为中心选择的层。 若要查看可用的消息传送和定价选项,请选择“查看所有选项”,然后选择最符合中心需求的选项。 有关详细信息,请参阅 IoT 中心配额和限制

    Screen capture that shows how to create an IoT hub in the Azure portal.

  5. 在完成时选择“下一步:网络”,继续创建中心。

  6. 在“网络”选项卡上填写字段,如下所示:

    属性
    连接配置 选择设备可以用来连接到 IoT 中心的终结点。 本例接受默认设置“公共终结点”。 可以在创建 IoT 中心后更改此设置。 有关详细信息,请参阅管理 IoT 中心的公用网络访问

    Screen capture that shows how to choose the endpoints that can connect to a new IoT hub.

  7. 在完成时选择“下一步:管理”,继续创建中心。

    Screen capture that shows how to set the role-based access control and scale for a new IoT hub.

    可在此处接受默认设置。 如果需要,可以修改以下任何字段:

    • 定价和缩放层级:根据你需要多少功能以及每天通过解决方案发送多少消息来选择层级。 免费层适用于测试和评估。 如果是免费层,则可将 500 台设备连接到中心,每天最多可传输 8,000 条消息。 每个 Azure 订阅可以在免费层中创建一个 IoT 中心。 有关其他层级选项的详细信息,请参阅选择合适的 IoT 中心层级

      如果你正在按照快速入门进行操作,请选择免费层级。

    • IoT 中心单位:每日每单位允许的消息数取决于中心的定价层。 例如,如果希望中心支持 700,000 条消息引入,请选择两个 S1 层单位。

    • 基于角色的访问控制:此属性决定如何管理对 IoT 中心的访问。 允许共享访问策略或仅选择基于角色的访问控制。 有关详细信息,请参阅使用 Azure Active Directory 控制对 IoT 中心的访问

    • 设备到云的分区:此属性会将设备到云的消息与这些消息的同步读取器的数量关联起来。 大多数中心只需要 4 个分区。

    注意

    所示价格仅用作示例。

  8. 在完成时选择“下一步:标记”继续到下一屏幕。

    标记是名称/值对。 可以为多个资源和资源组分配相同的标记,以便对资源进行分类并合并计费。 在本文档中,不会添加任何标记。 有关详细信息,请参阅使用标记来组织 Azure 资源

    Screen capture that shows how to assign tags for a new IoT hub.

  9. 在完成时选择“下一步:查看+创建”可查看选择。

  10. 选择“创建”,以启动新中心的部署。 创建中心时,部署将持续几分钟。 部署完成后,选择“转到资源”以打开新的中心。

在 IoT 中心内注册新设备

本部分在 IoT 中心的标识注册表中创建设备标识。 设备无法连接到中心,除非它在标识注册表中具有条目。 有关详细信息,请参阅 IoT 中心开发人员指南

  1. 在 IoT 中心导航菜单中,打开“设备”,然后选择“添加设备”,以在 IoT 中心中添加设备。

    Screen capture that shows how to create a device identity in the portal.

  2. 在“创建设备”中,提供新设备的名称(例如 myDeviceId),然后选择“保存”。 此操作会为 IoT 中心创建设备标识。 让“自动生成密钥”保持选中状态,这样将自动生成主密钥和辅助密钥。

    Screen capture that shows how to add a new device.

    重要

    收集的日志中可能会显示设备 ID 用于客户支持和故障排除,因此,在为日志命名时,请务必避免包含任何敏感信息。

  3. 在创建了设备后,在“设备”窗格的列表中打开该设备。 复制“主连接字符串”的值。 设备代码使用此连接字符串与 IoT 中心进行通信。

    默认情况下,密钥和连接字符串进行了掩码处理,因为它们是敏感信息。 如果单击眼睛图标,这些信息就会显示。 使用“复制”按钮进行复制时,无需显示它们。

    Screen capture that shows the device connection string.

注意

IoT 中心标识注册表只存储设备标识,以启用对 IoT 中心的安全访问。 它存储设备 ID 和密钥用作安全凭据,以及可用于禁用单个设备访问的启用/禁用标志。 如果应用程序需要存储其他特定于设备的元数据,则应使用特定于应用程序的存储。 有关详细信息,请参阅 IoT 中心开发人员指南

设置 Raspberry Pi

安装 Raspberry Pi OS

准备用于安装 Raspberry Pi OS 映像的 microSD 卡。

  1. 下载台式机版 Raspberry Pi OS。

    a. 台式机版 Raspberry Pi OS(.zip 文件)。

    b. 将台式机版 Raspberry Pi OS 映像提取到计算机上的文件夹中。

  2. 将台式机版 Raspberry Pi OS 安装到 microSD 卡中。

    a. 下载并安装 Etcher SD 卡刻录机实用工具

    b. 运行 Etcher 并选择已在步骤 1 中解压缩的 Raspberry Pi OS 映像。

    c. 选择 microSD 卡驱动器。 Etcher 可能已选择了正确的驱动器。

    d. 选择“Flash”,将台式机版 Raspberry Pi OS 安装到 microSD 卡中。

    e. 在安装完成后,从计算机中移除 microSD 卡。 可以安全地直接移除 microSD 卡,因为在完成时 Etcher 会自动弹出或卸载 microSD 卡。

    f. 将 microSD 卡插入到 Pi 中。

启用 SSH 和 I2C

  1. 将 Pi 连接到监视器、键盘和鼠标。

  2. 启动 Pi,然后使用 pi 作为用户名并使用 raspberry 作为密码来登录 Raspberry Pi OS。

  3. 依次选择 Raspberry 图标 >“首选项”>“Raspberry Pi 配置”

    The Raspberry Pi OS with Preferences menu

  4. 在“接口”选项卡上,将“SSH”和“I2C”设置为“启用”,然后选择“确定”

    接口 说明
    SSH 安全外壳 (SSH) 通过远程命令行远程进入 Raspberry Pi。 这是本文档中向 Raspberry Pi 远程发出命令的首选方法。
    I2C 集成电路总线 (I2C) 是一种通信协议,用于与传感器等硬件进行交互。 需要此接口才能连接本文中的物理传感器。

    如果没有物理传感器,并且想要使用 Raspberry Pi 设备中的模拟传感器数据,可以将“I2C”保持禁用状态。

    Enable I2C and SSH on Raspberry Pi

注意

若要启用 SSH 和 I2C,可在 raspberrypi.orgAdafruit.com 中找到更多参考文档。

将传感器连接到 Pi

使用试验板和跳线,将 LED 灯和 BME280 连接到 Pi,如下所示。 如果没有传感器,请跳过此部分

The Raspberry Pi and sensor connection

BME280 传感器可收集温度和湿度数据。 当设备向云发送消息云时,LED 将闪烁。

对于传感器引脚,请使用以下接线:

启动(传感器和 LED 灯) 结束(开发板) 线缆颜色
VDD(引脚 5G) 3.3 伏 PWR(引脚 1) 白线
GND(引脚 7G) GND(引脚 6) 棕色电缆
SDI(引脚 10G) I2C1 SDA(引脚 3) 红线
SCK(引脚 8G) I2C1 SCL(引脚 5) 橙色电缆
LED VDD(引脚 18F) GPIO 24(引脚 18) 白线
LED GND(引脚 17F) GND(引脚 20) 黑线

有关详细信息,请参阅 Raspberry Pi 2 和 3 引脚映射

成功将 BME280 连接到 Raspberry Pi 后,它应如下图所示。

Connected Pi and BME280

将 Pi 连接到网络

通过使用微型 USB 电缆和电源为 Pi 通电。 使用以太网电缆将 Pi 连接到有线网络,或者按照 Raspberry Pi Foundation 中的说明将 Pi 连接到无线网络。 将 Pi 成功连接到网络后,需要记下 Pi 的 IP 地址

注意

请确保将 Pi 与计算机连接到同一网络。 例如,如果计算机连接到无线网络,而 Pi 连接到有线网络,则在 devdisco 输出中可能看不到 IP 地址。

在 Pi 上运行示例应用程序

克隆示例应用程序,并安装必备组件包

  1. 从主计算机使用以下 SSH 客户端之一连接到 Raspberry Pi:

    Windows 用户

    a. 下载并安装 PuTTY for Windows。

    b. 将 Pi 的 IP 地址复制到主机名(或 IP 地址)部分,并选择 SSH 作为连接类型。

    PuTTy

    Mac 和 Ubuntu 用户

    使用 Ubuntu 或 macOS 上的内置 SSH 客户端。 可能需要运行 ssh pi@<ip address of pi>,以通过 SSH 连接 Pi。

    注意

    默认用户名是 pi,密码是 raspberry

  2. 将 Node.js 和 npm 安装到 Pi。

    首先检查 Node.js 版本。

    node -v
    

    如果版本低于 10.x,或者 Pi 上没有 Node.js,请安装最新版本。

    curl -sSL https://deb.nodesource.com/setup_16.x | sudo -E bash
    sudo apt-get -y install nodejs
    
  3. 克隆示例应用程序。

    git clone https://github.com/Azure-Samples/azure-iot-samples-node.git
    
  4. 安装示例的所有包。 安装包括 Azure IoT 设备 SDK、BME280 传感器库和接线 Pi 库。

    cd azure-iot-samples-node/iot-hub/Tutorials/RaspberryPiApp
    npm install
    

    注意

    完成此安装过程可能需要几分钟,具体取决于网络连接情况。

配置示例应用程序

  1. 通过运行以下命令,打开配置文件:

    nano config.json
    

    Config file

    此文件中有两个可以配置的项。 第一个是 interval,它定义了发送到云的消息之间的时间间隔(以毫秒为单位)。 第二个是 simulatedData,它是一个布尔值,指示是否使用模拟的传感器数据。

    如果没有传感器,请将 simulatedData 值设置为 true,使示例应用程序创建和使用模拟的传感器数据。

    注意:本教程使用的 i2c 地址默认为 0x77。 根据配置,它也可能是 0x76:如果遇到 i2c 错误,请尝试将该值更改为 118,然后看看效果是否更好。 若要查看传感器使用的地址,请在 raspberry pi 上的 shell 中运行 sudo i2cdetect -y 1

  2. 通过按“Control-O”>“Enter”>“Control-X”保存并退出。

运行示例应用程序

通过运行以下命令,生成示例应用程序:

sudo node index.js '<YOUR AZURE IOT HUB DEVICE CONNECTION STRING>'

注意

确保将设备连接字符串复制并粘贴到单引号中。

应看到以下输出,该输出显示传感器数据和发送到 IoT 中心的消息。

Output - sensor data sent from Raspberry Pi to your IoT hub

读取 IoT 中心收到的消息

若要监视 IoT 中心从设备收到的消息,一种方法是使用 Visual Studio Code 的 Azure IoT 中心扩展。 若要了解详细信息,请参阅使用 Visual Studio Code 的 Azure IoT 中心扩展在设备和 IoT 中心之间发送和接收消息

若要了解如何通过更多方式来处理设备发送的数据,请转到下一部分。

清理资源

可以将在本文中创建的资源用于本文档集中的其他教程和快速入门。 如果打算继续学习其他快速入门或相关教程,请不要清理在本文中创建的资源。 如果不打算继续,请在 Azure 门户中执行以下步骤来删除本文创建的所有资源。

  1. 在 Azure 门户的左侧菜单中选择“所有资源”,然后选择你创建的 IoT 中心。
  2. 在 IoT 中心概述窗格顶部,选择“删除”
  3. 输入中心名称,然后再次选择“删除”以确认永久删除 IoT 中心。

后续步骤

在本文中,你运行了一个示例应用程序,以收集传感器数据并将其发送到 IoT 中心。

若要继续了解 Azure IoT 中心入门知识并浏览所有扩展的 IoT 方案,请参阅: