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