Azure IoT Hub 与 nanoFramework





0/5 (0投票)
本项目演示了如何轻松地编写 nanoFramework C# 应用程序,使用 AMQP 构建一个连接到 Azure IoT Hub 的设备。
概述
本项目旨在说明使用 nanoFramework C# 构建连接设备是多么容易。该设备将使用 AMQP 连接到 Azure IoT Hub。
Azure IoT Hub
如果您不熟悉 Azure IoT Hub,可以在产品页面上找到所有信息。您需要一个 Azure 帐户才能使本项目正常运行。如果您还没有帐户,可以在上面的产品页面上创建一个免费帐户。
AMQP
这是一个用于在应用程序或组织之间传递业务消息的开放标准。它代表Advanced Message Queuing Protocol。它是一项国际标准(ISO/IEC 19464),也是物联网领域广泛接受的协议标准之一。
您可以在该标准的官方网页或 Azure 文档门户中找到更多信息。
我们将使用 AMQP.Net Lite C# 库,这是一个适用于 .NET Framework 的轻量级 AMQP 1.0 库。
设置 Azure IoT Hub
如果您已经设置了 Azure IoT Hub,则可以跳过此步骤。
登录 Azure 门户并创建一个 IoT Hub 实例。您将看到类似如下的内容
成功创建其中一个后,您将需要访问密钥。在 IoT Hub 页面上,导航到“共享访问策略”页面,并获取 iothubowner
策略的连接字符串。
管理 IoT Hub
对于 IoT Hub 的基本管理操作、监控甚至向设备发送数据,您应该安装 Azure IoT C# SDK 中的 Device Explorer 应用程序。请遵循自述文件中的说明下载预先构建的安装程序,或者您可以选择克隆存储库并自行构建。
启动 Device Explorer 应用程序后,在适当的字段中输入您从 Azure 门户获取的连接字符串,然后单击“更新”按钮。
下一步是创建一个设备。转到“管理”选项卡,然后单击“创建”按钮。
您只需输入设备 ID,该应用程序就会为设备创建随机的身份验证密钥。您无需担心这些。
返回“管理”选项卡视图,然后单击“SAS 令牌”按钮,这将打开一个工具,用于为该设备创建共享访问签名令牌。
复制生成的 SaS 令牌,以便稍后在 C# 应用程序中使用。
这里有几个方面值得一提:令牌是专门为此设备生成的,属于此 IoT Hub 实例,并且有效期为 TTL 字段中设置的持续时间。您可以在此处了解有关 IoT Hub 的安全性和访问控制的更多信息。
IoT Hub 客户端硬件
我为此项目使用了 STM32F769IDISCOVERY
板,并刷入了 nanoFramework
映像。对于任何运行最新 nanoFramework
映像并具有网络功能的其他板,其工作方式完全相同。
C# IoT 客户端
我假设您已正确设置 Visual Studio,并已安装 nanoFramework 扩展。
从 nanoFramework samples 存储库获取代码,并在 Visual Studio 中打开解决方案。解决方案加载后,将 Azure.IoTHub
设置为启动项目。
接下来,编辑 Program.cs 文件,并替换文件中顶部的与 IoT Hub 相关的常量。
const string iotHubName = "my-hub";
const string device = "COFFEEMACHINE001";
const string sasToken = "SharedAccessSignature sr=my-hub.azure-devices.net%2Fdevices%
2FCOFFEEMACHINE001&sig=%2FjXfhNvUpxtIM0%2F%2Bb8fCc5l0QWfmEGliSkGqQm3cds4%3D&se=1547902598";
请确保您
- 输入正确的 IoT Hub 名称。只需名称,无需完整 URL。
- SaS 令牌
string
是紧跟在初始“SharedAccessSignature=
”之后的部分。
当按下开发板上的蓝色用户按钮时,应用程序会将一个随机温度发送到 IoT Hub,并在收到来自 IoT Hub 的消息时向调试控制台输出一条消息。这说明了 AMQP 设备的双向通信功能。
继续探索代码,下一个有趣的部分是在工作线程的开头,其中解析 IoT Hub 设置。
您可以在此处看到为 IoT Hub 主机计算的完整 URL。
该应用程序使用 SASL PLAIN 和由 Device Explorer 工具生成的 Sas 令牌向 Azure IoT Hub 进行身份验证。这样做的目的是永远不在网络上传输设备密钥,从而消除了潜在的安全漏洞。
AMQP 身份验证的用户名将由设备 ID 和 IoT Hub 名称组成。如下所示:{deviceId}@sas.{iothubname}。
密码是上面描述的 SaS 令牌字符串。请确保您只输入相关部分,否则身份验证将失败。
此代码块的最后有趣部分是发送和接收端点。这些根据以下模式由设备 ID 组成。
发送设备到云的消息:devices/{deviceId}/messages/events
接收云到设备的消息:devices/{deviceId}/messages/devicebound
现在,让我们设置设备以理解属性名为 settemp
的消息,该消息包含一个整数值,表示新的温度设定点。这是 OnMessage
和 OnAction
处理程序的代码。
private static void OnMessage(IReceiverLink receiver, Message message)
{
// command received
int setTemperature = int.Parse((string)message.ApplicationProperties["settemp"]);
OnAction(setTemperature);
}
private static void OnAction(int setTemperature)
{
Console.WriteLine($"received new temperature setting: {setTemperature}");
}
最后一点需要提到的是,nanoFramework
设备需要正确配置其网络接口,可以通过使用网络配置窗口或调整 NetworkHelpers
类中的相关代码来完成。
连接到 IoT Hub
要真正看到效果,只需在 Visual Studio 中启动调试会话。C# 应用程序将被部署到设备并开始运行。
由于 AMQP 跟踪级别被设置为 Frame
和 Information
,您可以检查 Visual Studio 调试输出窗口来了解 AMQP 连接的情况。
下面突出显示的是:身份验证步骤以及接收和发送端点的附加。
当用户按钮被点击时,AMQP 消息将被发送到 IoT Hub
IoT Hub Device Explorer 有一个监控功能,您可以使用它来观察从设备流向云端的数据。转到“数据”选项卡,然后单击“监控”按钮。
要测试云到设备通信,请转到“消息发送到设备”选项卡,在下拉列表中选择设备,添加一个属性 settemp
,值为 70
,然后单击“发送”按钮。
消息将被排队到 IoT Hub,并且输出显示消息 ID。由于设备已连接,消息会立即收到。
这是我们在 Visual Studio 调试输出窗口中看到的内容
总结
这是一个非常简单的演示,说明了如何使用连接到 IoT Hub 的设备。基本的组件,如身份验证、发送和接收消息,都已涵盖。
此代码可以轻松扩展以添加改进,例如
- 添加错误处理和重试
- 使用消息属性进行更复杂的处理
- 实现 IoT Hub 云到设备命令的处理
历史
- 2019 年 1 月 16 日:初始版本