____ _ _ _
| _ \(_)_ __ | |__ ___ __ _ _ __ __| |
| |_) | | '_ \| '_ \ / _ \ / _` | '__/ _` |
| __/| | | | | |_) | (_) | (_| | | | (_| |
|_| |_|_| |_|_.__/ \___/ \__,_|_| \__,_|
A block-based IDE for Arduino, Raspberry Pi, and ESP32 — built for the classroom.
🚀 Try Pinboard · 📖 Docs · ❤️ Donate · 🐛 Report a Bug
Pinboard is a browser-based, block-based coding environment that lets students write real hardware code — without the setup friction. Built by STEM Sprouts, a 501(c)(3) nonprofit, and used in live classroom sessions to teach IoT and physical computing to beginners.
Think Scratch, but the code actually runs on your Arduino.
Drag blocks → See generated C/MicroPython → Flash to hardware → Watch it work
No IDE installs. No driver headaches. No "it works on my machine."
Powered by Google Blockly. Drag-and-drop blocks across 7 categories:
| Category | Description |
|---|---|
| Structure | setup(), loop(), boot events |
| Pins | Digital/analog read & write |
| Control | If/else, loops, delays |
| Logic | Comparisons, boolean operations |
| Math | Arithmetic, mapping, constraints |
| Serial | Print, println, serial monitor |
| Variables | Declare, set, get |
Add specialized sensor/actuator blocks without writing import boilerplate:
- 🌡️ DHT11/DHT22 — Temperature & humidity
- 🔆 Photoresistor — Light sensing
- 🔘 Button — Digital input
- ⚙️ Servo — Position control
- (more being added continuously)
| Platform | Language | Status |
|---|---|---|
| Arduino (Uno, Nano, Mega) | C/C++ | ✅ Stable |
| Raspberry Pi | MicroPython | ✅ Stable |
| ESP32 | C/C++ | 🔧 Coming soon |
Switch between platforms with a single click — the same blocks generate the correct language automatically.
Test your code before touching hardware. The emulator simulates sensor values and pin states directly in the browser. An improved emulator with richer hardware simulation is in active development.
Built for classrooms. Instructors generate a join code to start a live session. Students connect instantly — no accounts required. Sessions include:
- Real-time participant view
- Breakout challenges — groups divided by sensor type work on different problems simultaneously
- Session-scoped code sharing
Every block change instantly updates a live C/MicroPython preview at the bottom of the screen. Students see the real code their blocks produce — bridging visual and text-based programming.
No install needed → pinboard.stemsprouts.org
git clone https://github.com/STEM-Sprouts/pinboard.git
cd pinboard
npm install
npm run devRequirements: Node.js 18+, npm 9+
- Build your program with blocks
- Click Enter Code to switch to text mode (optional)
- Click Run — Pinboard compiles and flashes over WebSerial
- Watch the Serial Monitor for output
Note: WebSerial requires Chrome or Edge. Firefox is not currently supported.
pinboard/
├── src/
│ ├── blocks/ # Custom Blockly block definitions
│ │ ├── structure/ # Setup, loop, boot blocks
│ │ ├── pins/ # Digital/analog I/O blocks
│ │ ├── modules/ # Sensor & actuator library blocks
│ │ └── serial/ # Serial communication blocks
│ ├── generators/ # Blockly → C / MicroPython code generators
│ ├── emulator/ # In-browser hardware emulator
│ ├── session/ # Live session & join code logic
│ ├── hardware/ # WebSerial flash & serial monitor
│ └── ui/ # React components & layout
├── public/
├── docs/
└── tests/
We welcome contributions! Pinboard is built by a small team and there's always more to build.
Read CONTRIBUTING.md before opening a PR.
Quick ways to help:
- 🐛 Report bugs
- 💡 Suggest features
- 🧩 Add new hardware module blocks
- 🌍 Translate the UI
- 📖 Improve documentation
Pinboard is free because STEM Sprouts is donor-funded. If this project is useful to you or your students, please consider donating.
→ Donate to STEM Sprouts (501c3, tax-deductible)
All donations go directly to running programs, hardware kits for students, and infrastructure costs.
MIT © STEM Sprouts
Pinboard is free and open source. Built with Google Blockly and WebSerial API.