【小学三年级系列】 小学三年级入门Azure IOT Hub

老****馆 UID.2871322
2017-06-25 发表

本帖最后由 老李拉面馆 于 2017-6-25 23:53 编辑

[align=center]小学三年级入门AzureIOT Hub[/align][align=center]MSP李桑郁[/align][align=left] [/align][align=left]前记:作为一名软粉与嵌入式开发者,一直渴望我软能够向嵌入式伸出魔爪,因为这是一个“会动的”东西。偶然有一天看见我软真的有这方面的产品,好比如Windows CE、Windows Embedding、Azure IOT Hub等等….我的内心十分激动。[/align][align=left]去年在微软Ignite大会上,听到专家讲解iot 的相关内容,我发现我对嵌入式的认知实在太过于狭隘。于是开始学习“上云”之路。[/align][align=left]这篇文章将简单粗暴的为大家介绍IOT Hub究竟是个啥!真的就那么高端?[/align]
[align=left]一、 IOT Hub到底能干嘛[/align][align=left]说俗一点就是在电脑上看到我小小的传感器到底读了什么数据出来。[/align][align=left]读完了还能管理我这些成千上百万的传感器的运行状态[/align][align=left]就像这样[/align][align=left] ***附件停止解析*** [/align][align=left]二、 这玩意怎么用[/align][align=left]看图![/align][align=left]***附件停止解析***[/align][align=left]Step 1[/align]
[align=left]分别填入你的信息,名称跟资源组你想怎么填怎么填,IOTHub单位我们就填1(根据你实际情况而定),不明白你可以看他的提示. [/align][align=left]***附件停止解析***[/align][align=left]例如:你有接近2000个传感器,你可以填10Iot Hub单位,再选S1或者S2标准套餐,费用根据你的设备数还有消息量与使用天数决定。[/align][align=left]因为是测试,我们就选免费的F1免费套餐。[/align]
***附件停止解析***[align=left]创建完了就进入IOTHub[/align]***附件停止解析***

[align=left]记下你的主机名(IOT Hub名称+.azure-devices.net)高考要考的等会要用的[/align]***附件停止解析***[align=left]好,接下来[/align][align=left]再复制你的主密钥,等会注册设备要用[/align]***附件停止解析***
***附件停止解析***
[align=left]Step 2[/align][align=left]至此,我们可以把Azure放在一边了,接下来我们先创建项目[/align][align=left]这样操作[/align]***附件停止解析***
[align=left]由于我已经创建了就不再创建新项目了,[/align][align=left]来,我们一起来看看[/align]***附件停止解析***
[align=left]创建完项目,我们点击注册设备的项目CreateDeviceIdentity(就是我刚刚填的RegisterDevice)[/align]***附件停止解析***
[align=left]然后[/align][align=left]“NuGet 包管理器窗口中,选择浏览,搜索 microsoft.azure.devices,选择安装以安装 Microsoft.Azure.Devices [/align]***附件停止解析***
[align=left]Program.cs 文件顶部添加以下 using 语句:[/align][align=left]using Microsoft.Azure.Devices;[/align][align=left]usingMicrosoft.Azure.Devices.Common.Exceptions;[/align][align=left]
[/align][align=left]***附件停止解析***[/align][align=left]
[/align]
[align=left]将以下字段添加到 Program 类。 "{iot hub connection string}"换成你的主密钥[/align][align=left]static RegistryManagerregistryManager;[/align][align=left]static string connectionString =;[/align][align=left]
[/align][align=left]***附件停止解析***[/align][align=left]
[/align]
[align=left] [/align][align=left]将以下方法添加到 Program [/align][align=left]private static async TaskAddDeviceAsync()[/align][align=left]{[/align][align=left] string deviceId = "myFirstDevice";[/align][align=left] Device device;[/align][align=left] try[/align][align=left] {[/align][align=left] device = await registryManager.AddDeviceAsync(newDevice(deviceId));[/align][align=left] }[/align][align=left] catch (DeviceAlreadyExistsException)[/align][align=left] {[/align][align=left] device = awaitregistryManager.GetDeviceAsync(deviceId);[/align][align=left] }[/align][align=left] Console.WriteLine("Generated device key: {0}",device.Authentication.SymmetricKey.PrimaryKey);[/align][align=left]}[/align][align=left]***附件停止解析***[/align]
[align=left]Main 方法中添加以下行[/align][align=left]registryManager =RegistryManager.CreateFromConnectionString(connectionString);[/align][align=left]AddDeviceAsync().Wait();[/align][align=left]Console.ReadLine();[/align]
[align=left]***附件停止解析***[/align]

[align=left] [/align][align=left]运行,然后记下这个设备密钥 [/align][align=left]***附件停止解析***[/align][align=left]
[/align][align=left]Step 3[/align][align=left]接下来我们要看到设备发过来啥消息,所以我们得再做一个控制台应用,还是在这个解决方案里新建一个项目,取名叫ReadDeviceToCloudMessages [/align]
[align=left]“NuGet 包管理器窗口中,搜索 WindowsAzure.ServiceBus[/align][align=left]***附件停止解析***[/align]
[align=left]***附件停止解析***[/align]
[align=left]***附件停止解析***[/align][align=left]
[/align][align=left]
[/align]
[align=left] [/align][align=left]在 Program.cs 文件顶部添加以下 using 语句[/align][align=left]usingMicrosoft.ServiceBus.Messaging;[/align][align=left]using System.Threading;[/align][align=left]***附件停止解析***[/align]
[align=left]将以下字段添加到 Program 类,同样,把"{iot hub connection string}"换成你的主密钥[/align]
[align=left]static string connectionString = "{iothubconnection string}";[/align][align=left]static string iotHubD2cEndpoint ="messages/events";[/align][align=left]static EventHubClient eventHubClient;[/align][align=left]
[/align][align=left]***附件停止解析***[/align][align=left]
[/align][align=left] [/align][align=left]将以下方法添加到 Program [/align]
[align=left]private static async TaskReceiveMessagesFromDeviceAsync(string partition, CancellationToken ct)[/align][align=left]{[/align][align=left] vareventHubReceiver =eventHubClient.GetDefaultConsumerGroup().CreateReceiver(partition,DateTime.UtcNow);[/align][align=left] while(true)[/align][align=left] {[/align][align=left] if (ct.IsCancellationRequested) break;[/align][align=left] EventData eventData = await eventHubReceiver.ReceiveAsync();[/align][align=left] if (eventData == null) continue;[/align][align=left] [/align][align=left] string data = Encoding.UTF8.GetString(eventData.GetBytes());[/align][align=left] Console.WriteLine("Message received. Partition: {0} Data:'{1}'", partition, data);[/align][align=left] }[/align][align=left]}[/align][align=left]
[/align][align=left]***附件停止解析***[/align][align=left]
[/align][align=left] Main 方法中添加以下行[/align]
[align=left]Console.WriteLine("Receivemessages. Ctrl-C to exit.\n");[/align][align=left]eventHubClient= EventHubClient.CreateFromConnectionString(connectionString,iotHubD2cEndpoint);[/align][align=left] [/align][align=left]vard2cPartitions = eventHubClient.GetRuntimeInformation().PartitionIds;[/align][align=left] [/align][align=left]CancellationTokenSourcects = new CancellationTokenSource();[/align][align=left] [/align][align=left]System.Console.CancelKeyPress+= (s, e) =>[/align][align=left]{[/align][align=left] e.Cancel = true;[/align][align=left] cts.Cancel();[/align][align=left] Console.WriteLine("Exiting...");[/align][align=left]};[/align][align=left] [/align][align=left]vartasks = new List<Task>();[/align][align=left]foreach(string partition in d2cPartitions)[/align][align=left]{[/align][align=left] tasks.Add(ReceiveMessagesFromDeviceAsync(partition, cts.Token));[/align][align=left]} [/align][align=left]Task.WaitAll(tasks.ToArray());[/align][align=left]
[/align][align=left]***附件停止解析***[/align][align=left]
[/align][align=left] [/align][align=left]好,我们先把这个项目保存,等会用,现在我们要做一个假设备,也就是模拟设备,来给云发送“假”数据[/align][align=left]***附件停止解析***[/align][align=left]Step 4[/align][align=left] [/align][align=left]1. 在解决方案资源管理器中,右键单击“SimulatedDevice”项目,然后单击“管理 NuGet 包”。[/align][align=left]2. 在“NuGet 包管理器”窗口中,选择“浏览”,搜索 Microsoft.Azure.Devices.Client,选择“安装”以安装 Microsoft.Azure.Devices.Client 包 [/align]
[align=left]***附件停止解析***[/align][align=left]在 Program.cs 文件顶部添加以下 using 语句[/align]
[align=left]usingMicrosoft.Azure.Devices.Client;[/align][align=left]using Newtonsoft.Json;[/align][align=left]
[/align][align=left]***附件停止解析***[/align][align=left]将以下字段添加到 Program 类,这时候就用上了刚刚我们记下的主机名跟Step2里注册的设备密钥[/align]
[align=left]static DeviceClient deviceClient;[/align][align=left]static string iotHubUri ="{iot hub hostname}";[/align][align=left]static string deviceKey ="{device key}";[/align][align=left]***附件停止解析***[/align][align=left]
[/align][align=left]将以下方法添加到 Program [/align]
[align=left]private static async voidSendDeviceToCloudMessagesAsync()[/align][align=left] {[/align][align=left] double minTemperature = 20;[/align][align=left] double minHumidity = 60;[/align][align=left] Random rand = new Random();[/align][align=left] [/align][align=left] while (true)[/align][align=left] {[/align][align=left] double currentTemperature =minTemperature + rand.NextDouble() * 15;[/align][align=left] double currentHumidity = minHumidity +rand.NextDouble() * 20;[/align][align=left] [/align][align=left] var telemetryDataPoint = new[/align][align=left] {[/align][align=left] deviceId ="myFirstDevice",[/align][align=left] temperature = currentTemperature,[/align][align=left] humidity = currentHumidity[/align][align=left] };[/align][align=left] var messageString =JsonConvert.SerializeObject(telemetryDataPoint);[/align][align=left] var message = newMessage(Encoding.ASCII.GetBytes(messageString));[/align][align=left] message.Properties.Add("temperatureAlert",(currentTemperature > 30) ? "true" : "false");[/align][align=left] [/align][align=left] awaitdeviceClient.SendEventAsync(message);[/align][align=left] Console.WriteLine("{0} >Sending message: {1}", DateTime.Now, messageString);[/align][align=left] [/align][align=left] await Task.Delay(1000);[/align][align=left] }[/align][align=left] }[/align][align=left]***附件停止解析***[/align][align=left]
[/align][align=left] [/align][align=left]最后,在 Main 方法中添加以下行[/align]
[align=left] [/align][align=left]Console.WriteLine("Simulateddevice\n");[/align][align=left]deviceClient =DeviceClient.Create(iotHubUri, newDeviceAuthenticationWithRegistrySymmetricKey("myFirstDevice",deviceKey), TransportType.Mqtt);[/align][align=left]SendDeviceToCloudMessagesAsync();[/align][align=left]Console.ReadLine();[/align][align=left]***附件停止解析***[/align][align=left]
[/align][align=left]然后设置启动项目,右击解决方案,找到“设置启动项目”按图操作[/align][align=left]
[/align][align=left]***附件停止解析***[/align]
[align=left]启动之后就是可以看到发送的消息,接收的消息,在Azure面板还能看到数据使用量 [/align][align=left]
[/align][align=left]***附件停止解析***[/align][align=left]三、 总结[/align][align=left]其实IOT Hub入门就是这样一个思路[/align][align=left]***附件停止解析***[/align]
[align=left]四、 最后[/align][align=left]下次我们”动真格“,上真设备。做一个温湿度采集并发送到云端,希望大家继续关注微软中国MSDN。[/align][align=left] [/align][align=left]这篇文章写的很粗略,有耐心的朋友可以看看官方文档,因为我都是从那抄的。(逃[/align][align=left] [/align][align=left]微软大法好![/align][align=left] [/align][align=left]谢谢大家[/align][align=right]MSP李桑郁[/align][align=right]2017.06.24[/align][align=left]参考资料来自:https://docs.azure.cn/zh-cn/iot-hub/iot-hub-csharp-csharp-getstarted[/align]

敬告:
为防止不可控的内容风险,本站已关闭新用户注册,新贴的发表及评论;
你现在看到的内容只是互联网用户曾经发表的言论快照,仅用于老用户留存纪念,且仅与科技行业相关,全部内容不代表本站观点及立场;
本站重新开放前已针对包括用户隐私、版权保护、信息安全、国家政策在内的各种互联网法律法规要求,执行了隐患内容的自查、屏蔽和删除;
本站目前所属个人主体,未有任何盈利安排与计划,且与原WFUN.COM所属公司不存在任何关联关系;
如果本帖内容或者相关资源侵犯到您的合法权益,或者您认为存在问题,那么请您务必点此举报或投诉!
全部回复:
老****馆 UID.2871322
2017-06-25 回复

本帖最后由 老李拉面馆 于 2017-6-25 23:50 编辑

好了,排版改好了【yeah】

老****馆 UID.2871322
2017-06-25 回复

我把文档传到百度云上了,大家觉得看不习惯可以下word文档慢慢看~

链接:http://pan.baidu.com/s/1gfaLigz 密码:hs90

老****馆 UID.2871322
2017-06-25 回复

写了很长时间才弄完,虽然都是看文档抄来的,但是我自己做过,才分享给大家。虽然我讲的没有官方那么棒,但是比较实用。希望大家不会吐槽。。

第一颗苹果 UID.1327559
2017-06-26 使用 Lumia 640 回复

排版好乱没法看

老****馆 UID.2871322
2017-06-26 回复

Quote***链接停止解析***
排版好乱没法看


为了突出重点,有些字是很大,排版不是很乱啊

wind UID.62
2017-06-26 回复

Quote***链接停止解析***
排版好乱没法看


您是用手机看的吧,这种技术贴,建议还是开电脑看吧。

dea****001 UID.103336
2017-07-08 回复

楼主加油!赞!

ykz****927 UID.1015953
2017-08-31 回复

学习了,好帖子。

本站使用Golang构建,点击此处申请开源鄂ICP备18029942号-4联系站长投诉/举报