WARDuino

A WebAssembly Virtual Machine

It is extremely hard and time-consuming to make correct and efficient programs for microcontrollers. Usually microcontrollers are programmed in a low level programming language such as C which makes them hard to debug and maintain. To raise the abstraction level, many high level programming languages have provided support for programming microcontrollers. Examples include Python, Lua, C# and JavaScript. Using these languages has the downside that they are orders of magnitude slower than the low-level languages. Moreover, they often provide no remote debugging support.

With WARDUINO we investigate the feasibility of using WebAssembly to program Arduino compatible microcontrollers. Our experiments lead to extending the standard WebAssembly virtual machine with: 1) safe live code updates for functions and data 2) remote debugging support at the VM level 3) programmer configurable (Arduino) modules in order to keep the virtual machine’s footprint as small as possible. The resulting WARDuino VM enables the programmer to have better performance than an interpreted approach while simultaneously increasing the ease of development.

We are currently extending WARDUINO with a number of extension which will make it more suitable to implement IOT applications.

WARDuino : a dynamic WebAssembly virtual machine for programming microcontrollers Robbert Gurdeep Singh (UGent) and Christophe Scholliers (UGent) (2019) MPLR 2019 : proceedings of the 16th ACM SIGPLAN international conference on managed programming languages and runtimes. p.27-36