世の中IoTですよね。Windows 10のIoTから、クラウドにデータを上げたい! ということでやってみましょう。
まず、コンソールアプリを作って、NuGetでMicrosoft Azure Devicesで検索して出てきたものを追加して、以下のコードでデバイスキーを作ります。
using Microsoft.Azure.Devices; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DeviceKeyGenerator { class Program { static void Main(string[] args) { var connectionString = "HostName=XXXX.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=XXXX"; var deviceId = "iothubtest"; var rm = RegistryManager.CreateFromConnectionString(connectionString); var device = AddOrGetDeviceAsync(rm, deviceId).Result; Console.WriteLine(device.Authentication.SymmetricKey.PrimaryKey); } private static async Task<Device> AddOrGetDeviceAsync(RegistryManager rm, string deviceId) { try { return await rm.AddDeviceAsync(new Device(deviceId)); } catch(Microsoft.Azure.Devices.Common.Exceptions.DeviceAlreadyExistsException) { return await rm.GetDeviceAsync(deviceId); } } } }
connectionStringは、ポータルからとってきて、deviceIdは任意の文字列です。実行するとキーが得られるのでメモっておきます。
次にUWPアプリでNuGetでMicrosoft Azure Devices Clientで検索して出てきたやつを追加して以下のコードで送信します。ポイントはHttp1を指定してる所です。
const string HostName = "XXXXXX.azure-devices.net"; const string DeviceKey = "さっきコンソールアプリで出力されたやつ"; private async void ButtonGenerate_Click(object sender, RoutedEventArgs e) { var client = DeviceClient.Create( HostName, new DeviceAuthenticationWithRegistrySymmetricKey("iothubtest", DeviceKey), TransportType.Http1); var p = new Person { Name = this.TextBoxDeviceName.Name, Age = 40 }; var json = JsonConvert.SerializeObject(p); var m = new Message(Encoding.UTF8.GetBytes(json)); await client.SendEventAsync(m); }