Skip to content
This repository has been archived by the owner on Dec 8, 2023. It is now read-only.

Azure/iot-plug-and-play-bridge

Repository files navigation

⚠️ Note: Thank you for your interest in the IoT Plug and Play bridge, due to the changing needs of our customers and partners, evolving technology landscape, and innovations in Azure IoT, we have come to the decision to deprecate the IoT Plug and Play bridge. The repo will be marked as read-only repository on November 30th 2023. Thank you to everyone who contributed bug fixes and new adapters for connecting devices with IoT Plug and Play and thanks to your support on this journey. Developers looking to connect their device can continue to use the Azure IoT Device SDKs directly. You can find the latest IoT innovations at https://azure.microsoft.com/solutions/iot/. Please note that any use of archived repositories introduces more risks from a security standpoint and code from this repository should no longer be used as is.

IoT Plug and Play bridge

Introduction

IoT Plug and Play bridge is the open source effort from Microsoft that connects the PC sensor and peripheral ecosystem to Azure. It builds on top of IoT Plug and Play so that with minimal to no code, developers can easily connect peripherals/sensors to Azure, remotely access their data, monitor them, and manage them. This allows developers to perform analytics and gain valuable insights on their IoT devices from either the edge or the cloud. The IoT Plug and Play bridge accomplishes this without requiring peripherals to have direct Azure connectivity, enabling them to use a Windows or Linux host as a gateway to Azure instead. Because of this, it is particularly well suited for connecting existing/constrained sensors to Azure.

IoT Plug and Play bridge can be deployed as a standalone executable on any IoT device, industrial PC, server, or gateway running Windows 10 or Linux. It can also be compiled into your application code. A simple configuration file tells the IoT Plug and Play bridge which sensors and peripherals should be exposed up to Azure. Once configured, the IoT Plug and Play bridge uses the Azure IoT Hub Device C SDK to create a single device client handle, corresponding to a top level interface with specific model ID (DTMI) and supported IoT Plug and Play (PnP) components as specified in the model,for the specified sensors and peripherals up to Azure.

IoT Plug and Play bridge can also be deployed as an IoT edge module running on any IoT edge device from an edge runtime running Linux. When the IoT Plug and Play bridge starts running as an edge module, it creates a single module client handle, corresponding to a top level interface with specific model ID (DTMI). Plug and Play Bridge adapter and IoT Plug and Play (PnP) components are not created until a property update for component and adapter related configuration (same as the JSON payload in the configuration file for IoT device) is received by the module. The JSON payload for the configuration, which tells the IoT Plug and Play bridge which sensors and peripherals should be exposed up to Azure, must be sent from the cloud to the module in the form of a desired property update for PnpBridgeConfig. The Plug and Play bridge will wait for this property update from the module twin to begin adapter and component configuration. Once configured, the IoT Plug and Play bridge uses the Azure IoT Hub Module C SDK to begin device <-> cloud communication corresponding to the sensors and peripherals configured.

Developers can then use existing Azure services and solution accelerators to receive data from and send commands to their sensors and peripherals.

Get Started - Documentation

To get started with a simple example and learn about IoT Plug and Play bridge, view the How to connect an IoT Plug and Play bridge to IoT Hub. Follow Build and deploy the IoT Plug and Play bridge and Extend the IoT Plug and Play bridge to get started on building, deploying and extending the IoT Plug and Play bridge.

Peripherals and sensors supported by default

IoT Plug and Play bridge supports the following types of peripherals by default. Developers can extend the IoT Plug and Play bridge to support additional peripherals via the instructions in the Extend the IoT Plug and Play bridge.

✔️ feature available ➕ feature planned but not supported ➖ no support planned N/A - Not Applicable

Peripheral (with Link to Adaptor Documentation) Windows Linux
Bluetooth LE ✔️
Cameras [1] ✔️
Modbus ✔️ ✔️
MQTT ✔️ ✔️
Serial [2] ✔️ ✔️
Windows USB peripherals ✔️ N/A

[1] All cameras supported by Windows OS (Webcam, MIPI cameras and IP of RGB/IR/Depth cameras). To enable full support of ONVIF cameras, it is recomended to use 20H1 or later builds.

[2] For peripherals controlled by MCUs that are accessed over serial ports:

  • Refer to the SerialPnP documentation for information on how such devices should self-describe their interfaces to the IoT Plug and Play bridge

Pre-Requisites

OS Platform

The following OS platforms and versions are supported:

Platform Supported Versions
Windows 10 All Windows SKUs are supported. For example:
  • IoT Enterprise
  • Server
  • Desktop
  • IoT Core

  • For Camera health monitoring functionality, 20H1 or later build is recommended. All other functionality is available on all Windows 10 builds.
    Linux Tested and Supported on Ubuntu 18.04, functionality on other distributions has not been tested.

    Hardware

    • Any hardware platform capable of supporting the above OS SKUs and versions.
    • Serial, USB, Bluetooth, and Camera peripherals and sensors are supported natively. The IoT Plug and Play Bridge can be extended to support any custom peripheral or sensor (see peripherals section above).

    Development Environment

    Azure IoT Products and Tools

    Note: IoT Plug and Play support is not included in basic-tier IoT Hubs.

    IoT Plug and Play bridge Architecture

    Architecture

    Contributing

    We encourage community members to write and contribute their own IoT Plug and Play bridge adaptors. This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.

    Microsoft collects performance and usage information which may be used to provide and improve Microsoft products and services and enhance your experience. To learn more, review the privacy statement.

    Contributing Code

    We require pull-requests for code and documentation to be submitted against the master branch in order to review and run it in our gated build system. We try to maintain a high bar for code quality and maintainability, we request having tests associated with the code, and if necessary, additions/modifications to the requirement documents.

    Please ensure you review and sign the Contribution License Agreement (CLA). A friendly bot will remind you about it when you submit your pull-request. :)

    Support

    For any questions, you can contact - pnpbridge@microsoft.com. Found a bug? Please help us fix it by thoroughly documenting it and filing an issue on GitHub.