This repository contains an evaluation version of IoTerop's IOWA LwM2M stack, illustrating how to use the LwM2M SDK.
Please note:
Neither the SDK nor the samples are open source software but commercial software.
This code MUST NOT be used in a commercial product and is for evaluation ONLY. This code is provided as-is, under the associated license (see LICENSE.txt).
Want to buy the IOWA Commercial Version? Contact Us About Our Products.
With this code, you can jump into the Lightweight M2M protocol and validate the build and the execution of the IOWA stack on your device, but with some limitations:
IOWA Eval SDK | IOWA Full SDK | |
---|---|---|
Free for Evaluation purpose | Contact us | |
IOWA-based LwM2M Client | ✔️ | ✔️ |
IOWA-based LwM2M Server | ❌ | ✔️ |
IOWA-based Bootstrap Server | ❌ | ✔️ |
LwM2M 1.0 | ✔️ | ✔️ |
LwM2M 1.1 | ❌ | ✔️ |
LwM2M 1.2 | ❌ | ✔️ |
TLV Data Format | ✔️ | ✔️ |
LwM2M 1.1 Data Formats | ❌ | ✔️ |
LwM2M 1.2 Data Formats | ❌ | ✔️ |
Bootstrap Support | ❌ | ✔️ |
Mandatory LwM2M Objects | ✔️ | ✔️ |
CTO IPSO Objects | ✔️ | ✔️ |
Other IPSO Objects | ❌ | ✔️ |
Custom Objects Creation | ✔️ | ✔️ |
UDP Transport | ✔️ | ✔️ |
TCP Transport | ❌ | ✔️ |
WebSockets Transport | ❌ | ✔️ |
SMS Transport | ❌ | ✔️ |
COAP Block-Wise Transfer | ❌ | ✔️ |
DTLS Support | ✔️ | ✔️ |
TLS Support | ❌ | ✔️ |
OSCORE | ❌ | ✔️ |
Muti Server Management | ✔️ | ✔️ |
Registration Rules Configuration | ❌ | ✔️ |
Server Access Control | ❌ | ✔️ |
Firmware Update | ❌ | ✔️ |
MQTT Channels Configuration | ❌ | ✔️ |
Context Storage | ❌ | ✔️ |
Power Cycle Management | ❌ | ✔️ |
Connectivity Management | ❌ | ✔️ |
Notification Storage | ❌ | ✔️ |
Asynchronous Response Support | ❌ | ✔️ |
Payload Streaming | ❌ | ✔️ |
Source Code & C-Make | ✔️ | ✔️ |
Full Documentation | ❌ | ✔️ |
Logs | ✔️ | ✔️ |
Multithread Support | ❌ | ✔️ |
Python Binding | ❌ | ✔️ |
LwM2M Object Code Generation Tool | ❌ | ✔️ |
Several samples are provided in this repository. Each comes with its own README explaining its usage and presenting a break down of the code.
-
01-baseline_client: a minimal LwM2M Client connecting to one LwM2M Server and featuring only the mandatory LwM2M Objects.
-
02-IPSO_client: a LwM2M Client featuring an IPSO Temperature Object (ID: 3303) using IOWA built-in implementation.
-
03-custom_object_baseline: a LwM2M Client featuring an additional custom LwM2M Object.
-
04-custom_object_dynamic: same as 03-custom_object_baseline with dynamic Resource values.
-
05-custom_object_multiple_instances: a LwM2M Client featuring multiple instances of the same custom LwM2M Object.
-
06-custom_object_multiple_resource_instances: a LwM2M Client featuring a custom LwM2M Object with a multiple Resource.
-
07-secure_client_mbedtls3: a LwM2M Client using Mbed TLS 3.1.0 to secure its exchanges with the LwM2M Server. Note that this sample requires some editing before running as explained in its README.
-
08-secure_client_tinydtls: a LwM2M Client using tinydtls to secure its exchanges with the LwM2M Server. Note that this sample does not build on Windows platforms. Also note that this sample requires some editing before running as explained in its README.
All the samples can be built/run on Windows and Linux. Other platforms and OS are available in IoTerop's GitHub.
You can find some interesting tutorials on Hackster.io:
Initial setup: Don't forget to clone this repository:
git clone https://github.com/IOTEROP/IOWA.git
Prerequisites: An x86-64 computer with a Linux distribution installed, the cmake
utility, the make
utility and a C compiler.
To compile the 08-secure_client_tinydtls sample, you will also need git
to be installed.
-
Inside the IOWA repository, create a build folder
mkdir build
-
Go to this folder
cd build
-
Launch cmake in debug mode
cmake -DCMAKE_BUILD_TYPE=Debug ..
The last parameter point to the folder containing the CMakeLists.txt file of your target. In this case the one at the root of the repo.
-
Compile the samples.
make -j 4
(The
-j 4
parameter enables four parallel compilations, could be replaced withmake -j$(nproc)
)(After making some modifications to the code, only the step 4 is required)
-
Jump into the associated directory. E.g:
cd samples/01-baseline_client
-
Run the sample. E.g:
./baseline_client
- Install the Microsoft C++ compiler as explained here: https://docs.microsoft.com/en-us/cpp/build/building-on-the-command-line?view=vs-2019
- Select the "Build Tools for Visual Studio 2019".
- In the Installer, make sure the following optional features are checked:
- MSVC v142 - VS 2019 C++ x64/x86 build tools (Note that the version may differ)
- Windows 10 SDK
- C++ CMake tools for Windows
- Install Visual Studio Code from https://code.visualstudio.com/
- Launch Visual Studio Code.
- Go to the "Extensions" panel (Ctrl+Shift+X) on the left side.
- Install the "C/C++", "CMake", and "CMake Tools" extensions
- Open the folder containing the IOWA SDK ("File" menu -> "Open Folder..." or "Ctrl+K Ctrl+O")
- Open the CMake panel on the left side.
- On the top bar of the CMake panel, click on the icon "Configure All Projects".
- When prompted to select a kit, choose one of the Visual Studio Build Tools.
- On the top bar of the CMake panel, click on the icon "Build All Projects".
- Click on the sample of your choice.
- Right-click on the application and select "Run in terminal"
Visual Studio version must be at least 2017 for the CMake support.
- In the Visual Studio menu bar, go to "File", "Open", "Folder". Select the IOWA folder.
- In the "Solution Explorer" windows, right-click on "CMakeList.txt" and choose "Set as Startup Item".
- In the Visual Studio menu bar, go to "Build", "Build All"
You can interact with the samples or your device using the Ioterop Connecticut server. This server can get/send commands/data with your device and validate the way your code runs. (Connecticut is the LwM2M Ioterop test server where your device will be connected. This is one solution among others (e.g.: ALASKA platform, ...).