This article is contributed. See the original author and article here.

You can now connect existing sensors to Azure with little to no-code using IoT Plug and Play bridge! For developers who are building IoT solutions with existing hardware attached to a Linux or Windows gateway, the IoT Plug and Play bridge provides you an easy way to connect these devices to IoT Plug and Play compatible services. For supported protocols, the bridge requires modification of a simple JSON. The IoT Plug and Play bridge is open-source and can be easily extended to support additional protocols. It supports the latest version of IoT Plug and Play and Digital Twins Definition Language.

 

 

Are you an IoT device developer or IoT solution builder trying to work with existing sensors? Often the code on these sensors can’t be updated to run the latest Azure IoT Device SDK or these sensors are not able to connect directly to the internet. However, many of these sensors can connect to a Windows or Linux gateway with device drivers and support for standard protocols with OS APIs. The IoT Plug and Play bridge enables you to connect these existing sensors without modifying them. It is an open-source application that bridges the gap between the OS APIs and Azure IoT Device SDKs, expanding the reach of devices your IoT solution targets.

 

The architecture diagram of the IoT Plug and Play bridge.The architecture diagram of the IoT Plug and Play bridge.

 

The IoT Plug and Play supports multiple protocols through a set of existing “PnP Bridge Adapters”. Here’s what’s supported out of the box today:

 

Adaptor protocols currently supported by default for IoT Plug and Play bridgeAdaptor protocols currently supported by default for IoT Plug and Play bridge

 

For example, there is a Windows Bluetooth adapter that let you connect Bluetooth device advertisements to IoT Plug and Play interfaces. All you need to do is modify a configuration JSON and then compile and run the IoT Plug and Play bridge. If you are only using the supported protocols you can download a pre-compiled version of the bridge from our releases page: www.aka.ms/iot-pnp-bridge-releases

 

Configuring the IoT Plug and Play bridge

Here’s an example of what that configuration looks like. The first part provides the bridge connection details to the bridge. You can use either a connection string or the IoT Hub Device Provisioning Service. You’ll also specify the device id and IoT Plug and Play model ID:

 

 

 

 

 

"$schema": "../../../pnpbridge/src/pnpbridge_config_schema.json",
    "pnp_bridge_connection_parameters": {
      "connection_type" : "dps",
      "root_interface_model_id": "dtmi:com:example:RootPnpBridgeBluetoothDevice;1",
      "auth_parameters" : {
        "auth_type" : "symmetric_key",
        "symmetric_key" : "InNbAialsdfhjlskdflaksdDUMMYSYMETTRICKEY=="
      },
      "dps_parameters" : {
        "global_prov_uri" : "global.azure-devices-provisioning.net",
        "id_scope": "0ne00000000",
        "device_id": "bluetooth-sensor-3"
      }
    }

 

 

 

 

 

The second part of the configuration maps the hardware parameters of the device to IoT Plug and Play interfaces. Here we map Bluetooth specific addresses and offsets to IoT Plug and Play interfaces. This is done in two parts: a global adapter configuration (think of these as global variables to configure each PnP Bridge Adapter) and interface specific configuration (mappings specific to each Plug and Play interface):

 

 

 

 

 

    "pnp_bridge_debug_trace": false, 
    "pnp_bridge_config_source": "local", 
    "pnp_bridge_interface_components": [ 
        { 
            "_comment": "Component 1 - Bluetooth Device", 
            "pnp_bridge_component_name": "Ruuvi", 
            "pnp_bridge_adapter_id": "bluetooth-sensor-pnp-adapter", 
            "pnp_bridge_adapter_config": { 
                "bluetooth_address": "267541100483322", 
                "blesensor_identity" : "Ruuvi" 
            }              
        } 
    ], 
    "pnp_bridge_adapter_global_configs": { 
        "bluetooth-sensor-pnp-adapter": { 
            "Ruuvi" : { 
                "company_id": "0x499", 
                "endianness": "big", 
                "telemetry_descriptor":[ 
                    { 
                      "telemetry_name": "humidity", 
                      "data_parse_type": "uint8", 
                      "data_offset": 1, 
                      "conversion_bias": 0, 
                      "conversion_coefficient": 0.5 
                    }, 
... 
                ] 
            } 
        } 
    }

 

 

 

 

 

That’s it! You can now run the bridge with this configuration and start to see telemetry reporting in IoT Hub or IoT Explorer. Each downstream device from the bridge appears as an interface for the root bridge device. In this example you see the BLE sensor exposed a “Ruuvi” interface of the “RootPnpBridgeBluetoothDevice” root device interface:

The DTDL model content for IoT Plug and Play bridgeThe DTDL model content for IoT Plug and Play bridge

 

Both the “Ruuvi” and “RootPnpBridgeBluetoothDevice” interface are modeled using Digital Twins Definition Language. You can find more samples of these interfaces for the bridge in the schemas folder. You can author your own models and use them with the bridge. You can use new Visual Studio Code and Visual Studio extensions to help you author these models.

 

Calls to Action

Brought to you by Dr. Ware, Microsoft Office 365 Silver Partner, Charleston SC.

%d bloggers like this: