How to use the Embedded Lab

Step by step, with screenshots: build and run a circuit in the free Embedded Lab, then upload it to a real Arduino, ESP32 or Pico over USB.

Use the lab

  1. Pick a board

    Open the lab and choose a start: an Arduino Uno, Nano or Mega for C++, a Raspberry Pi Pico, Pico W, ESP32, ESP32-C3 or ESP32-C6 for MicroPython, an STM32 Blue Pill, or no board at all for the logic lab and the electronics bench. Help → Start screen brings the choice back, and the Boards shelf of the parts library swaps the board later.

  2. Add parts

    Search the parts library on the left and drag a part onto the canvas, or just click it and it lands next to your circuit. Drag a part to move it; R rotates, H flips and Delete removes the selection.

  3. Wire it up

    Click a pin, then click the pin it should connect to: the wire follows your mouse until the second click. Hover any pin to see its name and light up everything connected to it, and double-click a wire to bend it.

  4. Write the code

    The editor on the right holds sketch.ino on the Arduino and STM32 boards (C++, with the popular libraries built in) and main.py on the Pico and ESP32 boards (MicroPython). The Inspector tab next to it edits the selected part, such as a resistor value or a sensor reading.

  5. Run it

    Press Run, or Ctrl+Enter in the editor. C++ is compiled online and runs on an emulated chip, MicroPython starts straight away; the status pill switches to Running. Stop ends the run and Restart starts it again from the top.

  6. Watch it work

    The tabs under the canvas are your instruments. The Serial monitor shows what the program prints and sends what you type; the Plotter turns printed numbers such as x=512 y=300 into lines; the Logic analyzer records up to eight digital signals and decodes UART and I²C; the Debugger stops on breakpoints.

  7. Breadboard, Schematic and PCB

    The three tabs at the top of the lab show the same circuit, drawn three ways. Schematic is drawn from your breadboard automatically and shows live voltages while it runs; PCB lays out and routes a two-layer board. Looking is free; the BOM and Gerber downloads are paid once per design (free with the semester pass).

  8. Examples and guided builds

    Learn → Examples opens ready-made circuits, from Blink to sensors, displays, Wi-Fi and radios, each with a written project guide. Learn → Guided builds walks you through logic circuits and checks them automatically, and Exercises are graded.

  9. Credits: what is free

    Building, wiring, the views and the examples cost nothing. A press of Run uses credits: you get 8 free a day (up to 24 a week), an Uno, Nano, Mega or Pico run costs 1, and the electronics bench, the logic lab and basic parts are always free, as are the first run of every example and running unchanged code again.

Upload to your real board

What you need

  • A laptop or desktop with Chrome or Edge: Uploading uses Web Serial, which Chrome, Edge and Opera have on Windows, macOS, Linux and ChromeOS. Firefox, Safari, phones and iPads cannot reach USB ports.
  • A USB data cable: Many cables, especially the ones that came with a phone charger or a power bank, only carry power. If the board lights up but no port appears, try another cable first.
  • A supported board: Arduino Uno, Nano and Mega 2560 (Arduino C++); ESP32 DevKit, ESP32-C3 and ESP32-C6 (MicroPython); Raspberry Pi Pico and Pico W (MicroPython or CircuitPython). The STM32 Blue Pill is not supported yet: File → Download sketch.ino and use the Arduino IDE.
  • A USB driver, for clone boards only: Original boards need nothing. Clones use a CH340 or CP210x USB chip (the name is printed next to the USB socket) and need its driver once on Windows and older macOS.

Step by step

  1. Match the lab to your board

    Build the circuit with the same board you have on your desk and run it once in the lab. The language has to match too: Arduino C++ for the Uno, Nano and Mega, MicroPython for the ESP32 boards and the Pico.

  2. Plug in and press Upload to board

    Plug the board into your laptop, then press Upload to board: the cyan USB button next to Run (on smaller screens it shows just the USB icon). A panel opens on the right; close it any time, it keeps the board connected.

  3. Read “Before you start”

    The panel checks your browser, names your board and lists the three things that stop most uploads: a charge-only cable, a missing driver, and another program (the Arduino IDE, Thonny, a serial monitor) holding the port.

  4. Connect and pick the port

    Press Connect. Chrome lists the serial ports it can see; pick your board (often called “USB Serial”, “CH340”, “CP2102” or “Arduino”) and press Connect again. Not in the list? Press Show all ports.

  5. ESP32 and Pico: install MicroPython once

    If the board does not run MicroPython yet, the panel says so and installs it for free. This happens once per board; after that every upload only copies your main.py.

  6. Upload

    Press Upload to <your board>. You see each stage: Connect, Sync, Write, Verify and Start on an Arduino, or Connect, Stop program, Copy file and Restart on MicroPython. Keep the cable in until it finishes.

  7. It runs on your board

    When it says “Running on your board!”, your code is on the chip and starts by itself every time the board gets power, even without the laptop.

  8. Serial monitor and plotter

    Open the Serial monitor tab of the panel to read what the board prints and send it text, at the baud rate your code uses. The Plotter tab draws the numbers it prints as live lines, like the lab’s plotter.

Board notes

Arduino Uno, Nano and Mega (Arduino C++)

  • Your sketch is compiled to a HEX file and written through the board’s bootloader, exactly as the Arduino IDE does it.
  • Pick the same board in the lab: an Uno is not a Nano or a Mega, and the wrong one will not answer.
  • Many Nano clones still have the old bootloader; the uploader tries both speeds (115200 and 57600 baud) for you.

ESP32, ESP32-C3 and ESP32-C6 (MicroPython)

  • Your code is saved on the board as main.py and runs at power-on.
  • The first time, press Install MicroPython: it erases the board and writes MicroPython (free, about a minute).
  • If it hangs at “Connecting”, hold the BOOT button, press Connect or Upload, and let go once the progress bar moves.

Raspberry Pi Pico and Pico W (MicroPython or CircuitPython)

  • A Pico without MicroPython shows no serial port, so the first upload starts with installing it (free).
  • Unplug it, hold BOOTSEL and plug it back in, then let go: a drive called RPI-RP2 appears. Copy the .uf2 file from the panel onto it (or press Save directly to the Pico) and it restarts with MicroPython.
  • Then press Connect and pick the new port. Your code is saved as main.py (code.py for CircuitPython).

Pricing

Uploading to your real board is free and unlimited for everyone with a free account.

  • Upload as many times as you like: there is no limit and no charge.
  • Installing MicroPython on an ESP32 or Pico is free too.
  • You only need a free BitForBytes account, so the lab knows it is you.
  • Running circuits in the simulator uses credits, with free credits every day.

See every plan and credit pack

Troubleshooting

No port is listed when I press Connect

  1. Try another USB cable: a charge-only cable powers the board but carries no data.
  2. Clone board? Install the CH340 or CP210x driver (the chip name is printed next to the USB socket), then unplug and replug.
  3. Press Show all ports in the panel: some boards use a USB chip the filter does not know.
  4. A Pico with no MicroPython yet has no port: hold BOOTSEL while plugging it in and install MicroPython first.
  5. On Linux, add yourself to the dialout group (sudo usermod -aG dialout $USER), then log out and back in.

“The port is busy”

  1. Only one program can use a serial port. Close the Arduino IDE (and its serial monitor), Thonny, Mu, PuTTY or any other lab tab connected to the board.
  2. Unplug the board, plug it back in and press Connect again.

My ESP32 will not connect, or stops at “Connecting…”

  1. Hold the BOOT button, press Connect (or Upload), and let go once the progress bar moves.
  2. Use a data cable and plug straight into the laptop rather than through an unpowered hub.
  3. Still stuck? Press EN once while holding BOOT, then try again.

“The board didn’t answer” or “That’s a different board”

  1. Check the board in the lab is the one on your desk: Uno, Nano and Mega are different boards, and so are the ESP32, C3 and C6.
  2. Make sure you picked the right port: unplug the board and see which port disappears from the list.
  3. Press Try again. Uploads are free and unlimited.

The upload stopped halfway

  1. A loose cable, an unpowered hub or the laptop going to sleep cuts the upload. Reseat the cable and keep the laptop awake.
  2. Press Try again. Uploads are free, so a retry costs nothing.
  3. A board left half-written is not damaged: the bootloader is untouched and the next upload replaces everything.

My Pico does not show up

  1. Hold BOOTSEL before you plug the cable in, and keep holding until the RPI-RP2 drive appears.
  2. If RPI-RP2 appears, MicroPython is not installed yet: copy the .uf2 from the panel onto the drive.
  3. If neither a drive nor a port appears, try another cable: the Pico’s micro-USB cables are often charge-only.

“Not supported on this browser” or on my phone

  1. Uploading needs Web Serial: Chrome, Edge or Opera on a Windows, Mac, Linux or ChromeOS computer.
  2. It does not work in Firefox or Safari, or on phones and iPads. The panel can copy the page link so you can open it on a laptop.
  3. Brave can have Web Serial switched off; if the panel says it is missing there, use Chrome or Edge.

Frequently asked questions

Do I need to install the Arduino IDE or anything else?

No. The lab compiles and uploads from the browser. The only thing some boards need is a USB driver for clone boards (CH340 or CP210x), installed once.

Which boards can I upload to?

Arduino Uno, Nano and Mega 2560 with Arduino C++, and ESP32, ESP32-C3, ESP32-C6, Raspberry Pi Pico and Pico W with MicroPython (the Pico also with CircuitPython). The STM32 Blue Pill cannot be uploaded from the browser yet.

Does uploading work on a phone?

No. Phones and iPads cannot reach USB serial ports from a web page. Use Chrome or Edge on a laptop or desktop.

What happens to the program already on my board?

It is replaced. On an Arduino the new sketch overwrites the old one; on an ESP32 or Pico your code replaces main.py.

How much does an upload cost?

Nothing. Uploading to your real board is free and unlimited with a free account, and installing MicroPython is free too. Running code in the lab uses credits instead, with free credits every day.

Can uploading damage my board?

No more than the Arduino IDE can: the lab talks to the same bootloaders the Arduino IDE and esptool use. If an upload is cut off, the board simply waits for the next one.

Can I upload code I wrote somewhere else?

Paste it into the lab’s editor with the matching board, check that it compiles with Run, then upload. The lab uploads exactly the code on screen.

Open the Embedded Lab · Project guides

More free tools