Browser-based Arduino IDE

Learn by Making

An open platform where makers and learners discover hardware projects, write code with AI assistance, wire circuits, and flash real boards — all from the browser.

#include <Arduino.h>

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(500);
  digitalWrite(LED_BUILTIN, LOW);
  delay(500);
}

Arduino Blink

#include <Arduino.h>
// Note: You'll need to install DHT library via PlatformIO

#define DHT_PIN D2  // GPIO4

void setup() {
  Serial.begin(115200);
  delay(1000);
  Serial.println("Temperature Monitor Started!");
  Serial.println("Note: Install DHT library for full functionality");
}

void loop() {
  // Placeholder - with DHT library you would read actual values

Temperature Monitor

#include <Arduino.h>

// CO2 / temperature / humidity stub firmware for the live-graph playground.
// Replace the readSensor() body with your SCD30 or SCD41 library calls.

struct Reading { int co2; float t; float rh; };

Reading readSensor() {
  // TODO: replace with real sensor reads.
  int co2 = 450 + random(0, 700);
  float t = 20.0 + random(0, 80) / 10.0;
  float rh = 35.0 + random(0, 300) / 10.0;
  return { co2, t, rh };
}

Playground CO₂ Sensor

#include <Arduino.h>

// Example protocol for a Wemos D1 + MAX7219-style 8x8 matrix:
// MATRIX: followed by 64 bits, row-major, e.g. MATRIX:00011000...
// Swap the renderPattern body for your matrix library of choice.

void renderPattern(const String& bits) {
  Serial.print("DISPLAY ");
  Serial.println(bits);
}

void setup() {
  Serial.begin(115200);
}

Playground Wemos 8x8 Matrix

#include <Arduino.h>
#include <WiFi.h>
#include <PubSubClient.h>

// Plant telemetry: publishes soil moisture to broker.emqx.io.
// Topic: granrojo/demo/plant/<chip-id>/moisture (matches the playground subscription).

const char* WIFI_SSID = "your-wifi";       // TODO: set this
const char* WIFI_PASS = "your-password";   // TODO: set this
const char* MQTT_HOST = "broker.emqx.io";
const uint16_t MQTT_PORT = 1883;

#define SOIL_PIN 34

Playground Plant Sensor

#include <Arduino.h>

// RGB LED pins on Wemos D1
#define RED_PIN   D5  // GPIO14
#define GREEN_PIN D6  // GPIO12
#define BLUE_PIN  D7  // GPIO13

void setup() {
  Serial.begin(115200);
  pinMode(RED_PIN, OUTPUT);
  pinMode(GREEN_PIN, OUTPUT);
  pinMode(BLUE_PIN, OUTPUT);
  Serial.println("RGB LED Started!");
}

RGB LED Blink

#include <Arduino.h>
#include <ESP8266WiFi.h>

void setup() {
  Serial.begin(115200);
  delay(1000);
  
  Serial.println("\nWiFi Network Scanner");
  Serial.println("====================");
  
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);
  

WiFi Network Scanner

#include <Arduino.h>

#define BUTTON_PIN D3

bool lastPressed = false;

void setup() {
  Serial.begin(115200);
  pinMode(BUTTON_PIN, INPUT_PULLUP);
}

void loop() {
  bool pressed = digitalRead(BUTTON_PIN) == LOW;
  if (pressed != lastPressed) {

Playground Button Remote

#include <Arduino.h>
#include <Servo.h>

#define SERVO_PIN D4  // GPIO2

Servo myServo;
int angle = 0;
int direction = 1;

void setup() {
  Serial.begin(115200);
  myServo.attach(SERVO_PIN);
  Serial.println("Servo Control Started!");
}

Servo Motor Control

// Welcome to Granrojo.
// Open the chat panel on the right and tell the AI what you want to build —
// it will write the code, wire up the diagram, and flash the board with you.

#include <Arduino.h>

void setup() {
  Serial.begin(115200);
}

void loop() {
}

theremin

10950
ziwen
#include <Arduino.h>

// Track-display firmware stub for ESP32 + ST7789 / SSD1306 / OLED.
// Wire format: TRACK:{"t":"<title>","a":"<artists>","al":"<album>"}

void renderTrack(const String& payload) {
  Serial.print("RENDER ");
  Serial.println(payload);
  // TODO: parse JSON with ArduinoJson and draw the t/a/al fields.
}

void setup() {
  Serial.begin(115200);
  Serial.println("READY:SPOTIFY");

Playground Track Display

// Welcome to Granrojo.
// Open the chat panel on the right and tell the AI what you want to build —
// it will write the code, wire up the diagram, and flash the board with you.

#include <Arduino.h>

void setup() {
  Serial.begin(115200);
}

void loop() {
}

qwiic

9290
ziwen
#include <Arduino.h>

// Weather-sign firmware stub for ESP32 + e-ink display.
// Replace renderForecast() with calls to your e-ink driver (GxEPD2, etc).
// Wire format: WEATHER:{"t":"22.3","s":"Clear","w":4.2,"tz":"...","days":[...]}

void renderForecast(const String& payload) {
  Serial.print("RENDER ");
  Serial.println(payload);
  // TODO: parse JSON with ArduinoJson and draw the fields on your panel.
}

void setup() {
  Serial.begin(115200);

Playground Weather Sign

#include <Arduino.h>

// Eight-button MIDI pad → USB serial lines for the esp32-midi-pad playground.
// Wire each button: GPIO → switch → GND (internal pull-ups enabled).
// Protocol: NOTEON:<note>:<velocity>  NOTEOFF:<note>

static const uint8_t BTN_COUNT = 8;
static const uint8_t BTN_PINS[BTN_COUNT] = {13, 14, 27, 26, 25, 33, 32, 23};
static const uint8_t BTN_NOTES[BTN_COUNT] = {60, 62, 64, 65, 67, 69, 71, 72};
bool pressed[BTN_COUNT] = {false};

void setup() {
  Serial.begin(115200);
  for (uint8_t i = 0; i < BTN_COUNT; i++) {

Playground ESP32 MIDI Pad

Tilt Gain

Tilt Gain

Gesture Lamp

Gesture Lamp

Slider Color Palette

Slider Color Palette

Twin Walls

Twin Walls

Aurora Field

Aurora Field

Gamepad Diagnostics

Gamepad Diagnostics

3D Printer Queue

3D Printer Queue

MIDI Synth

MIDI Synth

BLE Heart Rate

BLE Heart Rate

Matrix Painter

Matrix Painter