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
| Feature | M5Stack AtomS3 Lite |
|---|---|
| SoC | ESP32-S3FN8 |
| CPU | Dual-core Xtensa LX7 |
| Maximum clock | 240 MHz |
| Flash | 8 MB |
| PSRAM | None documented on the Lite model |
| Wi-Fi | 2.4 GHz 802.11 b/g/n |
| Bluetooth | BLE through ESP32-S3 |
| USB | USB-C, native download/serial |
| RGB indicator | WS2812C-2020 on GPIO35 |
| User button | GPIO41 |
| IR transmitter | GPIO4 |
| Grove/HY2.0-4P | GPIO2 + GPIO1 + 5V + GND |
| Bottom expansion GPIOs | GPIO5, 6, 7, 8, 38, 39 |
| Power input | 5 V via USB-C |
| 3.3 V regulator | SY8089 |
| Size | 24.0 × 24.0 × 9.5 mm |
| Weight | 5.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
| GPIO | Function on AtomS3 Lite | Available for your project? |
|---|---|---|
| GPIO1 | HY2.0-4P / Grove signal | Yes, external |
| GPIO2 | HY2.0-4P / Grove signal | Yes, external |
| GPIO4 | IR transmitter | Already used internally |
| GPIO5 | Bottom expansion | Yes |
| GPIO6 | Bottom expansion | Yes |
| GPIO7 | Bottom expansion | Yes |
| GPIO8 | Bottom expansion | Yes |
| GPIO35 | WS2812 RGB LED data | Already used internally |
| GPIO38 | Bottom expansion | Yes |
| GPIO39 | Bottom expansion | Yes |
| GPIO41 | User button | Already 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.
- Install the current Arduino IDE.
- Add/install the M5Stack board package in Boards Manager.
- Select M5AtomS3 as the board.
- Install M5AtomS3/M5Unified libraries as required by the example.
- Connect AtomS3 Lite with a USB-C data cable.
- Select the detected USB port.
- 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:
- Connect the device by USB.
- Press and hold the reset button for about two seconds.
- Wait until the internal green LED lights.
- Release the button.
- The green LED goes off and the device enters download mode.
- 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
| Feature | AtomS3 Lite | AtomS3 |
|---|---|---|
| MCU | ESP32-S3FN8 | ESP32-S3 family |
| Flash | 8 MB | 8 MB |
| LCD | No | 0.85-inch IPS |
| IMU | No | MPU6886 |
| RGB indicator | Yes | Different display-centric interface |
| IR transmitter | Yes | Model-specific hardware differs |
| Button | Yes | Yes |
| Best use | Headless control / ESPHome / IR | Mini 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.
| Need | Better choice |
|---|---|
| Maximum raw GPIO flexibility | Generic ESP32-S3 SuperMini |
| Built-in IR | AtomS3 Lite |
| Built-in button + RGB in enclosure | AtomS3 Lite |
| Cheapest bare board | SuperMini |
| Atomic M5Stack expansion ecosystem | AtomS3 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
| Symptom | Likely cause / first check |
|---|---|
| USB port disappears after bad sketch | Enter M5Stack download mode by long-press reset |
| RGB LED does not work | Check GPIO35 and WS2812 configuration |
| Button always active | GPIO41 is active-low; enable pull-up/inversion |
| IR commands have short range | Onboard LED power/line-of-sight limitation |
| Grove sensor does not respond | Check GPIO2 SDA / GPIO1 SCL and sensor voltage |
| PSRAM reports zero | Normal for standard AtomS3 Lite; no PSRAM specified |
| ESPHome won’t connect reliably | Check Wi-Fi RSSI/power/API rather than pinout |
| External board uses 5 V logic | ESP32-S3 GPIO is 3.3 V; add level shifting if required |
| Wrong GPIO copied from old ATOM Lite | Original ATOM Lite uses different ESP32 and pin map |
| Sketch compiled for full AtomS3 peripherals | Lite 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
- M5Stack PaperMono: Pinout, Arduino Setup and PaperS3 Differences — another current M5Stack ESP32-S3 platform.
- M5Stack PaperS3 ESP32-S3 Guide — larger battery/display M5Stack platform.
- ESP32-S3 SuperMini Pinout, Safe GPIOs, USB and PSRAM — raw tiny S3 alternative.
- ESP32 IR Blaster Troubleshooting — IR range and air-conditioner command problems.
- ESPHome Native API vs MQTT — choosing the best Home Assistant integration method.
Official Resources
- M5Stack AtomS3 Lite Hardware Reference — specifications, pinout, schematic and expansion connectors.
- M5Stack AtomS3 Arduino Programming Guide — board selection and download mode.
- M5Stack AtomS3 Lite RGB Example — official LED test code.
- ESPHome Remote Transmitter — IR output configuration.
- ESPHome ESP32 RMT LED Strip — WS2812 RGB control.