开发IOT设备

所以有一段时间后,我发表了一个小宠物项目,我正在沿着它的努力工作。要查看大图片,您可以阅读概述这里。第一步是在设备上运行的东西(IoT)客户端应用程序,并将传感器读数发送到云。在云中,Azure IoT集线器管理客户端并从客户端接收数据。

PCB板

顾名思义,IoT设备连接到Internet。所以没有比你的客户应用程序不同,你可能先思考。但是,当您开始考虑IoT设备如何部署并在野外运行时,将差异相隔一些差异。对于一个,设备通常不由人操作。它不是带来自己的设备(byod)方案,IoT设备的创建者通常在控制设备上运行的软件中。在控制中也意味着设备由制造商设置并连接到后端没有或人类交互。由于设备在打开状态并连接到互联网。如果不强制要求更新设备的计划,这通常是一个好主意,应该是安全漏洞等Heldbled.曾经发生过。虽然一般而言,这些问题通常是很多本土邮政特洛伊狩猎很好地总结。通常使用IOT解决方案产生的另一方面是必须处理的数据量。虽然您可以在边缘(现场)上处理数据 - 通常,愿望在此处将数据聚合在中心点,并在实时数据上行动或分析内部洞察中的数据以查找洞察力。它通常是带来最重要的业务价值的数据处理方案,因此是解决方案的重要组成部分尝试使用IOT解决方案创建。为开发人员提供创建一个完成规模的系统的挑战,以满足通过系统运行的高数据量。简而言之,它是传统的Xamarin,WPF,Winforms或Web客户端应用程序的不同世界。

后端在IoT设备场景中发挥着重要作用。因此,它毫不奇怪,您会发现许多公司希望帮助您的IOT努力。其中一个解决方案是Azure IoT枢纽这是由IOT挑战创建的。它提供了许多巨大的功能,例如可扩展性,同时从多百万个设备接收数据,不同的消息传递模式以容纳始终连接的VS IOT设备,这些模式可能只有只有连接,然后再次连接。您不仅可以通过设备接收数据 Azure IoT枢纽而且还向设备发送信息。它还提供了通知您的IoT设备可用的IoT设备可用的方法。由于它在云中运行,因此可扩展性被烘焙到产品中。

要设置IOT HUB,我建议您遵循这些指示.

您可以每个帐户创建一个免费的IoT集线器实例,这是我将在此博客文章中使用的一个免费机构集线器实例。

使用IOT集线器设置,让我们设置我们当地的环境。您可以从PowerShell内部管理您的IOT集线器 - 哦,哦,是的,壳的力量(试图改善我的教父笑话......)你所要做的就是安装Azure Cli.。然后安装IOT扩展。如果您没有安装的工具,请务必使用以下命令首先登录PowerShell上的Azure:

az login

登录并具有扩展后,您可以从PowerShell中完成各种填充物。例如,我们可以创建这样的新设备:

az iot hub device-identity create --hub-name IoTEndpoint --device-id test-device-01

Note that the --hub-name must equal the name you gave your IoT Hub on Azure. You are free to choose a different name to register your device after --device-id. Once you have a device registered. You can send messages as the registered device:

az iot device send-d2c-message -n IoTEndpoint -d test-device-01 --data 'Hello IoTHub'

没有错误意味着成功,但是,另一个方便的命令是看到IoT集线器接收的消息:

az iot hub monitor-events -n IoTEndpoint

如果您现在打开第二个PowerShell要将消息发送为注册设备,您将看到收到消息的IOT集线器。

显示收到的消息

使用安装并使用设备注册的所有工具,我们已准备好实现我们的客户端。您可以使用Azure CLI使用的命令更多,您可以找到命令的完整列表这里.

实现IOT客户端

Azure IoT枢纽提供了一个SDK.哪些客户可以用于通信。 SDK可用于.NET,Node.js,Python,C和Java。但是不能或不想使用你可以的sdk 手动通过HTTP,MQTT或AMQP连接到IOT集线器。

对于我的第一次努力,我用了Azure IoT开发套件。这是一个奇妙的价值 - 也许你甚至收到了你参加的活动的礼物? DEV套件具有许多传感器,以及RGB LED,显示,AUX,USB和WIFI连接。那是说如果你不拥有一个设备,你仍然可以开始使用SDK for .NET。 SDK在.NET标准上运行。所以你可以编写一个使用该的.NET核心客户端尼古特包裹。

所以我们可以实现.NET核心控制台应用程序来实现我们的解决方案。注意由于库可以安装在.NET标准项目中,您可以将所有IOT逻辑代码提取到.NET标准库中。懒惰的是保持这个博客的解决方案简单我将直接在.NET核心项目中实现所有代码。我们希望与我们的应用程序有关的第一件事是连接到后端。我们可以通过IOT集线器实现不同的方式。为了开始,我们将采取最简单的路线,通常不是您想要部署到生产的路线 - 即,使用带有API键的连接字符串作为身份验证机制:

var device = DeviceClient.CreateFromConnectionString("HostName=IoTEndpoint.azure-devices.net;DeviceId=test-device-01;SharedAccessKey=THIS-IS-WHERE-THE-SHARED-KEY-WOULD-BE-DISPLAYED");

您可以从IOT集线器,IOT设备下的Azure门户中检索此连接字符串,在我的案例测试设备-01中,然后选择主连接字符串或辅助连接字符串。

连接后,我们可以开始将传感器读数发送到JSON:

var json = JsonConvert.SerializeObject(measurement);
var message = new Message(Encoding.UTF8.GetBytes(json));

await device.SendEventAsync(message);

由于.NET标准在几乎每个可以想到的操作系统上运行,您可以使用实际传感器提取上面的代码以在Raspberry派或android或android或插入 - 您的目标。自从此以来SDK.也可用于其他语言,如C版本,我们可以使用它来编写Azure Dev套件的应用程序。

我可以拥有其余的客户端代码吗?是的 - 如果您牢记直到最后,您将找到到GitHub上客户端的全部源代码的链接。

Azure IoT开发套件客户端

我必须建议在Microsoft上遵循官方文档如何设置Azure IoT开发套件与Visual Studio代码,这将向您展示如何最初设置设备并将其连接到IOT集线器。建议单词确保您遵循文档的所有步骤,并不会释放出在Windows计算机上安装USB驱动程序等零件。当然,在这里的朋友的经验中谈论

Microsoft为DEV套件提供了相当多的样本。样品可以直接装载到设备上Visual Studio Code.。从远程监控,我对.NET Core Client提供了一些灵感教程 - 我跳过了Azure的东西,因为我想要以不同的方式处理数据。只有我对C代码进行的更改是将大气压(ATM)的单元更改为HPA。哦,当然从摄氏度移到华氏微的转换 - 我的大脑不会计算帝国制度

请注意,由于设备上可用的限制资源,许多IOT设备不附带操作系统。这些限制往往是在C中编写许多程序的原因。如果您是像我这样的.NET开发人员,您可能会错过很多便利。然后,您可能会发现您的代码非常有效的知识中的一些整合

我期待着尽快退房的另一个设备是荒野实验室的草地。关于草地的伟大事物是您可以使用C#为设备编写IoT客户端代码。好消息是他们对预订开放,但您可能必须排队等待,直到所有的Kickstarter活动支持者都收到他们。

一旦您在DEV套件上安装了应用程序并将其连接到WiFi,您将能够看到消息到达IoT Hub仪表板。

图表显示Azure IoT集线器正在接收的消息。

并且通过使用CLI Tools命令从我们开始一个侦听器之前,将收到发送到Azure IoT Hub的每条消息:

接收特维护

您将能够看到原始的JSON进入IoT Hub。

结论

设置第一个IOT设备可以是令人生畏的任务,因为有一些移动部件。首先要了解客户,甚至只知道如何在.NET核心中实现客户端,然后是Azure IoT集线器部分。对我来说,很高兴注意到开始小巧,逐步学习Azure IoT Hub提供的可能性。但是仍然有更多的包装成蔚蓝的IOT枢纽。例如,更新设备,设备双胞胎或从云通信到设备 - 如果您对详细的列表感兴趣,请务必查看官方页面这里.

在该系列的下一个博客文章中,我们将研究如何处理云中的数据。以及如何将其转发给客户。我们将在哪里可视化用户的数据。因此,保持调整并查看所有客户端代码GitHub..

Hth.

更新: