This is a POC project to run many wasm apps on a single esp32 board (in my case, M5 Atom Matrix, with a nice neopixel 5x5 display matrix). All I wanted to do - is to run a different wasm app for each pixel, and it (kinda) works! I had to do a bit of optimizations, and reduced all stacks and memory limits to minimum, but I finally got all of 25 pixels running.
Each pixel on this esp32 board is controlled by a different WebAssembly app. #arduino @wasm3_engine pic.twitter.com/ioZZJzUvAw
— zubr kabbi (@zubr_kabbi) September 11, 2021
Using wasm3
as wasm runtime. Apps are written in c (for now), see them in ./wasm
folder.
Try for yourself (you'll need wasi-sdk
and wasm-micro-runtime
)
export WAMR_DIR="path to wamr installation" ; that's where I've stolen the build script from
./build-apps.sh && ls wasm/*.wasm | xargs -n 1 xxd -i > src/data.h
pio run -t upload