All Projects → wasm3 → embedded-wasm-apps

wasm3 / embedded-wasm-apps

Licence: MIT license
Run statically-compiled WebAssembly apps on any embedded platform

Programming Languages

c
50402 projects - #5 most used programming language
C++
36643 projects - #6 most used programming language
shell
77523 projects
rust
11053 projects
Zig
133 projects
typescript
32286 projects

Projects that are alternatives of or similar to embedded-wasm-apps

Core2-for-AWS-IoT-EduKit
Accompanying code for use with AWS IoT EduKit content. Works with PlatformIO and ESP-IDF v4.2.
Stars: ✭ 107 (+3.88%)
Mutual labels:  platformio
Effortless-SPIFFS
A class designed to make reading and storing data on the ESP8266 and ESP32 effortless
Stars: ✭ 27 (-73.79%)
Mutual labels:  platformio
Wortuhr
Software für eine ESP8266 basierte Wortuhr mit verschiedenen Layouts
Stars: ✭ 30 (-70.87%)
Mutual labels:  platformio
nextdriver
An Arduino-based controller for Celestron CG5-series equatorial mounts
Stars: ✭ 21 (-79.61%)
Mutual labels:  platformio
EUC-Dash-ESP32
Bluetooth Dashboard for electric unicycles (EUCs) for ESP32(ttgo t-watch). requires PlatformIO to build
Stars: ✭ 24 (-76.7%)
Mutual labels:  platformio
Arduino-Log
Simple application log library. supporting multiple log levels, custom output & flash memory support.
Stars: ✭ 132 (+28.16%)
Mutual labels:  platformio
canairio firmware
CanAirIO is a citizen science initiative. We are developing a mobile application that is able to set a PM2.5 or CO2 sensors, and other related sensors, as a fixed station using WiFi or mobile station with an smartphone by using a Bluetooth connection.
Stars: ✭ 84 (-18.45%)
Mutual labels:  platformio
LMIC-node
LMIC-node | One example to rule them all. LMIC-node is an example LoRaWAN application for a node that can be used with The Things Network. It demonstrates how to send uplink messages, how to receive downlink messages, how to implement a downlink command and it provides useful status information. With LMIC-node it is easy to get a working node qu…
Stars: ✭ 108 (+4.85%)
Mutual labels:  platformio
RAK811-tracker
Example code for RAK811 nodes with GPS on board, transmitting their coordinates in the payload of the LoRaWAN packet in a format that is compatible with TTN Mapper.
Stars: ✭ 14 (-86.41%)
Mutual labels:  platformio
nuclei-sdk
Nuclei RISC-V Software Development Kit
Stars: ✭ 65 (-36.89%)
Mutual labels:  platformio
arduino-bme280
💧 Arduino library for Bosch Sensortec BME280 – combined temperature, pressure, humidity sensor. The library allows using the sensor over I2C or SPI on any board that supports Arduino.
Stars: ✭ 25 (-75.73%)
Mutual labels:  platformio
FireLamp JeeUI
Project Fire Lamp based on EmbUI framework (GPL license)
Stars: ✭ 77 (-25.24%)
Mutual labels:  platformio
platform-nordicnrf52
Nordic nRF52: development platform for PlatformIO
Stars: ✭ 82 (-20.39%)
Mutual labels:  platformio
platform-lattice ice40
Lattice iCE40: development platform for PlatformIO
Stars: ✭ 34 (-66.99%)
Mutual labels:  platformio
firebase-iot-demo
🔥 ESP8266 Firebase Arduino client developed using Platformio sending DHT11 and MQ5 data to Firebase Realtime Database
Stars: ✭ 20 (-80.58%)
Mutual labels:  platformio
XMC-for-Arduino
Integration of Infineon's XMC microcontrollers into the Arduino IDE.
Stars: ✭ 85 (-17.48%)
Mutual labels:  platformio
Arduino-Blinkenlight
Non-blocking blinking patterns and smooth fade effects for your LEDs.
Stars: ✭ 26 (-74.76%)
Mutual labels:  platformio
stewart-platform-esp32
https://ouilogique.com/plateforme-de-stewart-esp32/
Stars: ✭ 17 (-83.5%)
Mutual labels:  platformio
platform-linux arm
Linux ARM: development platform for PlatformIO
Stars: ✭ 16 (-84.47%)
Mutual labels:  platformio
SmartSpin2k
Transform your spin bike into a Smart Trainer!
Stars: ✭ 88 (-14.56%)
Mutual labels:  platformio

SWUbanner

embedded-wasm-apps

Run native, statically-compiled apps on any platform, using WebAssembly.
Examples include AssemblyScript, Rust, C/C++, TinyGo, Zig, etc.

How it works

This does not use Wasm3 engine. The approach is similar to WasmBoxC or RLBox:

  1. Compile source code to wasm
  2. Translate wasm to C using wasm2c
  3. Compile produced C, link with a thin runtime implementation using the native platform toolchain

How it works

Benefits

  • Language/toolchain decoupling
  • Resilience against attacks (RCE, Control-flow hijacking)
  • Sandboxing / SFI (Software Fault Isolation)
  • Enables wasm transformations, like instrumentation or gas metering
  • Software-based memory virtualization
  • Moderate runtime overhead (mostly depends on the source language/runtime)
    • Small performance hit (~50% slowdown)
    • Moderate binary size increase
  • Highly portable

Example

$ make APP=rust
    Finished release [optimized] target(s) in 0.00s
$ pio run -e esp32 -t upload
$ pio device monitor
Initializing WebAssembly...
🦀 Rust is running!

$ make APP=assemblyscript
    > npm run asbuild:optimized
$ pio run -e esp32 -t upload
$ pio device monitor
Initializing WebAssembly...
🚀 AssemblyScript is running!

$ make APP=tinygo
$ pio run -e esp32 -t upload
$ pio device monitor
Initializing WebAssembly...
🤖 TinyGo is running!

Building WASM apps

Ensure WABT and Binaryen tools are in your PATH.

# AssemblyScript (needs Node.js)
cd apps/assemblyscript
npm install
cd ../..
make APP=assemblyscript

# Rust
rustup target add wasm32-unknown-unknown
make APP=rust

# C/C++ (needs wasienv)
make APP=cpp

# TinyGo (needs TinyGo v0.21.0 and Go v1.17.3)
make APP=tinygo

# Zig (needs Zig v0.9.0)
make APP=zig

Building and running with PlatformIO

# For ESP32:
pio run -e esp32 -t upload

# For ESP8266:
pio run -e esp8266 -t upload

# For Raspberry Pi Pico:
pio run -e rpi-pico -t upload

# Open serial monitor
pio device monitor --quiet

Building and running with Particle

Requires particle-cli. Should work on all Particle devices i.e. Spark Core, Photon, Electron, Argon, Boron:

particle flash MyDevice ./src/

# Open serial monitor
particle serial monitor --follow

License

This project is released under The MIT License (MIT)

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].