使用 C 将 Raspberry Pi 3 连接到远程监视解决方案并启用远程固件更新
本教程演示如何使用适用于 Raspberry Pi 3 的 Microsoft Azure IoT 初学者工具包完成以下任务:
- 开发可与云通信的温度和湿度读取器。
- 启用并执行远程固件更新以更新 Raspberry Pi 上的客户端应用程序。
本教程使用:
- Raspbian OS、C 编程语言和 Microsoft Azure IoT SDK for C 实现示例设备。
- 使用 IoT 套件远程监视预配置解决方案作为基于云的后端。
概述
在本教程中,将完成以下步骤:
- 将远程监视预配置解决方案的实例部署到 Azure 订阅。 此步骤会自动部署并配置多个 Azure 服务。
- 将设备和传感器设置为与计算机和远程监视解决方案通信。
- 更新用于连接到远程监视解决方案的示例设备代码,并发送可在解决方案仪表板上查看的遥测数据。
- 使用示例设备代码更新客户端应用程序。
先决条件
需要有效的 Azure 订阅才能完成此教程。
注意
如果没有帐户,只需花费几分钟就能创建一个免费试用帐户。 有关详细信息,请参阅 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
预配解决方案
如果尚未在帐户中预配远程监视预配置解决方案,请执行以下步骤:
- 使用 Azure 帐户凭据登录 azureiotsuite.com,再单击“”+创建解决方案。
- 单击“远程监视”磁贴上的“选择”。
- 为远程监视预配置解决方案输入“解决方案名称” 。
- 选择要用于预配解决方案的“区域”和“订阅”。
- 单击“创建解决方案” 开始预配过程。 此过程通常需要数分钟的运行时间。
等待预配过程完成
- 单击状态为“正在预配”的解决方案磁贴。
- 请在 Azure 服务部署到 Azure 订阅中时,注意“预配状态” 。
- 预配完成之后,状态将更改为“就绪”。
- 单击磁贴,会在右边窗格中看到解决方案的详细信息。
注意
如果在部署预配置解决方案时遇到问题,请参阅 azureiotsuite.com 站点上的权限和常见问题解答。 如果问题仍然存在,请在门户中创建服务票证。
是否有你预期会看到但没有列出的解决方案详细信息? 请在 用户之声中向我们提供功能建议。
警告
远程监视解决方案在 Azure 订阅中预配一组 Azure 服务。 部署反映实际企业体系结构。 要避免产生不必要的 Azure 使用费用,请在使用完预配置解决方案的实例后,在 azureiotsuite.com 上将其删除。 如果再次需要预配置解决方案,可以轻松地重新创建它。 若要详细了解如何在远程监视解决方案运行时减少消耗,请参阅出于演示目的配置 Azure IoT 套件预配置解决方案。
查看解决方案仪表板
该解决方案仪表板用于管理部署的解决方案。 例如,可以查看遥测数据、添加设备以及调用方法。
当预配完成且预配置解决方案的磁贴指示“就绪”时,请选择“启动”,在新的选项卡中打开远程监视解决方案门户。
默认情况下,此解决方案门户会显示仪表板。 可以通过页面左侧的菜单导航到解决方案门户的其他区域。
添加设备
对于连接到预配置解决方案的设备,该设备必须使用有效的凭据将自身标识到 IoT 中心。 可以从解决方案仪表板中检索设备凭据。 在本教程中,稍后会在客户端应用程序中添加设备凭据。
如果尚未这样做,请向远程监视解决方案添加自定义设备。 在解决方案仪表板中完成以下步骤:
在仪表板左下角,单击“添加设备”。
在“自定义设备”面板中,单击“新增”。
选择“让我定义我自己的设备 ID”。 输入设备 ID(例如“rasppi”),单击“检查 ID”验证该名称是否尚未在解决方案中使用,并单击“创建”预配设备。
记下设备凭据 (设备 ID、IoT 中心主机名和设备密钥) 。 Raspberry Pi 上的客户端应用程序需要这些值才能连接到远程监视解决方案。 然后单击“完成”。
在解决方案仪表板中的设备列表中选择设备。 接着,在“设备详细信息”面板中,单击“启用设备”。 设备状态现在为“正在运行”。 远程监视解决方案现在可以从设备接收遥测数据,并在设备上调用方法。
准备 Raspberry Pi
安装 Raspbian
如果这是你首次使用 Raspberry Pi,则需使用套件中随附的 SD 卡上的 NOOBS 来安装 Raspbian 操作系统。 Raspberry Pi 软件指南介绍了如何在 Raspberry Pi 上安装操作系统。 本教程假定已在 Raspberry Pi 上安装 Raspbian 操作系统。
注意
适用于 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 | 试验板 | Color |
---|---|---|
GND(引脚 14) | LED - ve 引脚 (18A) | 紫色 |
GPCLK0(引脚 7) | 电阻器 (25A) | 橙色 |
SPI_CE0(引脚 24) | CS (39A) | 蓝色 |
SPI_SCLK(引脚 23) | SCK (36A) | 黄色 |
SPI_MISO(引脚 21) | SDO (37A) | White |
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,以及如何从 Windows 或 Linux 和 Mac OS 进行连接。
使用用户名 pi 和密码 raspberry 登录。
可选:共享 Raspberry Pi 上的文件夹
(可选)可以将 Raspberry Pi 上的文件夹与桌面环境共享。 共享文件夹之后,即可使用偏好的桌面文本编辑器(例如 Visual Studio Code 或 Sublime Text)在 Raspberry Pi 上编辑文件,而不必使用 nano
或 vi
。
若要与 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 上下载并配置远程监视客户端应用程序。
克隆存储库
如果尚未这样做,请通过在 Pi 上运行以下命令,克隆所需的存储库:
cd ~
git clone --recursive https://github.com/Azure-Samples/iot-remote-monitoring-c-raspberrypi-getstartedkit.git
更新设备连接字符串
使用以下命令在 nano 编辑器中打开示例配置文件:
nano ~/iot-remote-monitoring-c-raspberrypi-getstartedkit/advanced/config/deviceinfo
将占位符值替换为在本教程开始时创建并保存的设备 ID 和 IoT 中心信息。
完成后,deviceinfo 文件的内容应如以下示例所示:
yourdeviceid
HostName=youriothubname.azure-devices.net;DeviceId=yourdeviceid;SharedAccessKey=yourdevicekey
保存所做的更改(按 Ctrl-O,并按 Enter),并退出编辑器(按 Ctrl-X)。
生成示例
如果尚未这样做,请通过在 Raspberry Pi 上的终端中运行以下命令,为适用于 C 的 Microsoft Azure IoT 设备 SDK 安装必备组件包:
sudo apt-get update
sudo apt-get install g++ make cmake git libcurl4-openssl-dev libssl-dev uuid-dev
现在可以在 Raspberry Pi 上生成示例解决方案:
chmod +x ~/iot-remote-monitoring-c-raspberrypi-getstartedkit/advanced/1.0/build.sh
~/iot-remote-monitoring-c-raspberrypi-getstartedkit/advanced/1.0/build.sh
现在可以在 Raspberry Pi 上运行示例程序。 输入以下命令:
sudo ~/cmake/remote_monitoring/remote_monitoring
以下示例输出是在 Raspberry Pi 的命令提示符下看到的输出示例:
随时都可按 Ctrl-C 退出程序。
查看遥测
Raspberry Pi 现在正将遥测发送到远程监视解决方案。 可以在解决方案仪表板上查看遥测。 也可以从解决方案仪表板向 Raspberry Pi 发送消息。
- 导航到解决方案仪表板。
- 在“要查看的设备”下拉列表中选择设备。
- 来自 Raspberry Pi 的遥测显示在仪表板上。
启动固件更新
固件更新过程会下载更新版的设备客户端应用程序并将其安装在 Raspberry Pi 上。 若要详细了解固件更新过程,请参阅使用 IoT 中心进行设备管理的概述一文中对固件更新模式的说明。
在设备上调用相应的方法即可启动固件更新过程。 该方法是异步方法,一旦更新过程开始就会返回。 设备使用报告的属性,将更新进展通知给解决方案。
可以通过解决方案仪表板调用 Raspberry Pi 上的方法。 Raspberry Pi 在首次连接到远程监视解决方案时,会发送所支持的方法的相关信息。
在解决方案仪表板中,单击“设备”即可访问“设备”页。 在“设备列表”中选择 Raspberry Pi。 然后选择“方法”:
在“调用方法”页的“方法”下拉列表中,选择“InitiateFirmwareUpdate”。
在 FWPackageURI 字段中,输入 https://github.com/Azure-Samples/iot-remote-monitoring-c-raspberrypi-getstartedkit/raw/master/advanced/2.0/package/remote_monitoring.zip。 此存档文件包含固件版本 2.0 的实现。
选择“InvokeMethod”。 Raspberry Pi 上的应用会将确认发送回解决方案仪表板。 然后,它通过下载新版本的固件来启动固件更新过程:
观察固件更新过程
可以在设备运行固件更新过程时观察该更新过程,可通过在解决方案仪表板中查看报告的属性来实现此目的:
可以在 Raspberry Pi 上查看更新过程的进度:
注意
更新完成时,远程监视应用以无提示方式重新启动。 使用
ps -ef
命令验证它是否正在运行。 如果要终止该过程,请使用带过程 ID 的kill
命令。可以在解决方案门户中查看设备报告的固件更新状态。 以下屏幕截图显示更新过程的每个阶段的状态和持续时间,以及新的固件版本:
如果导航回仪表板,则可以验证固件更新后设备是否仍发送遥测数据。
警告
如果让远程监视解决方案在 Azure 帐户中保持运行状态,系统会按其运行时间计费。 若要详细了解如何在远程监视解决方案运行时减少消耗,请参阅出于演示目的配置 Azure IoT 套件预配置解决方案。 请在用完后从 Azure 帐户中删除预配置的解决方案。
后续步骤
有关 Azure IoT 的更多示例和文档,请访问 Azure IoT 开发人员中心。