M5Stack M5StickC PLUS2
Product Images

GPIO Pinout
| Pin | Function |
|---|---|
| GPIO37 | Button A |
| GPIO39 | Button B |
| GPIO35 | Button C |
| GPIO19 | Internal LED/IR |
| GPIO13 | SPI CLK |
| GPIO15 | SPI MOSI |
| GPIO21 | I2C SDA |
| GPIO22 | I2C SCL |
| GPIO05 | Display CS |
| GPIO14 | Display DC |
| GPIO12 | Display Reset |
| GPIO00 | I2S CLK |
| GPIO26 | I2S LRCLK |
| GPIO34 | Microphone Data |
| GPIO38 | Battery Level |
| GPIO02 | Buzzer |
External Component
Unlike the M5StickC Plus, the Plus2 has no power management chip. Therefore, AXP192 support is not required; TFT
backlight
and battery level are accessed through GPIO pins -- see below for details.
Example Configuration
substitutions:
devicename: m5stickc-plus2
upper_devicename: M5StickC PLUS2
esphome:
name: $devicename
platformio_options:
upload_speed: 115200
esp32:
board: m5stick-c
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: $devicename Fallback Hotspot
password: !secret wifi_password
captive_portal:
logger:
api:
ota:
platform: esphome
# Battery voltage measured through ADC1_CH2. PLUS2 has a voltage divider,
# so reading needs to be multiplied by 2
sensor:
- platform: adc
pin: GPIO38
attenuation: 12db
update_interval: 60s
name: "Battery Voltage"
filters:
- multiply: 2.0
# Built-in 6-axis intertial measurement unit (IMU) that also includes a temperature sensor
- platform: mpu6886
i2c_id: bus_a
address: 0x68
update_interval: 10s
accel_x:
name: "MPU6886 Accel X"
accel_y:
name: "MPU6886 Accel Y"
accel_z:
name: "MPU6886 Accel z"
gyro_x:
name: "MPU6886 Gyro X"
gyro_y:
name: "MPU6886 Gyro Y"
gyro_z:
name: "MPU6886 Gyro z"
temperature:
name: "MPU6886 Temperature"
binary_sensor:
# Turn on display backlight while Button A is pressed
- platform: gpio
pin:
number: GPIO37
inverted: false
name: ${upper_devicename} Button A
on_press:
then:
- light.turn_on: display_bl
on_release:
then:
- light.turn_off: display_bl
# Play 1000Hz tone through buzzer while Button B is pressed
- platform: gpio
pin:
number: GPIO39
inverted: true
name: ${upper_devicename} Button B
on_press:
then:
- output.turn_on: buzzer
- output.ledc.set_frequency:
id: buzzer
frequency: "1000Hz"
- output.set_level:
id: buzzer
level: "50%"
on_release:
then:
- output.turn_off: buzzer
light:
- platform: monochromatic
output: builtin_led
name: ${upper_devicename} Led
id: led1
- platform: monochromatic
output: backlight
name: ${upper_devicename} Backlight
id: display_bl
output:
- platform: ledc
pin: 10
inverted: true
id: builtin_led
- platform: ledc
pin: 2
inverted: true
id: buzzer
- platform: ledc
pin: 27
inverted: true
id: backlight
spi:
clk_pin: GPIO13
mosi_pin: GPIO15
i2c:
- id: bus_a
sda: GPIO21
scl: GPIO22
scan: True
font:
- file: "gfonts://Roboto"
id: roboto
size: 18
color:
- id: my_white
red: 100%
green: 100%
blue: 100%
# 1.14 inch, 135*240 Colorful TFT LCD, ST7789v2
display:
- platform: st7789v
model: TTGO TDisplay 135x240
cs_pin: GPIO5
dc_pin: GPIO14
reset_pin: GPIO12
rotation: 270
lambda: |-
it.print(80, 0, id(roboto), id(my_white), TextAlign::TOP_CENTER, "M5Stick Test");
# note: Audio hasn't been tested
i2s_audio:
id: bus_i2s
i2s_lrclk_pin: G26
i2s_bclk_pin: G0
microphone:
- platform: i2s_audio
i2s_din_pin: GPIO34
i2s_audio_id: bus_i2s
adc_type: external
pdm: true
id: mic