Introduction
In this article, we are going to see how to send telemetry from an IoT device to the Azure IoT Hub using C#. IoT Hub is a cloud platform to securely connect billions of IoT devices to create IoT applications. Please read the previous parts of the article before continuing with this one.
- How To Create Azure IoT Hub Using PowerShell
- How to Register IoT Device in Azure IoT Hub Using PowerShell
Creating a C# Console Application
Installing Microsoft Azure IoT Device Client SDK
-
Go to Project -> Manage NuGet Packages.
-
Click Browse tab and search for Microsoft.Azure.Devices.Client. You will see the Microsoft.Azure.Devices.Client device SDK will have listed in the search result and click Install button
-
Now, click the I Accept button to accept the license agreement.
-
It will take a few minutes to install the SDK in our project
Get IoT device connect string from Azure IoT Hub
-
Double click the device, you can see the device detailed information like device id, Primary Key, Secondary Key, Connection String(primary key) and Connection String (secondary key).
-
Using Microsoft.Azure.Devices.Client library we can create device client. The device client has CreateFromConnectionString method which requires device connection string as parameter. Create a read only static string s_connectionString01 and assign the connection string that we copy from Azure Portal.
-
Here you can create a random temperature and humidity values using Random() method.
-
Now open the program.cs file and type the below code
- using System;
- using Microsoft.Azure.Devices.Client;
- using System.Text;
- using Newtonsoft.Json;
- using System.Threading.Tasks;
-
- namespace SimulationDeviceToCloud
- {
- class Program
- {
- private static DeviceClient s_deviceClient;
- private readonly static string s_connectionString01 = "HostName=HubflyIoTHubConnect.azure-devices.net;DeviceId=RaspberryPi;SharedAccessKey=b9g+mmjAV8SqBlv8o/TChP0WBFCL5wi8/pDccXzBoys=";
- static void Main(string[] args)
- {
- s_deviceClient = DeviceClient.CreateFromConnectionString(s_connectionString01, TransportType.Mqtt);
- SendDeviceToCloudMessagesAsync(s_deviceClient);
- Console.ReadLine();
-
- }
-
- private static async void SendDeviceToCloudMessagesAsync(DeviceClient s_deviceClient)
- {
- try
- {
- 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
- {
-
- temperature = currentTemperature,
- humidity = currentHumidity
- };
-
- string messageString = "";
-
-
-
- messageString = JsonConvert.SerializeObject(telemetryDataPoint);
-
- var message = new Message(Encoding.ASCII.GetBytes(messageString));
-
-
-
-
-
-
- await s_deviceClient.SendEventAsync(message);
- Console.WriteLine("{0} > Sending message: {1}", DateTime.Now, messageString);
- await Task.Delay(1000 * 10);
-
- }
- }
- catch (Exception ex)
- {
-
- throw ex;
- }
- }
- }
- }
-
That's it. Now, run the web application, go to Debug menu, and click on "Start without Debugging" or press F5. This will display the below result
I hope you have learned how to send telemetry from an IoT device to an Azure IoT Hub using C#. Feel free to fill up the comment box below if you need any further assistance from us.