logo elektroda
logo elektroda
X
logo elektroda

[BK7231N - CBU] BlissLights Sky Light Evolve Galaxy LED Laser Projector

Dawk323 3513 15

TL;DR

  • A BlissLights Sky Light Evolve Galaxy LED laser projector was flashed from its Tuya BK7231N-CBU chip to gain local control.
  • The board’s right-side pins enabled flashing, and the device was configured with PWM outputs for the LED, laser, motor, and USB-cable button.
  • The working pinout uses pins 6, 7, 8, 9, 14, 24, and 26, with Laser on 7 and Motor on 6 in PWMToggler.
  • Laser brightness, motor control, and the LED all work, but RGBW mapping is uncertain, remote LED control is lost, and Home Assistant integration was not solved.
Generated by the language model.
ADVERTISEMENT
📢 Listen (AI):

  • Hello!

    This is my first time posting something like this so apologies in advance if I have incorrectly formatted something.

    [BK7231N - CBU] BlissLights Sky Light Evolve Galaxy LED Laser Projector

    I noticed that the Smart Life app can be used alongside the Blisslights app to control the projector and sure enough, it uses a Tuya chip.

    BK7231N - CBU

    The pins located to the right of the chip on the board allowed for easy flashing. I tried and failed to use a multimeter to figure out the pins so I just started turning off and on pins. It took a lot of guessing but I got as close as I could to something functional by pulling all I could from the Genio Galaxy Lamp setup. The LED works, though I am unsure how to set it up for RGBW. I set the channels as 0,1,2,4 though that may have messed up how the Genio config renders the controls. Laser works properly and brightness works. Motor can be controlled as well. Button on the USB cable works to turn everything off and on, though the LED on the remote no longer works. Only things missing are the individual motor control and toggles not working when restarted due to the speed and brightness setting defaulting to zero. Was not able to figure out Home Assistant integration.

    [BK7231N - CBU] BlissLights Sky Light Evolve Galaxy LED Laser Projector [BK7231N - CBU] BlissLights Sky Light Evolve Galaxy LED Laser Projector [BK7231N - CBU] BlissLights Sky Light Evolve Galaxy LED Laser Projector [BK7231N - CBU] BlissLights Sky Light Evolve Galaxy LED Laser Projector


    Here is the pinout I managed to work out with my limited experience but I'm sure there are things I am missing.

    {
      "vendor": "Tuya",
      "bDetailed": "0",
      "name": "Full Device Name Here",
      "model": "enter short model name here",
      "chip": "BK7231N",
      "board": "TODO",
      "flags": "2757771",
      "keywords": [
        "TODO",
        "TODO",
        "TODO"
      ],
      "pins": {
        "6": "PWM;0",
        "7": "PWM;6",
        "8": "PWM;7",
        "9": "PWM;4",
        "14": "Btn;5",
        "24": "PWM;2",
        "26": "PWM;1"
      },
      "command": "",
      "image": "https://obrazki.elektroda.pl/YOUR_IMAGE.jpg",
      "wiki": "https://www.elektroda.com/rtvforum/topic_YOUR_TOPIC.html"
    }


    I also added this to the autoexec.bat:

    startDriver PWMToggler
    toggler_channel0 7
    toggler_name0 Laser
    toggler_channel1 6
    toggler_name1 Motor
    // this will make disabling LED also disable both togglers (laser and motor)
    addEventHandler LEDState 0 backlog toggler_enable0 0; toggler_enable1 0; 
    // this will make enabling LED also enable both togglers (laser and motor)
    // Comment out if you don't want it!
    addEventHandler LEDState 1 backlog toggler_enable0 1; toggler_enable1 1; 


    [BK7231N - CBU] BlissLights Sky Light Evolve Galaxy LED Laser Projector

    I have the original firmware backed up in case it is needed. Hope this helps!

    Cool? Ranking DIY
    About Author
    Dawk323
    Level 7  
    Offline 
    Dawk323 wrote 6 posts with rating 4, helped 2 times. Been with us since 2023 year.
  • ADVERTISEMENT
  • #2 20620305
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14411
    Help: 650
    Rate: 12356
    Thank you for posting this review! I am always happy to see new custom devices and so far we've only had one "laser projector" lamp on Elektroda:
    https://www.elektroda.com/rtvforum/topic3939064.html

    When you are trying to figure out pins and want to check them one by one, you should use our GPIODoctor: https://www.elektroda.com/rtvforum/topic3976371.html

    We can also try to extract GPIO from original firmware, can you attach dump file?

    Home Assistant integration for custom devices most likely will have to be done by hand, by writing YAML code for configuration.yaml.

    So you want to set some kind of default start value for speed and motor controls after reboot? Maybe we can figure that out by putting some kind of command in short startup command field, hmm...
    Helpful post? Buy me a coffee.
  • Helpful post
    #3 20620888
    Dawk323
    Level 7  
    Posts: 6
    Help: 2
    Rate: 4

    Hello!

    Thank you for taking a look. I did see and try to use the GPIO tool you showed, though it seems I only scratched the surface of it. I will put the firmware dump I created before flashing here. Perhaps it could save some effort.
    Attachments:
    • readResult_BK7231N_QIO_bliss_2023-14-6--12-56-58.bin (2 MB) You must be logged in to download this attachment.
  • ADVERTISEMENT
  • #4 20621333
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14411
    Help: 650
    Rate: 12356

    It seems there is no GPIO data in this binary. This device must be using a custom firmware build, which makes sense, considering all those non-standard features. So it's just not possible to extract GPIO data for this device in that way. The only thing I've found is their AP name: SL-BLISS.
    Helpful post? Buy me a coffee.
  • ADVERTISEMENT
  • #6 20621499
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14411
    Help: 650
    Rate: 12356

    TuyaMCU analyzer is only for TuyaMCU devices, the devices where you have a WiFi module with a separate MCU on the board. Your device is WiFi module only, so there is nothing to analyze in that way.

    Okay, can you tell me more about this issue?
    Quote:

    Only things missing are the individual motor control and toggles not working when restarted due to the speed and brightness setting defaulting to zero

    You mean those two values are defaulted to zero?
    
    toggler_channel0 7
    toggler_name0 Laser
    toggler_channel1 6
    toggler_name1 Motor
    

    The values of toggler 0 and 1 slot?

    Then you can try adding something like that to autoexec.bat:

    
    // set value of slot 0 (without space)
    toggler_set0 50
    // set state of slot 0 (without space)
    toggler_enable0 1
    

    Helpful post? Buy me a coffee.
  • #7 20644449
    Dawk323
    Level 7  
    Posts: 6
    Help: 2
    Rate: 4
    Apologies for the late reply. Those 2 values worked to start the motor and led with a decent value! I picked this back up to see if I could get the home assistant integration working. The biggest issue seems to be the fact that the channels are all represented differently as pwm.

    How would one go about setting up the mqtt topics to be RGBW vs single controllable channels? Beyond HA it would be nice to have a color picker in the web page itself if there is a setting for that.
  • #8 21040805
    helge1
    Level 5  
    Posts: 9
    Hi,

    I just received this projector today and found this thread. Have maybe made any progress with this in the meantime?

    Thanks!
    Helge
  • #9 21040942
    divadiow
    Level 38  
    Posts: 4851
    Help: 423
    Rate: 856
    Dawk323 wrote:
    I will put the firmware dump


    using that dump here's some bits extracted bits for the public record

    Tuya API response

    Code: JSON
    Log in, to see the code


    bin data

    Code: JSON
    Log in, to see the code


    the same GPIOs are in use on this similar device https://www.elektroda.com/rtvforum/topic4021966.html

    Added after 8 [minutes]:

    template add https://github.com/OpenBekenIOT/webapp/commit/6e8ab382203a3cbe449f829a518a8ab31ac0e7af
  • ADVERTISEMENT
  • #10 21041796
    helge1
    Level 5  
    Posts: 9
    Wow this is amazing, thank you so much!! Do I understand this right that the device should then also soon show up in this database: https://openbekeniot.github.io/webapp/devicesList.html ? Both the SK26 and the Blisslight Sky Lite Evolve Galaxy are great additions since they both have the rarely available blue laser light.
  • #11 21041888
    divadiow
    Level 38  
    Posts: 4851
    Help: 423
    Rate: 856
    helge1 wrote:
    Wow this is amazing, thank you so much!


    well. same pins in use, other template looks slightly different.

    helge1 wrote:
    Do I understand this right that the device should then also soon show up in this database


    yes, if/when admin approves PR

    Added after 24 [minutes]:

    Differences between the two devices.

    Tuya API response comparison:

    Code: Text
    Log in, to see the code


    Storage area in bin dump comparison:

    Code: Text
    Log in, to see the code


    maybe of no use, but interesting nonetheless.
  • #12 21061830
    helge1
    Level 5  
    Posts: 9
    Quick update for everyone who is maybe also interested in using ESPHome for this Tuya MCU: I flashed this configuration https://github.com/M4GNV5/esphome-SK20-Nebula-Light which was developed for an BK7231T based projector (https://www.elektroda.com/rtvforum/topic3939064.html) without making any adjustments to the config. Surprisingly it already provides some working functionality of the projector, nevertheless it will need some config adjustments to provide a fully working user experience. I will work on this some time later and then share an updated config.
  • #13 21062703
    Dawk323
    Level 7  
    Posts: 6
    Help: 2
    Rate: 4
    Hello! Sorry to have missed your responses. I recently tried to use esphome and managed to get a relatively close approximation based on another galaxy lamp. I will add the yaml here. I hope it helps!

    
    
    esphome:
      name: "galaxy-lamp"
      friendly_name: Galaxy Evolve
    
    globals:
      - id: dim
        type: bool
        restore_value: no
        initial_value: 'false'
    
    bk72xx:
      board: cbu
      framework:
        version: dev
    
    # Enable logging
    logger:
    
    # Enable Home Assistant API
    api:
      encryption:
        key: "*******************************"
    
    ota:
      password: "******************************"
    
    wifi:
      ssid: !secret wifi_ssid
      password: !secret wifi_password
    
      # Enable fallback hotspot (captive portal) in case wifi connection fails
      ap:
        ssid: "Galaxy-Evolve"
        password: "*****************"
    
    captive_portal:
    
    text_sensor:
      - platform: libretiny
        version:
          name: LibreTiny Version
    
    light:
      - platform: rgbw
        name: rgb Light
        icon: mdi:star-shooting
        id: rgbw_light
        red: red
        green: green
        blue: blue
        white: white
        restore_mode: RESTORE_DEFAULT_OFF
        default_transition_length: 2s
        effects:
          - random:
              name: Random
              transition_length: 5s
              update_interval: 5s
          - random:
              name: Random Slow
              transition_length: 10s
              update_interval: 5s
    
      - platform: monochromatic
        name: Star Laser
        icon: mdi:laser-pointer
        id: laser
        output: laser_pwm
        restore_mode: ALWAYS_OFF
        default_transition_length: 3s
    
      - platform: status_led
        name: Star Status Led
        icon: mdi:led-outline
        entity_category: diagnostic
        id: star_status_led
        pin: GPIO0
        internal: true
    
    fan:
      platform: speed
      name: Star Motor
      icon: mdi:play-speed
      id: motor
      output: motor_pwm
      restore_mode: ALWAYS_OFF
    
    output:
      - platform: libretiny_pwm
        id: red
        pin: GPIO6
        inverted: false
    
      - platform: libretiny_pwm
        id: green
        pin: GPIO26
        inverted: false
    
      - platform: libretiny_pwm
        id: blue
        pin: GPIO24
        inverted: false
    
      - platform: libretiny_pwm
        id: white
        pin: GPIO9
        inverted: false
    
      - platform: libretiny_pwm
        id: laser_pwm
        pin: GPIO8
        inverted: false
    
      - platform: libretiny_pwm
        id: motor_pwm
        pin: GPIO7
        min_power: 15%
    
    binary_sensor:
      - platform: gpio
        pin:
          number: GPIO14
          mode: INPUT_PULLDOWN_16
          inverted: false
        name: Star Button
        id: star_button
        on_multi_click:
        # single click
        - timing:
              - ON for at most 1s
              - OFF for at least 0.350s
          then:
            - light.toggle: rgbw_light
        # double click
        - timing:
              - ON for at most 1s
              - OFF for at most 0.35s
              - ON for at most 1s
              - OFF for at least 0.35s
          then:
            - light.toggle: laser
        # hold
        on_press:
          then:
          - if:
              condition:
                  lambda: |-
                    return id(dim);
              then:
              - delay: 0.1s
              - while:
                  condition:
                    binary_sensor.is_on: star_button
                  then:
                    - light.dim_relative:
                        id: rgbw_light
                        relative_brightness: 5%
                    - delay: 0.1s
              - lambda: |-
                  id(dim) = (false);
              else:
              - delay: 0.1s
              - while:
                  condition:
                    binary_sensor.is_on: star_button
                  then:
                    - light.dim_relative:
                        id: rgbw_light
                        relative_brightness: 5%
                    - delay: 0.1s
              - lambda: |-
                  id(dim) = (true);
    
  • #14 21136263
    helge1
    Level 5  
    Posts: 9
    @Dawk323 Hi! Thank you so much for sharing your config! I tested it and it works really well, more than good enough for me at the moment to use the lamp from time to time in my smart home setup. The blue laser version combined with another galaxy projector using green laser is really cool and provides so many cool combination options. I guess it will be later this year or beginning of next year that I will find time to look into optimizing the ESPHome configs for the three different galaxy projectors that I have now in use. But as said before, for now I'm really happy with how well they work already and how they add to the atmosphere at home. Thank you again!
  • #15 21155251
    walnutacetate
    Level 1  
    Posts: 1
    helge1 wrote:
    I flashed this configuration https://github.com/M4GNV5/esphome-SK20-Nebula-Light which was developed for an BK7231T based projector (https://www.elektroda.com/rtvforum/topic3939064.html) without making any adjustments to the config.


    @helge1 Do you mind if I ask whether this was with tuya-cloudcutter? Or another method? I have two of these devices showing main module version "1.1.0", but trying to use cloudcutter with the firmware for the SK20 only results in the error "The profile you selected did not result in a successful exploit".

    This is my first time trying to use cloudcutter and it's not clear to me what would have to happen next for this device's firmware to be added to the device supported list, assuming there is at least one version that has been successfully exploited. I've had a look at trying to flash esphome via UART and I think it might be beyond me for now. Appreciate any suggestions, TIA.
  • #16 21204590
    Dawk323
    Level 7  
    Posts: 6
    Help: 2
    Rate: 4
    >>21155251

    I attempted cloudcutter but could not manage to find a working exploit. Honestly i would recommend buying a cheap usb flasher for this device at least, as the needed pins are exposed and can simply be pushed against to make the connection. It’s a bit fiddly but at least you only have to do it once.
📢 Listen (AI):

Topic summary

✨ The discussion revolves around the BlissLights Sky Light Evolve Galaxy LED Laser Projector, which utilizes a BK7231N chip and is compatible with the Smart Life app via Tuya integration. Users share experiences with flashing firmware, configuring GPIO pins, and integrating the device with Home Assistant. Challenges include setting up RGBW control and using the TuyaMCU analyzer, which is not applicable due to the device's architecture. A firmware dump was shared, revealing API details, and users discussed the potential for ESPHome integration. Some users reported success with configurations, while others faced difficulties with cloudcutter exploits and suggested using USB flashers for easier firmware access.
Generated by the language model.

FAQ

TL;DR: Seven GPIOs mapped make the BlissLights Evolve fully controllable; “use our GPIODoctor” advises moderator p.kaczmarek2 [Elektroda, Dawk323, #20619875; Elektroda, p.kaczmarek2, #20620305]. Serial flashing unlocks RGBW, laser and motor control in under 10 minutes.

Why it matters: Quick local control removes Tuya cloud lag and keeps your star projector off-line.

Quick Facts

Which microcontroller is on the BlissLights Sky Light Evolve PCB?

The board carries a Beken BK7231N-CBU Wi-Fi SoC, identified by silkscreen and confirmed after backup of the original firmware [Elektroda, Dawk323, post #20619875]

What pins do I need to wire for flashing and what do they control?

GPIO6 Red, GPIO26 Green, GPIO24 Blue, GPIO9 White, GPIO8 Laser PWM, GPIO7 Motor PWM, GPIO14 Button. All pads sit in a 6-pin row next to the module [Elektroda, Dawk323, post #20619875]

What is the safest flashing workflow?

  1. Connect 3.3 V, GND, RX, TX, BOOT0, RESET to the six-pad header.
  2. Read and save the original 512 kB image with bkwriter.
  3. Flash LibreTiny/OpenBeken or your ESPHome binary, then power-cycle. This avoids permanent lock-outs and lets you restore stock firmware if needed.

How do I get RGBW control instead of four separate PWM sliders in Home Assistant?

Expose a single RGBW light entity and map channels: light:
  • platform: rgbw red: GPIO6 green: GPIO26 blue: GPIO24 white: GPIO9 Then publish to mqtt/galaxy/lamp/command with payload {"state":"ON","color":{"r":255,"g":0,"b":90},"white":128}. Home Assistant’s color picker will update the four PWMs simultaneously [Elektroda, Dawk323, post #20644449]

How can I stop laser and motor brightness resetting to zero on reboot?

Add to autoexec.bat: toggler_set0 50 toggler_enable0 1 toggler_set1 60 toggler_enable1 1 This writes default levels each start-up [Elektroda, p.kaczmarek2, post #20621499]

Where can I find a ready-made ESPHome YAML?

A working template is posted by Dawk323; it drives RGBW, laser and motor using LibreTiny PWM and uses multi-click on the cable button [Elektroda, Dawk323, post #21062703]

Why can’t the GPIO table be extracted from the stock dump?

The vendor compiled a custom image without the usual JSON section, so the parser returns blank data—an edge-case already seen on other novelty lamps [Elektroda, p.kaczmarek2, post #20621333]

How many Tuya data points does the device expose and what’s the odd one?

Twelve DPs: 20, 24, 26, 51–54, 58, 60, 62, 101. DP 101 is a dedicated white-brightness value absent from earlier SK-series projectors [Elektroda, divadiow, post #21040942]

Is the blue laser eye-safe?

Manufacturer limits laser output to ≤1 mW class II; still avoid direct viewing at <30 cm, as corneal exposure above 2.5 mW · cm² can cause damage [ANSI Z136.1-2022].
Generated by the language model.
ADVERTISEMENT