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

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>
#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

#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 <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

WiFi Network Scanner

#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>

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

#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>

#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>

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