How to configure a GL-S10 Bluetooth proxy?

I just purchased a second GL-S10 which is arriving today. It also has ESPhome pre-installed. The first one I used the ESPhome and Bluetooth integrations to configure the GL-S10, but at one point I was unable to continue configuration. I think the bits of YAML code I cobbled together bricked it so I returned it.

Is there any documentation available on how to configure this device? I’ve read some other posts and a couple have some YAML posted, but I don’t know if it was complete or not.

-Thanks

This is what I’m using:

# Instructions on opening and wiring for flashing on https://blakadder.com/gl-s10

substitutions:
  name: gl-s10-bt-proxy
  friendly_name: GL-S10 BT Proxy

esphome:
  name: ${name}
  friendly_name: ${friendly_name}
  min_version: 2026.9.0
  name_add_mac_suffix: true
  # turn on Power LED when esphome boots
  on_boot:
    then:
      - output.turn_on: power_led


esp32:
  variant: esp32
  framework:
    type: esp-idf


logger:
  level: debug

api:
  encryption:
    key: ###YOUR KEY###

ota:
  - platform: esphome
    encryption: 
    id: ota_esphome


# Configuration fo V2.3 hardware revision
ethernet:
  type: IP101
  mdc_pin: GPIO23
  mdio_pin: GPIO18
  clk:
    pin: GPIO0
    mode: CLK_EXT_IN
  phy_addr: 1
  power_pin: GPIO5
  manual_ip:
    static_ip: ###YOUR IP###
    gateway: ###YOUR GATEWAY###
    subnet: ###YOUR SUBNET###
  
# Comment the above and use this instead for V1.0 revision of the hardware
# ethernet:
#   type: LAN8720
#   mdc_pin: GPIO23
#   mdio_pin: GPIO18
#   clk:
#     pin: GPIO17
#     mode: CLK_OUT
#   phy_addr: 1


esp32_ble:
  max_connections: 4

esp32_ble_tracker:
  scan_parameters:
    active: true

bluetooth_proxy:
  active: true
  connection_slots: 4

button:
  - platform: safe_mode
    id: button_safe_mode
    name: Safe Mode Boot

  - platform: factory_reset
    id: factory_reset_btn
    name: Factory reset

## DEVICE SPECIFIC CONFIGURATION
# network LED (white one) configured as status led
status_led:
  pin:
    number: GPIO32
    inverted: true

# button on the side labeled RESET
binary_sensor:
  - platform: gpio
    pin:
      number: GPIO33
      inverted: true
    name: "Reset Button"
    id: binary_sensor_reset_button

# output settings for LED's marked Power and Bluetooth
# power LED use: see code line 15
# bluetooth LED use: see code line 60
output:
  - platform: gpio
    pin: GPIO14
    inverted: true
    id: power_led
  - platform: gpio
    pin: GPIO12
    inverted: true
    id: bluetooth_led

# since these pins are broken out inside and labeled as I2C pins they're configured here
i2c:
  - id: i2c_bus
    sda: 15
    scl: 13
    scan: true

It’s basically impossible to brick this device as you have easy access to the board.

For all info you need, incl a working config

Thanks! So I believe I just need to connect the GL-S10 to ethernet and obtain the network settings and replace them in the config you provided. Then use ESPHome Builder to write it to the GL-S10. Is that it basically?

I’m using the configuration you provided modified with my devices network settings. But I keep getting the error shown below. I tried with and without the encryption key. Any suggestions to get past this error would be appreciated.

Follow the directions in the error… it gives 2 pathways to try.

  1. Remove the ota block from the config and then install the firmware. Then add it back and reinstall after the device is using 2026.9.0 or later.
  2. Leave the config as is, and Install the firmware using serial (USB).

It won’t install over the network with the ota block removed. I’ll try the USB method tomorrow.

-Thanks

I’ve tried various permutation of the api and ota sections below but always get errors when compiling. This is a brand new GL-S10 and the older version lacks supporting certain parameters. Can someone tell me how to configure the api and ota parameters so I can compile and install this over ethernet?

I also tried configuring web access and got the error below.

-Thanks

api:
 encryption:
   key: zFwkE8Tc2ILUXCi+xDnw5gjDEDMbZo=
 
#ota:
#  - platform: esphome
#    id: ota_esphome
#    password: !secret gl_s10_bt_proxy__ota_password
#    encryption:

ota:
  - platform: esphome
    encryption:

What happened to trying to flash it over serial?

What version of ESPHome are you currently running? The encryption option for ota is only supported starting with ESPHome 2026.9.0.

I read that to flash it over serial you needed to disassemble the GL-S10 and connect wires to the device which I don’t have.

Yes, it is ESPHome 2026.9.0. But I believe the version on this devices is very old, so it doesn’t support many of these newer options like encryption.

-Thanks

Ok… if it came to you with ESPHome pre-installed, but you weren’t provided an OTA password or encryption key, try using a basic config for those:

ota:
  platform: esphome

api:

Thanks, but that didn’t work either, I got the following error. I posted my YAML config below, it’s basically the one I copied from your post.

-Thanks

WARNING receiving update prepare result response: \[Errno 104\] Connection reset by peer
INFO Retrying in 5 seconds (attempt 3 of 3)...
INFO Connecting to 10.99.1.101 port 3232...
INFO Connected to 10.99.1.101
INFO Uploading /data/build/gl-s10-bt-proxy/build/gl-s10-bt-proxy.bin (842160 bytes)
INFO Connection established; device supports OTA version 2
INFO Handshake complete
WARNING receiving update prepare result response: \[Errno 104\] Connection reset by peer
ERROR Upload failed after 3 attempts: receiving update prepare result response: \[Errno 104\] Connection reset by peer
WARNING Failed to upload to \['10.99.1.101'\]
**Install failed.**
substitutions:
  name: gl-s10-bt-proxy
  friendly_name: GL-S10 BT Proxy

esphome:
  name: ${name}
  friendly_name: ${friendly_name}
  min_version: 2026.9.0
  name_add_mac_suffix: true
  # turn on Power LED when esphome boots
  on_boot:
    then:
      - output.turn_on: power_led


esp32:
  variant: esp32
  framework:
    type: esp-idf


logger:
  level: debug

#api:
# encryption:
#   key: iePPzFwkE8Tc2ILUXCiiY+xDnwuQ5gjDExDgDMbZqMo=
 
#ota:
#  - platform: esphome
#    id: ota_esphome
#    password: !secret gl_s10_bt_proxy__ota_password
#    encryption:

#ota:
#  - platform: esphome
#    encryption:

ota:
  platform: esphome

api:
  
#web_server:
#   port: 80
#
#ota:
#  - platform: web_server

# Configuration fo V2.3 hardware revision
ethernet:
  type: IP101
  mdc_pin: GPIO23
  mdio_pin: GPIO18
  clk:
    pin: GPIO0
    mode: CLK_EXT_IN
  phy_addr: 1
  power_pin: GPIO5
  manual_ip:
    static_ip: 10.99.1.101
    gateway: 10.99.1.1
    subnet: 255.255.255.0
  
# Comment the above and use this instead for V1.0 revision of the hardware
# ethernet:
#   type: LAN8720
#   mdc_pin: GPIO23
#   mdio_pin: GPIO18
#   clk:
#     pin: GPIO17
#     mode: CLK_OUT
#   phy_addr: 1


esp32_ble:
  max_connections: 4

esp32_ble_tracker:
  scan_parameters:
    active: true

bluetooth_proxy:
  active: true
  connection_slots: 4

#button:
#  - platform: safe_mode
#    id: button_safe_mode
#    name: Safe Mode Boot

#  - platform: factory_reset
#    id: factory_reset_btn
#    name: Factory reset

## DEVICE SPECIFIC CONFIGURATION
# network LED (white one) configured as status led
status_led:
  pin:
    number: GPIO32
    inverted: true

# button on the side labeled RESET
binary_sensor:
  - platform: gpio
    pin:
      number: GPIO33
      inverted: true
    name: "Reset Button"
    id: binary_sensor_reset_button

# output settings for LED's marked Power and Bluetooth
# power LED use: see code line 15
# bluetooth LED use: see code line 60
output:
  - platform: gpio
    pin: GPIO14
    inverted: true
    id: power_led
  - platform: gpio
    pin: GPIO12
    inverted: true
    id: bluetooth_led

# since these pins are broken out inside and labeled as I2C pins they're configured here
i2c:
  - id: i2c_bus
    sda: 15
    scl: 13
    scan: true