GETTING STARTEDBY UNEXPECTED MAKER

Getting started with your board.

Welcome to your new Unexpected Maker board! This guide will help you connect it, explore its features and start creating your own projects.

Choose your MCU

Match the chip on your board. The connection, coding and recovery instructions below will change to suit.

Showing the ESP32-C6 guide.

Connect your ESP32-C6 board

  • TinyC6
  • TinyC6[D]

Plug your TinyC6 or TinyC6[D] into your computer with a USB-C power and data cable.

Connect to your board

ESP32-C6 has no native USB, so your board doesn’t appear as a USB drive. You reach it over the board’s USB serial port, which gives you the Python prompt and lets you copy files on and off the board.

On Windows the port is named COM followed by a number; on macOS and Linux it appears as a serial device. If you’re unsure which port is your board, unplug it and reconnect it: the port that disappears and returns is the one to select.

TinyC6[D]: MicroPython pre-installed

Each time your board powers up or resets, MicroPython runs boot.py and then main.py, if they are on the board. On your new board, main.py contains a demo program; edit it or replace it with your own.

Use whichever tool you prefer:

  • mpremote, MicroPython’s own command-line tool:
    pipx install mpremote
    mpremote connect PORT repl
    mpremote connect PORT fs cp main.py :main.py
  • Any serial terminal at 115200 baud, for the Python prompt.
  • An editor with MicroPython support, such as Thonny with MicroPython (ESP32) selected.

TinyC6: CircuitPython pre-installed

Each time your board powers up or resets, CircuitPython looks for code.py on the board and runs it. On your new board, code.py contains a demo program; edit it or replace it with your own.

Use whichever tool you prefer:

  • Any serial terminal at 115200 baud, for the Python prompt.
  • CircuitPython’s web workflow, to edit and copy files over Wi-Fi.
  • An editor with CircuitPython support, such as Thonny with CircuitPython (generic) selected.

Choose your language and tools

CircuitPython, MicroPython, Arduino, ESP-IDF, PlatformIO, Rust and more. Step-by-step setup for each one is on the Develop page.

CircuitPython

MicroPython

Arduino

ESP-IDF

PlatformIO

.NET nanoFramework

Rust

PHP

TinyGo

JavaScript

Lua

Erlang / Elixir

Flash new firmware

Switching to a different platform means installing different firmware. Erase the flash first: it removes the previous program, its settings and its filesystem.

These commands are for esptool 5.4.0, the latest release. Replace PORT with your board’s port. esptool documentation →

esptool --chip esp32c6 --port PORT erase-flash

Enter download mode

Download mode lets the computer install firmware without running the program already on your board. Close any serial monitor before uploading.

1Hold BOOT

Keep BOOT pressed.

2Tap RESET

Press and release RESET while still holding BOOT.

3Release BOOT

Select the download-mode port on your computer.

There is no LED signal to confirm download mode. Check the computer’s port list instead. On boards using the chip’s USB connection, a different serial port can appear after the button sequence.

If you manually put your board into download mode, press RESET after the upload finishes to start your code running. Open the port list again and select the port used by the running program.

Battery & power

Every Unexpected Maker board can run from a single-cell LiPo battery, and it charges the battery whenever USB or 5 V power is connected.

Choose and connect a battery

  • Use a compatible protected single-cell LiPo battery: 3.7 V nominal, 4.2 V fully charged.
  • Check positive and negative against the board markings. Matching connector shapes do not guarantee matching polarity. The battery input on all UM boards has reverse polarity protection, but other connected hardware could still be damaged, so be careful.
  • Connect only to the documented battery input or VBAT/GND pins. Do not connect a LiPo directly to 3V3 or 5V, and do not use multi-cell packs or non-rechargeable batteries on a charging input.

Your board’s pin reference shows where to connect the battery.

Charging and runtime

A battery with a larger capacity runs your board for longer, but takes longer to charge, because the board charges it at a fixed current.

How long a battery lasts also depends on how much current your project draws, how much it uses Wi-Fi, and whether it uses sleep modes.

When your board is powered only from the battery, there is no 5V output from the 5V header pin.

Use your board’s helper libraries

Helper libraries give your code simple access to your board’s own hardware, such as its RGB LED, battery monitoring and, on Series[D] boards, the antenna switch. You call the helper instead of looking up pins and writing that code yourself.

Each platform has its own helper library. Choose the tab for the platform you use.

TinyC6 and TinyC6[D] have different battery and antenna hardware. Use the matching board files: Series[D] has an I²C fuel gauge and a software antenna switch. S3 helper modules and old TinyC6 ADC examples are not substitutes for the D revision.

Start with the examples in the board’s repository linked below. Copy the helper beside code.py and its dependencies into lib.

Series[D]: choose an antenna

The onboard antenna is selected by default. You can use Wi-Fi without fitting an external antenna or adding antenna-selection code. To use an external antenna, connect it to the u.FL socket and select it in your program. You can change back to the onboard antenna while the program is running.

On TinyC6[D], the switch is connected to XIO0 on the I²C I/O expander. LOW selects onboard and HIGH selects external. XIO0 is not the MCU’s GPIO0: use the TinyC6[D] expander helper to change it.

With the UM SeriesD Helper in Arduino:

#include <UMSeriesD.h>

UMSeriesD umseriesd;

void setup() {
    umseriesd.begin();
    umseriesd.setAntennaExternal(true);  // true: external u.FL antenna, false: onboard
}

void loop() {
}

Read the battery fuel gauge

TinyC6[D] uses a MAX17048 fuel gauge connected over I²C. It reports the battery voltage and estimates the remaining charge. The original TinyC6 measures battery voltage through an ADC instead; its battery-reading code does not read a MAX17048.

Use the MAX17048 driver with the I²C pins marked SCL and SDA on your board’s pin reference. Connect a battery before checking its readings; USB power alone does not provide a battery state-of-charge measurement.

With the UM SeriesD Helper in Arduino:

#include <UMSeriesD.h>

UMSeriesD umseriesd;

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

void loop() {
    Serial.printf("Battery: %.2f V\n", umseriesd.getBatteryVoltage());
    delay(1000);
}

If something isn’t working

The board powers up, but no serial port appears

Try a known data cable and a direct computer port. Disconnect attached hardware, then enter download mode. Download mode bypasses your installed program. If a port appears in download mode but disappears after RESET, check the installed firmware and its USB settings. If no port appears in either mode, try another cable and USB port, then check whether the computer detects a USB device at all. On Linux, check serial-device permissions. On Windows, inspect Device Manager for a device or driver error.

I can’t see a CIRCUITPY drive

That is expected on ESP32-C6. Use a serial tool for MicroPython or CircuitPython’s web workflow to manage files. The presence of a serial port without a drive does not mean the board is faulty.

Uploads fail or the port is busy

Close serial monitors, other IDEs and browser tabs connected to the board. Reselect the port after entering download mode. Check the MCU, board definition and firmware file. If transfers start but fail, try a shorter cable, direct USB connection or lower upload speed.

The upload finishes, but there’s no output

Press RESET, then check the port again. Set the monitor to the baud rate used by your program. For Arduino over USB, check USB CDC On Boot; for ESP-IDF, check the console channel. If the board repeatedly resets, verify its flash and PSRAM configuration and power supply.

The RGB LED or battery example does not work

Check the board revision, helper version and pin reference. Some boards need the LED supply or a second regulator enabled. NeoPixel and DotStar LEDs use different drivers. Battery examples must also match the hardware: an ADC voltage-reading example cannot read an I²C fuel gauge. Test with the matching UM example before changing wiring or pin definitions.