# Device SDK

Since KPN Things is a data platform, it prescribes with which data format your Device should communicate with KPN Things. The KPN Things Device SDK helps you to quickly connect your Device to KPN Things.&#x20;

<figure><img src="https://1453626848-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl6RrePMSAjRvOgcHjMBZ%2Fuploads%2FEJtZZJ72Km3Gw2bohPYu%2Fimage.png?alt=media&#x26;token=b1ff6346-7566-4d6c-8c4c-a967553477a7" alt=""><figcaption><p>Device SDK on your Device to set up communication with KPN Things.</p></figcaption></figure>

You can find the Device SDK library on Github: <https://kpn-iot.github.io/thingsml-c-library/>

The Device SDK is mainly based on the [ThingsML](https://docs.kpnthings.com/kpn-things/building-blocks/data-processing/thingsml-and-senml/thingsml) data format. ThingsML is an extension of SenML created by KPN. For SenML we have also developed a library which is available for C, Python, and MicroPython. Visit the [SenML library documentation](https://kpn-iot.github.io/senml-library/).

The Device SDK is available in the following languages:

* [Things Device SDK in C++](https://github.com/kpn-iot/thingsml-c-library)
* [Things Device SDK in Python](https://github.com/kpn-iot/senml-python-library)
* [Things Device SDK in MicroPython](https://github.com/kpn-iot/senml-micropython-library)

## Supported devices <a href="#supported-platforms" id="supported-platforms"></a>

Specifically, the Device SDK has been tested on the following Devices:

<table data-header-hidden><thead><tr><th width="129">Language</th><th>LoRaWAN</th><th>M2M</th><th>Internet</th></tr></thead><tbody><tr><td><strong>Language</strong></td><td><strong>LoRaWAN</strong></td><td><strong>M2M</strong></td><td><strong>Internet</strong></td></tr><tr><td></td><td></td><td></td><td></td></tr><tr><td>C++</td><td><ul><li><a href="../../getting-started/tutorials/connect-devices/arduino-mkr-wan-1300-1310">Arduino MKR WAN 1300/1310</a></li></ul><p>Below are old devices, do not use for new designs</p><ul><li><a href="../../getting-started/tutorials/connect-devices/marvin-development-board">Marvin LoRaWAN developer board</a> (Arduino)</li><li><a href="https://kpn-iot.github.io/thingsml-c-library/?c--mbed#installation">STM32 Nucleo-L152RE</a> (Mbed OS)</li><li><a href="https://market.thingpark.com/sodaq-one-eu-rn2483-v3.html">Sodaq on</a></li></ul></td><td><ul><li><a href="../../getting-started/tutorials/connect-devices/arduino-mkr-nb-1500">Arduino MKR NB 1500</a></li></ul><p>Below are old devices, do not use for new designs</p><ul><li><a href="https://kpn-iot.github.io/thingsml-c-library/?c--arduino#installation">Arduino MKR GSM 1400</a></li><li><a href="../../getting-started/tutorials/connect-devices/sodaq-r412m">Sodaq Sara AFF</a> (Arduino)</li></ul><p><br><br></p></td><td><ul><li>PC (via <a href="https://bazel.build/">Bazel</a>)</li><li><a href="https://os.mbed.com/platforms/mbed-LPC1768/">mbed LPC1768</a></li><li><a href="https://www.espressif.com/en/products/hardware/esp32/overview">Esp32</a></li></ul></td></tr><tr><td>Python</td><td></td><td></td><td><ul><li>Raspberry 3</li><li>PC</li></ul></td></tr><tr><td><p>Micro</p><p>Python</p></td><td></td><td><p>This is an old device, do not use for new designs</p><ul><li><a href="https://docs.pycom.io/datasheets/development/gpy/">GPy</a></li></ul></td><td><p>This is an old device, do not use for new designs</p><ul><li><a href="https://docs.pycom.io/datasheets/development/wipy3/">WiPy</a></li></ul></td></tr></tbody></table>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.kpnthings.com/kpn-things/building-blocks/devices/device-sdk.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
