The easiest telemetry layer
for your microcontroller.

Three extra lines of code, and every sensor, GPIO, and motor streams to the cloud. Automatically, every run. So when your robot breaks, the data is already there.

sketch.ino
#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);
}
Alloy · Mesh Storage
robots/sbr/2026-06-29T06:48:14Z/ · channel bno055 · ingesting
t_nsheadingpitchroll
…694…182.4-1.20.6
…695…183.1-1.00.7
…696…184.9-0.70.9
…697…186.2-0.41.1
uploaded ↑ 1,284  ·  failed 0  ·  dropped 0  ·  queryable as SQL / DuckDB
How it works

Set and forget.
Every run is already in the cloud.

Connect WiFi and AlloyLogger streams everything you log in the background: every GPIO, sensor, and motor, on one timeline, across every run and every version of your code. No serial monitor. No SD card. Nothing to babysit.

headingpitchrollbatterytemp_chumidity alloy Mesh Storage SQL · DuckDB · queryable
Start streaming free →
Setup

From breadboard to cloud in four steps.

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/hughminhphan/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.

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

Query it, or just ask

Every run lands as its own queryable table. Hit it with SQL or DuckDB, or connect Claude or ChatGPT over MCP and ask it straight: why did my robot fall this time, and has it happened before?

SELECT t_ns, heading FROM bno055 WHERE roll > 1.0;
Create your account →
Get started

Your robot is generating data right now.
Start streaming it.

Open source, and free for your first 10 GB. That is more than enough to log every run, then ask your data why it broke.