The easiest telemetry layer
for your microcontroller.

AlloyLogger is the Arduino library that stores all your MCU data into Alloy Mesh Storage, automatically, with no extra parts.

First 100 GB free for the first 10,000 users — 100 GB lasts decades if you're logging microcontroller values.

sketch_run47 | Arduino IDE
ESP32 Dev Module
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <AlloyLogger.h>
AlloyLogger alloy;

void setup() {
  alloy.wifi("ssid", "pass");
  alloy.begin("ALLOY_API_KEY",
              "robots/sbr");
}

void loop() {
  alloy.log("bno055")
       .set("heading", heading)
       .set("pitch",   pitch)
       .set("roll",    roll);
  alloy.log("battery", volts);
}
Ln 16, Col 1ESP32 Dev Module on /dev/cu.usbserial-0001
run-47.xlsx
D8fx8.2
ABCD
1timeheadingrollpitch
20.1182.4-1.20.6
30.2183.1-1.00.7
40.3184.9-0.70.9
50.4186.2-0.41.1
60.5187.0-0.12.4
70.6187.40.14.9
80.7187.60.38.2
9
10
bno055+
sbr — claude
why did run #47 fall over?
alloy - query_mesh_storage (MCP)
run-47 · bno055
bno055 stalled for 400 ms. The loop ran blind, pitch blew past 8°. That's the fall.
>
? for shortcuts
01. The whole stack

Follow one number
from the pin to the prompt.

This is the entire pipeline, end to end. A single pitch reading leaves your ESP32, rides AlloyLogger into Alloy Mesh Storage, and comes back through the Alloy MCP as an answer in Claude Code. Watch the same 8.2° change shape at every layer.

ESP32

The wobble happens

01 / 05

Your control loop reads the IMU over I²C at 100 Hz. Each reading lives for one loop tick, then it's overwritten. Without a logger, it's gone.

ESP32 DevKitC board
i2c 0x28 · bno055 · 100 Hz
pitch → 8.2°
↓ one line of code
in your loop()
WiFi · TLS ↓
signed, batched upload
AlloyLogger

The number gets a name

02 / 05

log() names the value, formats one compact CSV row, and buffers it in RAM in microseconds; your loop never blocks. A background task on core 0 batches rows into per-channel chunks and uploads over TLS every 4 s, store-and-forward across WiFi drops. No SD card, no flash wear.

sketch_run47 | Arduino IDE
11
12
13
alloy.log("bno055")
     .set("pitch", pitch);
// RAM buffer → core 0 → TLS · 4 s
Alloy
Alloy Mesh Storage

It lands on the timeline

03 / 05

Every power-on becomes one run under your mesh path. When it ends, Alloy assembles one indexed .mcap mission plus a meta.json semantics sidecar: replayable, scrubbable, and queryable in place with SQL.

run-47.xlsx
ABC
1timeheadingpitch
20.5187.02.4
30.6187.44.9
40.7187.68.2
bno055+
↓ MCP tool call
no exports · no CSVs
plain English ↓
Alloy MCP

Claude reaches in

04 / 05

One command connects Claude to your mesh. It gets real tools, list_missions, get_mission_summary, query_mesh_storage: read-only SQL over every run you have ever streamed.

sbr — zsh
$ claude mcp add alloy --transport http
https://aus.usealloy.ai/mcp
Added HTTP MCP server alloy
Claude Code

The number comes back as an answer

05 / 05

Claude writes the SQL itself, pulls the rows, and answers from your data, comparing run #47 against every run before it. Same reading, five layers later.

sbr — claude
why did run #47 fall over?
pitch hit 8.2° at t+3.4s, past your 8° recovery limit. The fall starts here.
Start streaming free →
02. Setup

How to setup Alloy Logger

1

Install the library

Arduino IDE: Sketch → Include Library → Add .ZIP Library. Or via CLI. Depends on ArduinoJson.

$ arduino-cli lib install ArduinoJson
$ git clone https://github.com/alloyrobotics/alloy-logger-arduino \
    ~/Arduino/libraries/AlloyLogger
2

Grab your API key

Create an Alloy account, then: Dashboard → Mesh Storage → API key. One key per rig is fine; use per-device keys for a fleet.

3

Add three lines

Connect WiFi, call begin() with your key and a mesh path, then log name → value pairs anywhere in your loop. That is the whole integration, and everything from here lives in Alloy.

alloy.wifi("ssid", "pass");
alloy.begin("ALLOY_API_KEY", "robots/sbr");
alloy.log("env").set("temp_c", t).set("humidity", h);
4

Ask it back

Every run lands in Alloy Mesh Storage, ready to talk to. Connect the Alloy MCP and ask Claude or ChatGPT in plain English, grounded in your real telemetry.

you › Why did run #47 fall over?
Start streaming free →