IoT Hub
Getting started
Install iot extension
az extension add --name azure-iot
add device:
az iot hub device-identity create -d simDevice -n iothub.azure-devices.net
simulate activity:
az iot device simulate -d simDevice -n iothub.azure-devices.net
View Events:
az iot hub monitor-events --output table -p all -n iothub.azure-devices.net
Example message with no properties
{ 'Message Properties': { 'content_encoding': 'utf-8',
                          'content_type': 'text/plain; charset=UTF-8'},
  'Payload': 'lol',
  'Topic': '/devices/simDevice/messages/devicebound'}
Example message with one property
{ 'Message Properties': { 'content_encoding': 'utf-8',
                          'content_type': 'text/plain; charset=UTF-8',
                          'key_test': 'value_test'},
  'Payload': 'test',
  'Topic': '/devices/simDevice/messages/devicebound'}
 ```
Example message with multiple properties
```json
{ 'Message Properties': { '1': '1',
                          '2': '2',
                          'content_encoding': 'utf-8',
                          'content_type': 'text/plain; charset=UTF-8',
                          'key_test': 'value_test'},
  'Payload': 'multi test',
  'Topic': '/devices/simDevice/messages/devicebound'}
One you have devices it is possible to query the device data e.g.:
SELECT devices.jobs.deviceId, devices.jobs.status, devices.jobs.connectionState FROM devices
Ubuntu Demo
Requirements
pip3 install azure-iot-device
import time
import random
from azure.iot.device import IoTHubDeviceClient, Message
# Replace with your device's connection string from the IoT Hub device details page (see devices)
CONNECTION_STRING = "HostName=<your-iot-hub-hostname>;DeviceId=<your-device-id>;SharedAccessKey=<your-device-key>"
# Define a telemetry format
MSG_TXT = '{{"temperature": {temperature}, "humidity": {humidity}}}'
def main():
    # Create a device client
    device_client = IoTHubDeviceClient.create_from_connection_string(CONNECTION_STRING)
    # Connect to IoT Hub
    print("Connecting to IoT Hub...")
    device_client.connect()
    print("Connected.")
    try:
        while True:
            # Generate random telemetry data
            temperature = 20.0 + (5.0 * random.random())
            humidity = 60.0 + (10.0 * random.random())
            # Create the message by formatting the JSON payload
            msg_text_formatted = MSG_TXT.format(temperature=temperature, humidity=humidity)
            message = Message(msg_text_formatted)
            # (Optional) Add custom application properties if needed
            # message.custom_properties["sensortype"] = "bme280"
            print("Sending message: {}".format(message))
            device_client.send_message(message)
            print("Message successfully sent.")
            # Wait some time before sending the next message
            time.sleep(5)
    except KeyboardInterrupt:
        print("Simulation stopped by user.")
    finally:
        device_client.disconnect()
if __name__ == "__main__":
    main()
ESP32 Weather Report
Prepare ESP32
For a BME280 Sensor (I2C Setup) use the following connections:
- ESP32 3.3V to BME280 VIN
- ESP32 GND to BME280 GND
- ESP32 GPIO 21 (SDA) to BME280 SDA
- ESP32 GPIO 22 (SCL) to BME280 SCL
Pinout of my ESP32:

Pinout of my BME280 Sensor:

So the connection should look like this:

Once you are done, your IoT Device should look like this or better:

Prepare PC
Install azure-iot:
az extension add --name azure-iot
or
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
az extension add --name azure-iot
Install Arduino IDE and make sure the following Additional Boards manger URLs are added (comma separated):
https://dl.espressif.com/dl/package_esp32_index.json,https://espressif.github.io/arduino-esp32/package_esp32_index.json
Connect the ESP32 and check if you see the device on any COM port. On Windows, your attached ESP32 should appear in the device manager for example like this:

Arduino IDE
Install the Azure SDK for Embedded C library:
- Go to Sketch, Include Library, Manage Libraries... and search for and install azure-sdk-for-c.
Here is the example code i used (other parts where not modified):
You need to change the variables in "Variables in iot_config.h".
Then install the following libraries:
- Adafruit_BME280_Library
- Azure SDK for C
Installed libraries for reference should look like this (probably newer versions):


Now follow these instructions
- Then go to menu File, Examples, azure-sdk-for-c and click on az_esp32 to open the sample.
- Enter your Azure IoT Hub and WIFI information into the sample's iot_configs.h.
- Go to menu Tools, Board and select ESP32.
- Upload the sketch by navigating to Sketch and click on Upload.
Optionally check the configure settings under the Tools menu, set the following:
- Upload Speed: 115200 (default is also acceptable, but faster speeds like 921600 can be used).
- CPU Frequency: 240 MHz (recommended for full performance).
- Flash Frequency: 40 MHz.
- Partition Scheme: Use "Default 4MB with spiffs" unless you have a specific reason to choose another.
- Port: Select the COM port that appears when you connect the ESP32 to your computer.