查看: 5084|回复: 8

[原创] 【小学三年级系列】 小学三年级入门Azure IOT Hub

[复制链接]

签到天数: 49 天

连续签到: 1 天

[LV.5]常住居民I

16

主题

222

积分

6

支持

发表于 2017-6-25 22:43:30 | 显示全部楼层 |阅读模式

马上注册,享受积分奖励和更多功能,让您轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

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

小学三年级入门AzureIOT Hub
MSP李桑郁
前记:作为一名软粉与嵌入式开发者,一直渴望我软能够向嵌入式伸出魔爪,因为这是一个“会动的”东西。偶然有一天看见我软真的有这方面的产品,好比如Windows CE、Windows Embedding、Azure IOT Hub等等….我的内心十分激动。
去年在微软Ignite大会上,听到专家讲解iot 的相关内容,我发现我对嵌入式的认知实在太过于狭隘。于是开始学习“上云”之路。
这篇文章将简单粗暴的为大家介绍IOT Hub究竟是个啥!真的就那么高端?

一、  IOT Hub到底能干嘛
说俗一点就是在电脑上看到我小小的传感器到底读了什么数据出来。
读完了还能管理我这些成千上百万的传感器的运行状态
就像这样
      1.png                         
二、  这玩意怎么用
看图!
2.png
Step 1

分别填入你的信息,名称跟资源组你想怎么填怎么填,IOTHub单位我们就填1(根据你实际情况而定),不明白你可以看他的提示.
3.png
例如:你有接近2000个传感器,你可以填10Iot Hub单位,再选S1或者S2标准套餐,费用根据你的设备数还有消息量与使用天数决定。
因为是测试,我们就选免费的F1免费套餐。

4.png
创建完了就进入IOTHub
5.png

记下你的主机名(IOT Hub名称+.azure-devices.net)高考要考的等会要用的
好,接下来
再复制你的主密钥,等会注册设备要用
6.png
7.png
Step 2
至此,我们可以把Azure放在一边了,接下来我们先创建项目
这样操作
8.png
由于我已经创建了就不再创建新项目了,
来,我们一起来看看
9.png
创建完项目,我们点击注册设备的项目CreateDeviceIdentity(就是我刚刚填的RegisterDevice)
10.png
然后
“NuGet 包管理器窗口中,选择浏览,搜索 microsoft.azure.devices,选择安装以安装 Microsoft.Azure.Devices
11.png
Program.cs 文件顶部添加以下 using 语句:
using Microsoft.Azure.Devices;
usingMicrosoft.Azure.Devices.Common.Exceptions;

12.png


将以下字段添加到 Program 类。 "{iot hub connection string}"换成你的主密钥
static RegistryManagerregistryManager;
static string connectionString =;

13.png


将以下方法添加到 Program
private static async TaskAddDeviceAsync()
{
   string deviceId = "myFirstDevice";
   Device device;
   try
   {
        device = await registryManager.AddDeviceAsync(newDevice(deviceId));
   }
   catch (DeviceAlreadyExistsException)
   {
        device = awaitregistryManager.GetDeviceAsync(deviceId);
   }
   Console.WriteLine("Generated device key: {0}",device.Authentication.SymmetricKey.PrimaryKey);
}
14.png

Main 方法中添加以下行
registryManager =RegistryManager.CreateFromConnectionString(connectionString);
AddDeviceAsync().Wait();
Console.ReadLine();

15.png


运行,然后记下这个设备密钥
16.png

Step 3
接下来我们要看到设备发过来啥消息,所以我们得再做一个控制台应用,还是在这个解决方案里新建一个项目,取名叫ReadDeviceToCloudMessages

“NuGet 包管理器窗口中,搜索 WindowsAzure.ServiceBus
17.png

18.png

19.png



在 Program.cs 文件顶部添加以下 using 语句
usingMicrosoft.ServiceBus.Messaging;
using System.Threading;
20.png

将以下字段添加到 Program 类,同样,把"{iot hub connection string}"换成你的主密钥

static string connectionString = "{iothubconnection string}";
static string iotHubD2cEndpoint ="messages/events";
static EventHubClient eventHubClient;

21.png

将以下方法添加到 Program

private static async TaskReceiveMessagesFromDeviceAsync(string partition, CancellationToken ct)
{
    vareventHubReceiver =eventHubClient.GetDefaultConsumerGroup().CreateReceiver(partition,DateTime.UtcNow);
    while(true)
    {
       if (ct.IsCancellationRequested) break;
       EventData eventData = await eventHubReceiver.ReceiveAsync();
       if (eventData == null) continue;
       string data = Encoding.UTF8.GetString(eventData.GetBytes());
       Console.WriteLine("Message received. Partition: {0} Data:'{1}'", partition, data);
    }
}

22.png

Main 方法中添加以下行

Console.WriteLine("Receivemessages. Ctrl-C to exit.\n");
eventHubClient= EventHubClient.CreateFromConnectionString(connectionString,iotHubD2cEndpoint);
vard2cPartitions = eventHubClient.GetRuntimeInformation().PartitionIds;
CancellationTokenSourcects = new CancellationTokenSource();
System.Console.CancelKeyPress+= (s, e) =>
{
  e.Cancel = true;
  cts.Cancel();
  Console.WriteLine("Exiting...");
};
vartasks = new List<Task>();
foreach(string partition in d2cPartitions)
{
  tasks.Add(ReceiveMessagesFromDeviceAsync(partition, cts.Token));
}  
Task.WaitAll(tasks.ToArray());

23.png

好,我们先把这个项目保存,等会用,现在我们要做一个假设备,也就是模拟设备,来给云发送“假”数据
24.png
Step 4
1.    在解决方案资源管理器中,右键单击“SimulatedDevice”项目,然后单击“管理 NuGet 包”。
2.   在“NuGet 包管理器”窗口中,选择“浏览”,搜索 Microsoft.Azure.Devices.Client,选择“安装”以安装 Microsoft.Azure.Devices.Client

25.png
在 Program.cs 文件顶部添加以下 using 语句

usingMicrosoft.Azure.Devices.Client;
using Newtonsoft.Json;

26.png
将以下字段添加到 Program 类,这时候就用上了刚刚我们记下的主机名跟Step2里注册的设备密钥

static DeviceClient deviceClient;
static string iotHubUri ="{iot hub hostname}";
static string deviceKey ="{device key}";
27.png

将以下方法添加到 Program

private static async voidSendDeviceToCloudMessagesAsync()
{
    double minTemperature = 20;
    double minHumidity = 60;
    Random rand = new Random();
    while (true)
    {
         double currentTemperature =minTemperature + rand.NextDouble() * 15;
         double currentHumidity = minHumidity +rand.NextDouble() * 20;
         var telemetryDataPoint = new
         {
             deviceId ="myFirstDevice",
             temperature = currentTemperature,
             humidity = currentHumidity
         };
         var messageString =JsonConvert.SerializeObject(telemetryDataPoint);
         var message = newMessage(Encoding.ASCII.GetBytes(messageString));
        message.Properties.Add("temperatureAlert",(currentTemperature > 30) ? "true" : "false");
         awaitdeviceClient.SendEventAsync(message);
         Console.WriteLine("{0} >Sending message: {1}", DateTime.Now, messageString);
         await Task.Delay(1000);
    }
}
28.png

最后,在 Main 方法中添加以下行

Console.WriteLine("Simulateddevice\n");
deviceClient =DeviceClient.Create(iotHubUri, newDeviceAuthenticationWithRegistrySymmetricKey("myFirstDevice",deviceKey), TransportType.Mqtt);
SendDeviceToCloudMessagesAsync();
Console.ReadLine();
29.png

然后设置启动项目,右击解决方案,找到“设置启动项目”按图操作

30.png

启动之后就是可以看到发送的消息,接收的消息,在Azure面板还能看到数据使用量

31.jpg
三、  总结
其实IOT Hub入门就是这样一个思路
32.png

四、  最后
下次我们”动真格“,上真设备。做一个温湿度采集并发送到云端,希望大家继续关注微软中国MSDN。
这篇文章写的很粗略,有耐心的朋友可以看看官方文档,因为我都是从那抄的。(逃
微软大法好!
谢谢大家
MSP李桑郁
2017.06.24
参考资料来自:https://docs.azure.cn/zh-cn/iot-hub/iot-hub-csharp-csharp-getstarted

签到天数: 49 天

连续签到: 1 天

[LV.5]常住居民I

16

主题

222

积分

6

支持

 楼主| 发表于 2017-6-25 22:49:36 | 显示全部楼层
本帖最后由 老李拉面馆 于 2017-6-25 23:50 编辑

好了,排版改好了【yeah】
[你知道吗]:

签到天数: 49 天

连续签到: 1 天

[LV.5]常住居民I

16

主题

222

积分

6

支持

 楼主| 发表于 2017-6-25 22:54:34 | 显示全部楼层
我把文档传到百度云上了,大家觉得看不习惯可以下word文档慢慢看~

链接:http://pan.baidu.com/s/1gfaLigz 密码:hs90
[你知道吗]:

签到天数: 49 天

连续签到: 1 天

[LV.5]常住居民I

16

主题

222

积分

6

支持

 楼主| 发表于 2017-6-25 22:58:24 | 显示全部楼层
写了很长时间才弄完,虽然都是看文档抄来的,但是我自己做过,才分享给大家。虽然我讲的没有官方那么棒,但是比较实用。希望大家不会吐槽。。

签到天数: 873 天

连续签到: 4 天

[LV.10]以坛为家III

5

主题

1963

积分

3

支持

彩虹勋章

发表于 2017-6-26 01:21:37 来自手机 | 显示全部楼层
排版好乱没法看

来自:Lumia 640 -智机社区客户端
[你知道吗]:

签到天数: 49 天

连续签到: 1 天

[LV.5]常住居民I

16

主题

222

积分

6

支持

 楼主| 发表于 2017-6-26 08:43:31 | 显示全部楼层

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

签到天数: 676 天

连续签到: 1 天

[LV.9]以坛为家II

357

主题

1万

积分

2万

支持

管理员

Rank: 9Rank: 9Rank: 9

积分
11934
发表于 2017-6-26 11:15:03 | 显示全部楼层

您是用手机看的吧,这种技术贴,建议还是开电脑看吧。
包容发帖者观点,感恩回复者解答,敬重开发者奉献,支持分享者给力,标明原创者出处。
[你知道吗]:

签到天数: 89 天

连续签到: 1 天

[LV.6]常住居民II

43

主题

432

积分

14

支持

开发之神

Rank: 6Rank: 6

积分
432

微软MVP

发表于 2017-7-8 09:01:08 | 显示全部楼层
楼主加油!赞!

签到天数: 2 天

连续签到: 1 天

[LV.1]初来乍到

0

主题

56

积分

0

支持

发表于 2017-8-31 22:08:21 | 显示全部楼层
学习了,好帖子。
[你知道吗]:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

        

网站地图| 小黑屋|京ICP证150706号|京B2-20160045| 京公网安备11010802018258号

Powered by Discuz! X3.4 / Copyright 2010-2017 © 智机网 WFUN.COM Inc. All rights reserved.

快速回复 返回顶部 返回列表