logo elektroda
logo elektroda
X
logo elektroda

[W600 / AJ-05] Bakibo TB95 9W 1000lm RGBCWW Light

ShadowLight30 2421 11

TL;DR

  • Teardown of a Bakibo TB95 9W 1000lm RGBCWW smart light reveals a three-part interior: LED board, switching power supply, and AJ-05 driver board.
  • The AJ-05 board uses a Winnermicro W600-A800 MCU, with exposed test pads for UART0_TX, UART0_RX, and TEST, making UART flashing straightforward.
  • The pinout maps GND, PB8/WW, PB18/R, PB16/G, PB15/B, PB13/CW, and VCC 3.3v, so each color channel is individually accessible.
  • Flashing OpenBeken/OpenW600 creates a new Wi‑Fi AP, enables MQTT and pin configuration, and supports OTA updates.
  • PWM dimming did not work, and OpenW600 does not support PWM on all pins, so the LED channels remain on/off only.
Generated by the language model.
ADVERTISEMENT
📢 Listen (AI):
  • Hello!

    I recently came across this board while looking to convert an Aubess/Tuya relay to OpenBeken... And I was wondering what was making my smart lights tchuutchuu! So please join me in this teardown and modding journey :)

    I bought these lights back in 2019 from Amazon France. They are not available anymore, this link is only for reference. The build quality is good, the body is made of plastic and aluminum. It is compatible with Google Home and Alexa but you need the Smart Life app... Which I'm not a fan of.

    The white dome is held secured to the housing with 2 or 3 dots of glue. Simply twist the dome to break the joints, and unclip it from the housing when it starts rotating. The electronics are made of 3 pieces: the LED board, power supply, and driver board. The LED board is held secured to the housing with 3 small screws and a bit of glue: unscrew the screws then use a dental pick or a small flat screwdriver to pry the board up to break the glue joints. Upon reassembly, I would add some thermal paste where the board meets the housing to help dissipate the heat. The driver board sticks through the LED board... Push against it with your thumb while pulling the LED board to keep the power supply + driver boards inside.
    [W600 / AJ-05] Bakibo TB95 9W 1000lm RGBCWW Light [W600 / AJ-05] Bakibo TB95 9W 1000lm RGBCWW Light [W600 / AJ-05] Bakibo TB95 9W 1000lm RGBCWW Light

    The driver board is soldered to the power supply. By the way, the power supply looks to be a real switching power supply, which is way better than what you can find in an Aubess/Tuya relay! There might be high voltage in there so be careful, but you could connect a USB-TTL converter to the driver board without fearing of frying your USB-TTL or computer. Back to the driver board, it is identified as "AJ-05" on the back, where you can also see the pinout! That's so convenient :)
    (left to right)
    - GND
    - PB8/WW
    - PB18/R
    - PB16/G
    - PB15/B
    - PB13/CW
    - VCC (3.3v)
    The board hosts a Winnermicro W600-A800 microcontroller datasheet here.
    [W600 / AJ-05] Bakibo TB95 9W 1000lm RGBCWW Light [W600 / AJ-05] Bakibo TB95 9W 1000lm RGBCWW Light [W600 / AJ-05] Bakibo TB95 9W 1000lm RGBCWW Light

    We can see 3 test pads on the driver board next to the W600 chip, this is where it gets interesting :)
    - TX1 = PA4 - UART0_TX
    - TX2 = PA5 - UART0_RX
    - TX3 = TEST (useless for us)
    In other words... Would you want to connect this lamp to a USB-TTL converter this is what you would want to do:
    [W600 / AJ-05] Bakibo TB95 9W 1000lm RGBCWW Light

    Ok... and now what? Well now we can flash our favorite OpenBeken app on the chip, and unleash the potential of the light bulb! Well... kind of... more on that later.

    I started using vshymanskyy's w600tool software. Since the reset pin is not readily available on the driver board, we can briefly disconnect then reconnect the ground pin to reset the device when w600tool asks for a reset. Let's say your USB-TTL is known on your computer as COM8, first let's check if we talk the same language as the chip by reading its MAC address:
    Code: Powershell
    Log in, to see the code


    If the output looks decent, let's continue and flash the chip! At this point, I realized there was another tool from OpenBK team that could be used to flash the chip and I think that's the one I used... The OpenW600_xxxxx.fls file was downloaded OpenBK2731T_App releases page on Github, look for the W600 UART flash file.
    Code: Powershell
    Log in, to see the code


    Reboot the device, and you should see a new Wifi popping up around you called OpenW600something. Connect to it, browse to http://192.168.4.1 and configure the device to match your wills (wifi, mqtt...). Then, configure the pins:
    [W600 / AJ-05] Bakibo TB95 9W 1000lm RGBCWW Light

    With these settings, each color has its own channel. However, there is an issue: they are not dimmable. They are either on or off. I tried playing with the settings to get some PWM working but I couldn't get any working results. OpenW600 does not even support PWM on all pins... I'm pretty sure the hardware is capable of outputting PWM on those pins because there is no driver down the line toward the LEDs, only humble transistors. So I guess some modifications would be required on the firmware, I'll look into that later.
    Anyways! Now the light bulb can be reassembled and updated using the OTA feature of the OpenBK/OpenW600 firmware.

    Cool? Ranking DIY
    About Author
    ShadowLight30
    Level 5  
    Offline 
    ShadowLight30 wrote 8 posts with rating 1. Been with us since 2023 year.
  • ADVERTISEMENT
  • #2 20424976
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14403
    Help: 650
    Rate: 12336
    Thanks for very detailed description. I am suprised that there is a PWM issue, please look into it if you can, you can build obk online, no need to setup compiler on your PC. Otherwise I'll try to look into it myself later.
    I also have W600 bulb, not flashed yet:
    [W600 / AJ-05] Bakibo TB95 9W 1000lm RGBCWW Light [W600 / AJ-05] Bakibo TB95 9W 1000lm RGBCWW Light
    Helpful post? Buy me a coffee.
  • ADVERTISEMENT
  • #3 20425109
    ShadowLight30
    Level 5  
    Posts: 8
    Rate: 1
    Thank you. I may have misconfigured the pins tho... In such a case, I guess setting the pin to PWM should work, correct?
    I already have the code and the compiler on my computer because I also highly modified the Aubess relay I have to add a SHT3x temp/humidity sensor and an IR receiver... The value for the temperature is multiplied by 10 upon measure to allow for float result, however the channel's value is sent "as is" over MQTT. I use Domoticz, and it would display a temperature of 235 celsius degrees instead of 23.5. Setting channelType to temperature_div10 would not change the value sent over MQTT so I changed that... Where the code calls for sprintf, I added a switch case to take the channel type into account, and divide the channel value by 10, 100 or 1000 depending on the type. I can send a merge request if you want.
  • ADVERTISEMENT
  • Helpful post
    #4 20425136
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14403
    Help: 650
    Rate: 12336
    I've been thinking about that temperature issue and I assumed the simplest way to handle it without codebase changes would be to do addChangeHandler with publishFloat command and multiple there value by 0.1 before publishing.
    Another solution would be to add a generic pre-publish multiplier for channels.
    Still, please do a pull request, at least so I can review your ideas.

    Your solution seems good but it would break current setups. For example, my TH06 has already *0.1 multiplier on HA side. What about adding a flag for your feature? Do a pull request but encase your behaviour into a flag, something like, CFG_HasFlag(OBK_FLAG_PUBLISH_MULTIPLIED_VALUES) ? That way I could merge your changes right away.
    Helpful post? Buy me a coffee.
  • #5 20438743
    ShadowLight30
    Level 5  
    Posts: 8
    Rate: 1
    Follow-up:
    OTA was broken, even when compiling the firmware locally. It was partially working since I could not even start another OTA from the web app after trying and failing one first time. Something was wrong with the image header. The only way of updating the firmware was via serial...
    Version 1.15.446 fixes the issue, probably since the SDKs update in v1.15.437. I was able to do an OTA through the "old" menu in the config section (it would not work with the previous versions just like in the web app). However, I'm not sure an https link would work from there so here is what I did, assuming these commands are run from a Linux machine with the private IP 192.168.1.250 with Python 3 installed:
    Code: Bash
    Log in, to see the code


    So now we have a web server ready to serve the firmware image to the light bulb. Go to the device's config menu and navigate to the old OTA sub-menu, enter the URL "http://192.168.1.250:9000/OpenW600_1.15.446_gz.img" (set the IP address to your Linux machine) in the text field, click Submit and confirm... Wait for the OTA to finish.
    [W600 / AJ-05] Bakibo TB95 9W 1000lm RGBCWW Light [W600 / AJ-05] Bakibo TB95 9W 1000lm RGBCWW Light

    PWM is still broken on my devices tho... I tried to watch for a signal on the oscilloscope on the driver board outputs (off-grid testing) but they stayed flat low whatever the value set on the channel. I wonder if it would have to do with internal pullup or pulldown?
  • ADVERTISEMENT
  • #6 20438892
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14403
    Help: 650
    Rate: 12336
    We've really tried to reduce the OTA image size so it works again. Problem should be solved, at least for the time being.

    HTTPS support would take too much memory, we can't afford that on W600 platform, W600 has very little memory available, as far as I know.

    @iprak, do you know anything about that PWM issue?

    I am finalizing BL602 bulb flashing video:
    [W600 / AJ-05] Bakibo TB95 9W 1000lm RGBCWW Light
    please keep an eye on our YT channel:
    https://www.youtube.com/@elektrodacom
    the next bulb I have is the one with WinnerMicro chip, so maybe I will know more soon.
    Helpful post? Buy me a coffee.
  • #7 20615095
    TheFatz
    Level 5  
    Posts: 5
    Help: 1
    Rate: 1
    ShadowLight30 wrote:
    PWM is still broken on my devices tho... I tried to watch for a signal on the oscilloscope on the driver board outputs (off-grid testing) but they stayed flat low whatever the value set on the channel. I wonder if it would have to do with internal pullup or pulldown?


    I have a TW-03 based device (MLB7-1025-WHT, https://monsterilluminessence.com/product/smart-led-light-strip/ ) with PWM configures on PB15/PB16/PB18 and I'm also having the issue where PWM doesn't work. LED/Relay does but no PWM function working at all.
  • #8 20615253
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14403
    Help: 650
    Rate: 12336
    The link you have posted is giving me "403 Forbidden", even with extra brace character removed from the end. Maybe it's not available from EU?

    I can try to look into that PWM issue soon, in a meantime, please post a teardown and share full device config if possible.
    Helpful post? Buy me a coffee.
  • #9 20788092
    aquinora
    Level 2  
    Posts: 2
    >>20615095
    I have a similar issue with the same setup. RGB LED on pins 15, 16, 18 on the TW-03 chip. Running version 1.17.291. if I set pins to relay I can turn LEDs on and off, but if set to PWM the LEDs stay dimly illuminated when toggled off. Not sure what it is about the PWM setting that doesn't take the pin all the way to 0.
  • #10 20788146
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14403
    Help: 650
    Rate: 12336
    I haven't seen this issue yet, but maybe we should turn off totally PWM in HAL when a 0 duty is passed:
    https://github.com/openshwprojects/OpenBK7231T_App/blob/main/src/hal/w800/hal_pins_w800.c
    Helpful post? Buy me a coffee.
  • #11 20788165
    aquinora
    Level 2  
    Posts: 2
    I think that may work. I'm willing to give it a test, but am not well versed in compiling binaries.
  • #12 20788192
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14403
    Help: 650
    Rate: 12336
    If you open a pull request, you get automatic online builds for all supported platforms.
    Helpful post? Buy me a coffee.
📢 Listen (AI):

Topic summary

✨ The discussion revolves around the Bakibo TB95 9W 1000lm RGBCWW light and its compatibility with OpenBeken firmware. Users share experiences regarding PWM issues with the W600 bulb, including problems with dimming and relay functionality. The author details a teardown process and modifications to the light, expressing dissatisfaction with the Smart Life app. Solutions proposed include adjusting pin configurations and using a pre-publish multiplier for temperature readings. Users also discuss firmware update challenges, particularly with OTA (Over-The-Air) updates, and share methods for local firmware installation. The conversation highlights the need for community collaboration in troubleshooting and improving device functionality.
Generated by the language model.

FAQ

TL;DR: A 9 W Bakibo TB95 ceiling bulb delivers 1 000 lm while running a Winnermicro W600 MCU; “OTA worked again after we shrank the image” [Elektroda, p.kaczmarek2, post #20438892] Flash via UART, then fix PWM bugs in firmware.

Why it matters: Local firmware unlocks privacy, MQTT control and custom automation.

Quick Facts

• Rated 9 W / 1 000 lm RGBCWW lamp [Elektroda, ShadowLight30, post #20424937] • MCU: Winnermicro W600-A800, 80 MHz, 128 kB SRAM [Winnermicro DS, 2018] • Driver pinout: PB8-WW, PB18-R, PB16-G, PB15-B, PB13-CW, VCC 3.3 V [Elektroda, ShadowLight30, post #20424937] • Safe flashing via 3-pad UART0 (PA4 TX / PA5 RX / GND) [Elektroda, ShadowLight30, post #20424937] • Use OpenW600 ≥ v1.15.446; older OTA builds exceeded 512 kB and failed [Elektroda, ShadowLight30, post #20438743]

How do I open the Bakibo TB95 bulb without damage?

Twist the white dome to break two-three glue dots, unclip it, then remove three screws and gently pry the LED board with a pick to free it from the housing [Elektroda, ShadowLight30, post #20424937]

Which pins do I connect to a USB-TTL adapter for flashing?

  1. PA4 → USB-TTL RX
  2. PA5 → USB-TTL TX
  3. GND → GND Reset by briefly lifting GND, because the reset pad is not exposed [Elektroda, ShadowLight30, post #20424937]

What flashing command works for OpenBeken?

Run wm_tool.exe -c COMx -eo all -rs none -dl OpenW600_1.15.446.fls replacing COMx with the adapter port. The tool erases, resets, and downloads the image in one cycle [Elektroda, ShadowLight30, post #20424937]

Can I update firmware over-the-air (OTA)?

Yes, but only on OpenW600 v1.15.446 or later. Earlier builds exceeded available flash, so OTA aborted with a bad header error [Elektroda, ShadowLight30, post #20438743]

Why doesn’t HTTPS OTA work?

HTTPS requires large TLS buffers. The W600 has only 128 kB SRAM, so developers disabled HTTPS to keep memory for Wi-Fi and MQTT tasks [Elektroda, p.kaczmarek2, post #20438892]

PWM dimming shows no output—what’s wrong?

Current builds leave the PWM peripheral running even at 0 % duty, so outputs float low. A proposed fix is to fully disable PWM in HAL when duty is zero [Elektroda, p.kaczmarek2, post #20788146]

How can I scale temperature values sent over MQTT?

Use addChangeHandler with publishFloat to multiply readings (e.g., ×0.1). An alternative is adding a compile-time flag that divides channel data before publishing [Elektroda, p.kaczmarek2, post #20425136]

What edge case should I watch for during OTA?

If the first OTA fails, the bulb will reject further OTA attempts until reflashed by serial. Always verify the .img size is below 512 kB before pushing it [Elektroda, ShadowLight30, post #20438743]

How to host a local OTA file in three steps?

  1. mkdir /tmp/fw && cd /tmp/fw
  2. wget https://.../OpenW600_1.15.446_gz.img
  3. python3 -m http.server 9000 Enter http://<PC_IP>:9000/OpenW600_1.15.446_gz.img in the bulb’s old OTA menu and submit [Elektroda, ShadowLight30, post #20438743]

What are typical luminous-efficacy figures for this bulb?

At 1 000 lm and 9 W, efficacy is around 111 lm/W, slightly above the 2023 EU minimum of 90 lm/W for LED lamps [EU Reg 2019/2020].

Does pulling PB15/16/18 to relay mode harm the LEDs?

No. Relay mode sets a solid high or low, so LEDs just fully light or extinguish. However, leaving PWM mode at 0 % can keep them faintly lit, a symptom users reported [Elektroda, aquinora, post #20788092]

What memory limits affect feature development?

The W600 offers 1 MB flash and 128 kB RAM; complex features like TLS or large web UIs risk overrunning these limits [Winnermicro DS, 2018].

Is there a risk of shocking my PC when connecting UART?

Minimal. The switching supply provides isolation and the MCU runs at 3.3 V; users have flashed multiple boards without frying USB-TTL adapters [Elektroda, ShadowLight30, post #20424937]
Generated by the language model.
ADVERTISEMENT