From 92be574003c3033fd3b531a1636e1da3042dd254 Mon Sep 17 00:00:00 2001 From: Chipalo Street Date: Fri, 9 Dec 2016 14:21:56 -0800 Subject: [PATCH] Added a SDK overview to the root README --- README.md | 27 +++++++++++++++++++-------- doc/media/READMEDiagram.png | Bin 0 -> 14349 bytes 2 files changed, 19 insertions(+), 8 deletions(-) create mode 100644 doc/media/READMEDiagram.png diff --git a/README.md b/README.md index 19546a36..876e3d67 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,24 @@ This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments -# [Azure IoT Gateway SDK](https://azure.microsoft.com/en-us/services/iot-hub/iot-gateway-sdk/) -Using this SDK, developers write applications that enable gateway-connected devices to -communicate with Azure IoT Hub. Such applications use a collection of **modules** to aggregate -and transform data, process commands, or perform any number of related tasks. Modules -communicate with one another via a message broker. Developers can choose from available modules -or write their own to create gateways tailored to any scenario. - -Visit http://azure.com/iotdev to learn more about developing applications for Azure IoT. +# Azure IoT Gateway SDK +IoT scenarios vary drastically between industries and even between customers within the same industry. +The Azure IoT Gateway SDK lets you build IoT solutions tailored to your exact scenario. Connect new +or existing devices, regardless of protocol. Process the data in an on-premises gateway using the +language of your choice (Java, C#, Node.js, or C), before sending it to the cloud. Deploy the solution +on hardware that meets your performance needs and runs the operating system of your choice. + +In the image below an existing device has been connected to the cloud using edge intelligence. The +on-premises gateway not only preforms protocol adaptation which allows the device to send data to the +cloud, it also filters the data so that only the most important information is uploaded. + +![](doc/media/READMEDiagram.png) + +Using existing modules from the Azure IoT Gateway SDK ecosystem significantly reduces your development +and maintenance costs. Running the gateway on-premises opens up all kinds of scenarios like +communicating between devices in real time, operating your IoT solution with an intermittent cloud +connection, or enforcing additional security requirements. + +Visit https://azure.microsoft.com/en-us/services/iot-hub/iot-gateway-sdk/ to learn more about the Azure IoT Gateway SDK. ## SDK Modules The following modules are available in this repository: diff --git a/doc/media/READMEDiagram.png b/doc/media/READMEDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..808e92019a1f46776b3db19e0b9f213990e17f93 GIT binary patch literal 14349 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 literal 0 HcmV?d00001