Logo
Yeelight Crystal Pendant Light (YLDL01YL)
Yeelight Crystal Pendant

Available from:
Banggood.com
Aliexpress.com
Amazon.co.uk



Manufacturer:
Yeelight.com

Install method:
USB to Serial

GPIO #Component
GPIO00 None
GPIO01 None
GPIO02 None
GPIO03 None
GPIO04 None
GPIO05 None
GPIO09 None
GPIO10 None
GPIO12 None
GPIO13 None
GPIO14 None
GPIO15 None
GPIO16 None
GPIO17 None
GPIO18 None
GPIO19 PWM 5
GPIO20 None
GPIO21 PWM 4
GPIO22 None
GPIO23 None
GPIO24 None
GPIO25 None
GPIO26 PWM 2
GPIO27 PWM 3
GPIO6 None
GPIO7 None
GPIO8 None
GPIO11 None
GPIO32 None
GPIO33 PWM 1
GPIO34 None
GPIO35 None
GPIO36 None
GPIO37 None
GPIO38 None
GPIO39 None
Configuration for ESP32
{"NAME":"Yeelight Meteorite","GPIO":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,420,0,419,0,0,0,0,417,418,0,0,0,0,0,416,0,0,0,0,0,0],"FLAG":0,"BASE":1,"CMND":"SO37 128"}
Flash only with ESP32-SOLO1 tasmota32solo1... binaries.

Applying the template adds SetOption37 128 (ChannelRemap) to split ambient RGB (top) and main white into two PWM lights for better control.

Notice: there is some variant that changed RED channel from GPIO33 to GPIO22. If yours is always RED, then change manually PWM1 from GPIO33 to GPIO22

  • GPIO33 - red - PWM1
  • GPIO26 - green - PWM2
  • GPIO27 - blue - PWM3
  • GPIO21 - cold white - PWM4
  • GPIO19 - warm white - PWM5
  • GPIO23 - Night Light (not defined in template)
  • GPIO22 - ON/OFF, not needed as ON/OFF works via PWM too

While operation without using GPIO22 is simpler, the default if not configured is always on (even with PWM channels at zero), meaning that idle power draw is >1W higher than if this pin is used to fully switch off.

If you configure GPIO22 as a relay, Power1 will become main power, Power2 will become the ambient RGB light on top, and Power3 the main CCT lamp. You can then use this small Berry program, mainpower.be to automatically turn on the main power if one of the two light channels are on, and off if both are off.

class MainPower
  var powerstate
  def init()
    self.powerstate = 0
    tasmota.add_rule("Power2#State", / value -> self.setpower(1, value))
    tasmota.add_rule("Power3#State", / value -> self.setpower(2, value))
    self.setpower(1, tasmota.get_power()[1] ? 1 : 0)
    self.setpower(2, tasmota.get_power()[2] ? 1 : 0)
  end
  def setpower(channel, statechange)
    self.powerstate = self.powerstate & (3 - channel) | (channel * statechange)
    var lamppower = self.powerstate > 0
    if lamppower != tasmota.get_power()[0]
      tasmota.set_power(0, lamppower)
      print("Setting lamp main power: " .. lamppower)
    end
  end
end
var mainpower=MainPower()

Store it in the file system, and put load("mainpower.be") in autoexec.be, or even just put the code in autoexec.be. Can save you a bit of energy.

Flashing

Pinout

Several pictures including GPIO