Embedded
Showcase of my embedded libraries and contributions
LetMeCreateIoT
A spin-off of my colleague’s LetMeCreate library which he wrote as a set of wrappers to communicate between Imagination Technologies’ Ci40 board and MikroElektronika’s click boards. It included a set of Linux C wrappers for common communication protocols (for example I2C, SPI, GPIO) as well as drivers for specific click boards.
LetMeCreateIoT was written with the idea of preserving LetMeCreate’s API but implementing it for Contiki RTOS. The RTOS is then run on a constrained device based on the PIC32 system on chip. This way code could be prototyped on the Ci40 first, and then moved to Contiki with little to no changes. Similarly, writing click board drivers meant they were immediately available for both platforms. Prime example was my colleague’s implementation of a display controller board that worked out of the box on both platforms.
On top of that the library provided wrappers for UDP/TCP communication as well as functionality to send live logs over the SoC’s embedded low power radio. This meant the standard output was always easily available. Accessing it any other way was quite cumbersome since it required soldering wires and buying a dedicated UART board.
Embedded C, Contiki, PIC32 SoC, 6LoWPAN
IoT Carpark
A project that combines LetMeCreateIoT and AwaLWM2M device management software. The aim was to connect a constrained device to a cloud server, and use LWM2M to communicate the device’s sensors’ state. Since a motion sensor was fitted on top of it, which updated its status on the cloud whenever it was trigged, we were able to react whenever motion was detected.
The project includes a NodeJS app that could be run side-by-side with an AwaLWM2M server, this way the webapp can use interprocess comunication to access all sensors’ states. Then it displays dynamically which spaces are taken, with a free spot shown if there’s no motion, and a car if motion is detected.
Embedded C, Lightweight M2M, NodeJS
Other Contributions
- A few fixes, an SPI joystick driver, and extra abstractions for LetMeCreate to allow for better portability of driver code. Since we were trying to ensure easy portability of driver code any hardware & OS differences required hiding them away behind extra LMC API calls, and limited the amount of patches needed to port the driver code. Additionally if we ever wanted to migrate to a new OS (eg. RIOT) it meant we already had a solid and stable API to implement to make the code portable.
- Various commits to AwaLWM2M , mainly to make the Python API compatible with both Python 2 and 3, fixes to Contiki network abstraction layer made to resolve issues with caching of parsed addresses, and fix ports not being consistently saved in one endianness.
- Changes submitted to CreatorDev fork of Contiki RTOS to fix Makefile issues, clean up and add missing functionality to I2C, and add a driver to handle multiple callbacks for the CN interrupt.


