M5Stack AtomS3 Lite: Pinout, Arduino Setup and ESPHome Projects

M5Stack AtomS3 Lite pinout and setup guide covering GPIOs, RGB LED, button, IR transmitter, Grove port, Arduino IDE, ESPHome, upload recovery and practical Home Assistant projects.

M5Stack AtomS3 Lite is one of the smallest ready-made ESP32-S3 controllers for Home Assistant, IR control and compact IoT projects. It is based on the ESP32-S3FN8, runs at up to 240 MHz, includes 8 MB flash, Wi-Fi, native USB, a programmable RGB indicator, push button, IR transmitter, Grove-style expansion connector and six additional GPIOs in a 24 × 24 mm enclosure.

The important word is Lite. Unlike the full AtomS3, it has no LCD and no IMU. That makes it cheaper, simpler and often better suited to projects where the device is meant to disappear into the installation rather than act as a tiny user interface.

This guide covers the AtomS3 Lite pinout, which GPIOs are already occupied internally, Arduino setup, upload recovery, ESPHome configuration and several practical project patterns for Home Assistant.

AtomS3 Lite Specifications

FeatureM5Stack AtomS3 Lite
SoCESP32-S3FN8
CPUDual-core Xtensa LX7
Maximum clock240 MHz
Flash8 MB
PSRAMNone documented on the Lite model
Wi-Fi2.4 GHz 802.11 b/g/n
BluetoothBLE through ESP32-S3
USBUSB-C, native download/serial
RGB indicatorWS2812C-2020 on GPIO35
User buttonGPIO41
IR transmitterGPIO4
Grove/HY2.0-4PGPIO2 + GPIO1 + 5V + GND
Bottom expansion GPIOsGPIO5, 6, 7, 8, 38, 39
Power input5 V via USB-C
3.3 V regulatorSY8089
Size24.0 × 24.0 × 9.5 mm
Weight5.3 g

M5Stack lists the AtomS3 Lite as an ESP32-S3FN8 design. The N8 suffix identifies the 8 MB flash configuration. Unlike many ESP32-S3 boards, M5Stack does not specify PSRAM for AtomS3 Lite, so do not enable PSRAM in Arduino/ESPHome just because the board uses an S3.

AtomS3 Lite Pinout

GPIOFunction on AtomS3 LiteAvailable for your project?
GPIO1HY2.0-4P / Grove signalYes, external
GPIO2HY2.0-4P / Grove signalYes, external
GPIO4IR transmitterAlready used internally
GPIO5Bottom expansionYes
GPIO6Bottom expansionYes
GPIO7Bottom expansionYes
GPIO8Bottom expansionYes
GPIO35WS2812 RGB LED dataAlready used internally
GPIO38Bottom expansionYes
GPIO39Bottom expansionYes
GPIO41User buttonAlready used internally

M5Stack’s current pinout also labels GPIO5–8 with ADC/touch functions and shows GPIO38/39 as general-purpose expansion pins. The Grove-style HY2.0-4P connector uses:

Black  = GND
Red    = 5V
Yellow = GPIO2
White  = GPIO1

Because the ESP32-S3 GPIO matrix is flexible, GPIO1/2 do not have to be I²C. M5Stack labels this connector PORT.CUSTOM; it can be used for I²C, UART or simple digital GPIO depending on the firmware.

The Six Bottom Expansion GPIOs

The bottom female header exposes six general-purpose signals:

GPIO5
GPIO6
GPIO7
GPIO8
GPIO38
GPIO39

These are the most useful pins when AtomS3 Lite is plugged into an Atomic expansion base or a custom carrier board.

GPIO5–8 are especially useful for analogue-capable sensor inputs on the S3. GPIO38/39 are also convenient for digital interfaces and are not consumed by the Lite’s built-in display or IMU because those peripherals simply are not present.

GPIO35: Built-In RGB LED

The front indicator is a WS2812C-2020 addressable RGB device driven from GPIO35.

M5Stack’s Arduino library can drive it directly. ESPHome can use the RMT LED-strip component:

light:
  - platform: esp32_rmt_led_strip
    name: "AtomS3 Lite RGB"
    id: atoms3_rgb
    pin: GPIO35
    num_leds: 1
    rgb_order: GRB
    chipset: WS2812

Some community configurations refer to four LED pixels because of older/alternate driver assumptions. The physical Lite product is best treated according to M5Stack’s current hardware reference and your tested board. If an effect behaves unexpectedly, verify the installed LED count before changing GPIO35.

GPIO41: Built-In Button

The front push button is connected to GPIO41 and is normally read as an active-low input.

binary_sensor:
  - platform: gpio
    name: "AtomS3 Lite Button"
    pin:
      number: GPIO41
      inverted: true
      mode:
        input: true
        pullup: true

    filters:
      - delayed_off: 10ms

In Home Assistant the button can act as a local scene controller, automation trigger or mode selector.

GPIO4: Infrared Transmitter

AtomS3 Lite includes a built-in IR transmitter LED on GPIO4.

This makes the Lite particularly useful as a compact ESPHome IR blaster:

remote_transmitter:
  pin: GPIO4
  carrier_duty_percent: 50%

You can then add protocol-specific remote-transmitter actions for supported televisions, air conditioners and other IR equipment.

The onboard IR LED is convenient but not a high-power room-flooding transmitter. Direct line-of-sight and reasonable distance matter. For difficult AC units or equipment several metres away, an external transistor-driven IR LED can give much more range.

Arduino IDE Setup

M5Stack provides a dedicated board definition for AtomS3 devices.

  1. Install the current Arduino IDE.
  2. Add/install the M5Stack board package in Boards Manager.
  3. Select M5AtomS3 as the board.
  4. Install M5AtomS3/M5Unified libraries as required by the example.
  5. Connect AtomS3 Lite with a USB-C data cable.
  6. Select the detected USB port.
  7. Compile and upload.

M5Stack’s current Arduino quick-start explicitly uses the M5AtomS3 board selection for both AtomS3 and AtomS3 Lite.

Arduino RGB Example

M5Stack’s library wraps the LED through the AtomS3 display abstraction even on the Lite model:

#include <M5AtomS3.h>

void setup() {
  AtomS3.begin(true);
  AtomS3.dis.setBrightness(80);
}

void loop() {
  AtomS3.dis.drawpix(0xff0000);
  AtomS3.update();
  delay(500);

  AtomS3.dis.drawpix(0x00ff00);
  AtomS3.update();
  delay(500);

  AtomS3.dis.drawpix(0x0000ff);
  AtomS3.update();
  delay(500);
}

The naming looks odd because the full AtomS3 has an LCD, but M5Stack uses a common software API across the devices.

USB Upload Recovery

AtomS3 Lite uses the ESP32-S3’s native USB path for programming.

M5Stack documents this recovery method:

  1. Connect the device by USB.
  2. Press and hold the reset button for about two seconds.
  3. Wait until the internal green LED lights.
  4. Release the button.
  5. The green LED goes off and the device enters download mode.
  6. Select the new USB port and flash again.

If you are troubleshooting native USB on other S3 boards, see our ESP32-S3 USB Not Detected guide.

PlatformIO Configuration

M5Stack’s current reference PlatformIO environment uses an ESP32-S3 DevKitC profile plus native-USB build flags:

[env:m5stack-atoms3]
platform = espressif32
board = esp32-s3-devkitc-1
framework = arduino

upload_speed = 1500000
monitor_speed = 115200

build_flags =
  -DESP32S3
  -DCORE_DEBUG_LEVEL=5
  -DARDUINO_USB_CDC_ON_BOOT=1
  -DARDUINO_USB_MODE=1

lib_deps =
  M5Unified=https://github.com/m5stack/M5Unified

Notice that there is no PSRAM flag in M5Stack’s Lite configuration.

ESPHome Setup

For current ESPHome, configure the hardware as an ESP32-S3 with 8 MB flash.

esphome:
  name: atoms3-lite
  friendly_name: AtomS3 Lite

esp32:
  variant: esp32s3
  flash_size: 8MB
  framework:
    type: esp-idf

logger:

api:
  encryption:
    key: !secret api_encryption_key

ota:
  - platform: esphome
    password: !secret ota_password

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

Do not add a psram: block unless you have verified a different AtomS3-derived board that actually contains PSRAM.

Full ESPHome Hardware Definition

light:
  - platform: esp32_rmt_led_strip
    name: "AtomS3 Lite RGB"
    id: atoms3_rgb
    pin: GPIO35
    num_leds: 1
    rgb_order: GRB
    chipset: WS2812

binary_sensor:
  - platform: gpio
    name: "AtomS3 Lite Button"
    id: atoms3_button
    pin:
      number: GPIO41
      inverted: true
      mode:
        input: true
        pullup: true

remote_transmitter:
  pin: GPIO4
  carrier_duty_percent: 50%

This exposes the three built-in user features without consuming any of the external expansion pins.

Using the Grove / HY2.0-4P Port for I²C

The front/bottom expansion connector gives GPIO2 and GPIO1. A clean ESPHome I²C definition is:

i2c:
  sda: GPIO2
  scl: GPIO1
  scan: true

You can then attach sensors such as:

The connector provides 5 V, so check the attached module’s logic voltage. A Grove connector supplying 5 V does not mean the ESP32-S3 GPIOs are 5 V tolerant.

AtomS3 Lite as a Home Assistant IR Blaster

This is probably the most obvious ESPHome project because all the required hardware is already fitted.

A minimal architecture is:

Home Assistant
      ↓ Native API
AtomS3 Lite
      ↓ GPIO4 IR
TV / AC / amplifier

Add protocol-specific ESPHome remote transmitter actions or climate components, then use the front RGB LED to show transmit/status feedback.

For troubleshooting IR range and air-conditioner commands, see our ESP32 IR Blaster Troubleshooting guide.

AtomS3 Lite as a Room Sensor

Add an I²C sensor to GPIO2/1:

i2c:
  sda: GPIO2
  scl: GPIO1

sensor:
  - platform: sht4x
    temperature:
      name: "Room Temperature"
    humidity:
      name: "Room Humidity"
    update_interval: 30s

The RGB LED can show a warning state and the front button can trigger a Home Assistant scene.

This makes one tiny 24 mm device act as sensor + button + status indicator + IR controller.

AtomS3 Lite as a Bluetooth Proxy

Because it uses ESP32-S3, AtomS3 Lite can also act as a Home Assistant Bluetooth Proxy.

That is attractive when you already need an IR blaster or room sensor in a location where extra BLE coverage would help.

However, a dedicated proxy should be judged on RF placement and Wi-Fi stability rather than board size alone. Do not hide the AtomS3 Lite behind a television in a metal-filled cabinet and then expect ideal BLE range.

See our Best ESP32 for Bluetooth Proxy and ESP32 Bluetooth Proxy for Home Assistant guides.

AtomS3 Lite as a Scene Button

The built-in button can expose short/long/multiple presses through ESPHome automations.

For example:

binary_sensor:
  - platform: gpio
    id: front_button
    pin:
      number: GPIO41
      inverted: true
      mode:
        input: true
        pullup: true

    on_click:
      - min_length: 50ms
        max_length: 500ms
        then:
          - homeassistant.action:
              action: light.toggle
              data:
                entity_id: light.living_room

If ESPHome is allowed to call Home Assistant actions, this turns AtomS3 Lite into a tiny network button without any extra hardware.

Native API or MQTT?

For a normal AtomS3 Lite used only with Home Assistant, use the ESPHome Native API.

MQTT is worthwhile only when the same device data or commands must be shared with independent systems such as Node-RED, custom services or another automation platform.

See our ESPHome Native API vs MQTT comparison.

AtomS3 Lite vs AtomS3

FeatureAtomS3 LiteAtomS3
MCUESP32-S3FN8ESP32-S3 family
Flash8 MB8 MB
LCDNo0.85-inch IPS
IMUNoMPU6886
RGB indicatorYesDifferent display-centric interface
IR transmitterYesModel-specific hardware differs
ButtonYesYes
Best useHeadless control / ESPHome / IRMini interface / display projects

If you do not need the screen or IMU, the Lite is often the more logical device because those extra peripherals would only consume cost, GPIO and firmware complexity.

AtomS3 Lite vs Generic ESP32-S3 SuperMini

A generic S3 SuperMini is cheaper and usually exposes more raw GPIO. AtomS3 Lite gives you a finished enclosure and useful onboard hardware.

NeedBetter choice
Maximum raw GPIO flexibilityGeneric ESP32-S3 SuperMini
Built-in IRAtomS3 Lite
Built-in button + RGB in enclosureAtomS3 Lite
Cheapest bare boardSuperMini
Atomic M5Stack expansion ecosystemAtomS3 Lite

See our ESP32-S3 SuperMini Pinout, Safe GPIOs, USB and PSRAM guide.

Power and Battery Notes

AtomS3 Lite is fundamentally a 5 V powered device. M5Stack specifies USB-C power and a SY8089 5 V-to-3.3 V regulator.

There is no built-in battery in the standard Lite unit. If battery operation is required, use an appropriate M5Stack Atomic base/power accessory or a properly designed external supply.

Do not connect a raw LiPo cell directly to the 5 V input and assume the AtomS3 Lite contains a charger.

Common Problems

SymptomLikely cause / first check
USB port disappears after bad sketchEnter M5Stack download mode by long-press reset
RGB LED does not workCheck GPIO35 and WS2812 configuration
Button always activeGPIO41 is active-low; enable pull-up/inversion
IR commands have short rangeOnboard LED power/line-of-sight limitation
Grove sensor does not respondCheck GPIO2 SDA / GPIO1 SCL and sensor voltage
PSRAM reports zeroNormal for standard AtomS3 Lite; no PSRAM specified
ESPHome won’t connect reliablyCheck Wi-Fi RSSI/power/API rather than pinout
External board uses 5 V logicESP32-S3 GPIO is 3.3 V; add level shifting if required
Wrong GPIO copied from old ATOM LiteOriginal ATOM Lite uses different ESP32 and pin map
Sketch compiled for full AtomS3 peripheralsLite has no LCD/IMU; use Lite-aware configuration

Do Not Confuse AtomS3 Lite with the Original ATOM Lite

M5Stack also sells/has sold the earlier ATOM Lite based on the original ESP32-PICO-D4. Its GPIO assignments are different:

Old ATOM Lite:
RGB    → GPIO27
Button → GPIO39
IR     → GPIO12

AtomS3 Lite:
RGB    → GPIO35
Button → GPIO41
IR     → GPIO4

Copying code for the original ATOM Lite onto the S3 Lite is a very common reason for “nothing works” after a successful upload.

Recommended ESPHome Project

AtomS3 Lite is at its best when you use several of its built-in features at once:

GPIO1/2 → SHT40 or BME280 room sensor
GPIO4   → IR control for AC/TV
GPIO35  → RGB status
GPIO41  → scene/action button
BLE     → Home Assistant Bluetooth Proxy
Wi-Fi   → Native API

That creates a genuinely useful room node in a 24 mm enclosure: climate sensor, IR remote, status light, push button and BLE proxy.

Related M5Stack and ESP32-S3 Guides

Official Resources

Share your love