⚠️ 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 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.
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.
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.
:heavy_check_mark: feature available :heavy_plus_sign: feature planned but not supported :heavy_minus_sign: no support planned N/A - Not Applicable
Peripheral (with Link to Adaptor Documentation) | Windows | Linux |
---|---|---|
Bluetooth LE | :heavy_check_mark: | :heavy_minus_sign: |
Cameras [1] | :heavy_check_mark: | :heavy_minus_sign: |
Modbus | :heavy_check_mark: | :heavy_check_mark: |
MQTT | :heavy_check_mark: | :heavy_check_mark: |
Serial [2] | :heavy_check_mark: | :heavy_check_mark: |
Windows USB peripherals | :heavy_check_mark: | 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:
The following OS platforms and versions are supported:
Platform | Supported Versions |
---|---|
Windows 10 | All Windows SKUs are supported. For example: 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. |
A development environment that supports compiling C++ such as: Visual Studio (Community, Professional, or Enterprise)- make sure that you include the Desktop Development with C++ workload when you install Visual Studio.
CMake - when you install CMake, select the option Add CMake to the system PATH
.
If you are building on Windows, you will also need to download Windows 17763 SDK: https://developer.microsoft.com/windows/downloads/windows-10-sdk
Azure IoT Hub Device Client C SDK and Azure IoT Hub Module Client C SDK . The included build scripts in this repo will automatically clone the required Azure IoT C SDK for you.
Note: IoT Plug and Play support is not included in basic-tier IoT Hubs.
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.
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. :)
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.