This page collects the material for the AtomVM workshop at Goatmire 2026.
During the workshop we write Elixir applications that run directly on the Goatmire badge, an ESP32-S3 board, using AtomVM.
Slides
Workshop examples
All exercises are in this repository:
Each exercise is a standalone Mix project that runs on the badge. They build on each other, so it is best to follow them in order:
-
01_hello_worldInstall AtomVM on the badge, then build, flash, and see console output from a first application. -
02_temperatureTalk to the TMP103 temperature sensor over I²C and print the temperature on the console. -
03_atomglShow the temperature on the badge display with AtomGL. -
04_wifi_mqttJoin a Wi-Fi network, connect to an MQTT broker, and publish the temperature. -
05_neopixelAnimate the badge’s four SK6812MINI-E RGB LEDs, using the SPI peripheral as a waveform generator. -
06_keyboardTurn the 6 × 13 key matrix into press and release events, using interrupts instead of polling. -
07_analogMeasure the battery voltage with the ESP32-S3 ADC.
Getting started
You need Elixir installed on your computer. The mix atomvm.* tasks bring their own esptool, so nothing else has to be installed system-wide.
The first exercise installs AtomVM on the badge (this is needed only once):
cd 01_hello_world
mix deps.get
mix atomvm.esp32.install --image AtomVM-esp32s3-atomgl-ipv6-libsodium-psram-elixir-nightly-0.7
Then flash the application and watch its output:
mix atomvm.esp32.flash
mix atomvm.esp32.monitor --timeout 10
If the badge is not detected: hold BOOT, tap RESET, release BOOT, and retry.
Hardware
The Goatmire badge is built around an ESP32-S3-MINI-1 module and includes:
- a display with resistive touch panel,
- a TMP103 temperature sensor and an SC7A20 accelerometer on I²C,
- a Qwiic connector on the same I²C bus,
- four SK6812MINI-E addressable RGB LEDs,
- a 6 × 13 keyboard matrix,
- an IR transmitter and receiver,
- and battery and USB voltage sensing.
Pinout and more details are in the badge hardware notes:
Datasheets
Microcontroller:
Temperature sensor:
Display controller:
RGB LEDs:
Accelerometer:
AtomVM documentation
The workshop uses AtomVM 0.7, so these links point to the release-0.7 documentation:
Peripherals:
Networking:
Differences from the BEAM: