Unexpected Maker TinyS3: A Compact ESP32 Powerhouse for Makers
The TinyS3 is a feature-rich, ultra-compact development board built around the powerful ESP32-S3 microcontroller, ideal for portable and space-constrained projects.
The Unexpected Maker TinyS3 is a small yet mighty development board designed for makers who need a powerful microcontroller in a tiny form factor. It leverages the Espressif ESP32-S3 System-on-Chip (SoC), a popular choice for its robust feature set, including Wi-Fi and Bluetooth connectivity, and a dual-core processor capable of handling complex tasks. This board is particularly well-suited for projects where space is at a premium, such as wearables, compact IoT devices, or portable sensor modules.
At the heart of the TinyS3 is the ESP32-S3, an advanced variant of the ESP32 family. It features two LX7 cores running at up to 240 MHz, an integrated 2.4 GHz Wi-Fi and Bluetooth 5 (LE) radio, and a rich set of peripherals. The S3 also boasts vector instructions for AI acceleration, making it suitable for edge computing applications like voice recognition or simple image processing. Unexpected Maker has thoughtfully integrated this powerful chip onto a board that prioritizes size and ease of use, often including features like USB-C for programming and power.
Compared to other ESP32 boards, the TinyS3 distinguishes itself by its extremely small size, often comparable to a postage stamp. This makes it a go-to option when integrating intelligence into existing products or creating entirely new, miniature electronic devices. Its target audience includes hobbyists, students learning embedded systems, and professional engineers looking for a compact, cost-effective solution for rapid prototyping or even small-scale production runs where board real estate is a critical constraint. The inclusion of USB-C and often a LiPo battery connector further enhances its suitability for portable applications.
Watch
Related video, embedded from YouTube.
Specifications
| Microcontroller / SoC | Espressif ESP32-S3FN4R2 (Dual-core LX7) |
| Architecture | 32-bit RISC-V |
| Clock speed | Up to 240 MHz |
| Flash / Storage | 4 MB (SPI Flash) |
| RAM / SRAM | 512 KB SRAM |
| Operating voltage | 3.3V |
| Digital I/O pins | 14 (exposed GPIOs) |
| Analog / ADC | Up to 20 ADC channels (exposed on some GPIOs) |
| PWM | Available on most GPIOs |
| Connectivity | Wi-Fi 802.11 b/g/n (2.4 GHz), Bluetooth 5 (LE) |
| USB | USB-C (for programming, power, and UART access) |
| Power input | USB-C (5V), LiPo battery connector (3.7V) |
| Dimensions | Approx. 18mm x 25.5mm (actual size may vary slightly by revision) |
Pinout & pin functions
| Pin | Function |
|---|---|
| 3V3 | 3.3V Power Output |
| GND | Ground |
| EN | Enable (Reset) |
| USB_D- | USB Data - |
| USB_D+ | USB Data + |
| IO0 | Boot Mode Select (Low during reset to enter bootloader) |
| IO1 | GPIO1 (UART TX0) |
| IO2 | GPIO2 |
| IO3 | GPIO3 (UART RX0) |
| IO4 | GPIO4 |
| IO5 | GPIO5 |
| IO6 | GPIO6 |
| IO7 | GPIO7 |
| IO8 | GPIO8 |
| IO9 | GPIO9 |
| IO10 | GPIO10 |
| IO11 | GPIO11 |
| IO12 | GPIO12 |
| IO13 | GPIO13 |
| IO14 | GPIO14 (SPI HD/VSPI MISO) |
| IO15 | GPIO15 (SPI HD/VSPI MOSI) |
| IO16 | GPIO16 (SPI HD/VSPI SCK) |
| IO17 | GPIO17 (SPI HD/VSPI CS) |
| IO18 | GPIO18 (I2C SDA) |
| IO19 | GPIO19 (I2C SCL) |
| IO20 | GPIO20 |
| IO21 | GPIO21 |
| IO33 | GPIO33 (ADC1_CH4) |
| IO34 | GPIO34 (ADC1_CH6) |
| IO35 | GPIO35 (ADC1_CH7) |
| IO36 | GPIO36 (ADC1_CH0) |
| IO37 | GPIO37 (ADC1_CH1) |
| IO38 | GPIO38 (ADC1_CH2) |
| IO39 | GPIO39 (ADC1_CH3) |
Wiring & circuit basics
Powering the TinyS3 is straightforward due to its USB-C connector, which accepts a standard 5V supply. This connection also provides power for the onboard 3.3V regulator. If powering via a LiPo battery, connect it to the dedicated JST connector; the board typically includes a charging circuit. Always ensure your power source can supply sufficient current, at least 500mA for USB, and ideally 1A or more for stable operation, especially when using Wi-Fi. The TinyS3 operates at a logic level of 3.3V, meaning all GPIO pins are 3.3V tolerant. Connecting 5V devices directly to GPIOs can damage the microcontroller; use level shifters if necessary.
For a simple LED project, connect an LED's anode (longer leg) to a digital GPIO pin (e.g., GPIO2) and the cathode (shorter leg) to a current-limiting resistor (typically 220-330 ohms for standard LEDs). The other end of the resistor connects to a GND pin. This setup allows the microcontroller to control the flow of current to the LED. When the GPIO pin is HIGH (3.3V), current flows, and the LED lights up; when LOW (0V), the LED turns off.
When connecting I2C devices, like many sensors, use the dedicated I2C pins. For the TinyS3, these are typically GPIO18 for SDA (Serial Data) and GPIO19 for SCL (Serial Clock). Ensure the I2C device is also powered by 3.3V from the TinyS3's 3V3 pin. Some I2C devices may require pull-up resistors on both SDA and SCL lines; check the sensor's datasheet. The ESP32-S3 has internal pull-ups that can often be enabled in software, but external resistors (e.g., 4.7k Ohm) might be needed for reliable communication, especially with multiple devices or longer wires.
Programming & getting started
The Unexpected Maker TinyS3 is highly versatile in its programming options. The most common and beginner-friendly approach is using the Arduino IDE with the ESP32 Arduino Core installed. This allows you to write C++ code using familiar Arduino functions. For Python enthusiasts, MicroPython or CircuitPython are excellent choices, offering a more dynamic development experience. Advanced users can leverage Espressif's ESP-IDF (Espressif IoT Development Framework) for maximum control and performance, or use PlatformIO, an integrated development environment that supports multiple frameworks including Arduino, ESP-IDF, and MicroPython.
To upload your first sketch (e.g., a Blink sketch) using the Arduino IDE: 1. Install the ESP32 board support package via the Board Manager. 2. Select the correct board (usually 'ESP32-S3 Dev Module' or similar, though specific TinyS3 support might be available via a custom URL). 3. Connect the TinyS3 to your computer via USB-C. 4. Select the correct COM port. 5. Hold down the BOOT button (if present, or use IO0) while clicking the RESET button (or briefly shorting EN to GND), then release BOOT when the IDE indicates it's trying to connect to the port. 6. Upload the sketch. For MicroPython/CircuitPython, you'll typically flash a firmware image first using tools like `esptool.py` or Thonny IDE, then upload code via the REPL.