RGB+CW Lapm Tuya WBLC9 (BK7231T) + BP1658
TL;DR
- A Tuya RGB+CW lamp using the WBLC9 module with BK7231T and BP1658 gets converted for OpenBK7231T control.
- The body is heated, pried open, and the controller’s flash is backed up with a CH341A before any firmware changes.
- The SPI chip is identified as EN25QH16, a 16 Mbits / 2 Mbytes flash, and the backup can be restored later.
- OpenBK7231T is flashed over UART with a 3.3V serial adapter, then configured at 192.168.4.1 for BP1658CJ_DAT on P24 and BP1658CJ_CLK on P26.
- Home Assistant MQTT settings and the startup command `BP1658CJ_Map 2 1 0 4 3` complete the lamp integration, with power-loss restore enabled by Flag4 and Flag12.
https://developer.tuya.com/en/docs/iot/wblc9-module-datasheet?id=K9hgglry2jp5h
Homework tonight:
Package and marking:
disassembly:
We heat up
And with both hands, just gently break it in half.
remove pimpochka
With a blunt knife, gently move the base in a circle
cut off white snot
with a thin but strong screwdriver, push the disk out with LEDs
Excellent result:
connect external power
We solder the contacts of the TP
Next are two options:
save a backup and be able to rollback or just flash
Create and save a flash memory backup. You need a programmer SPI memory, for example
inexpensive CH341A.
connect the SPI bus in CEN
connect the programmer. Be careful. TC can be damaged by jerks on the wires
Software NeoProgrammer, Asprogrammer
NeoProgrammer download
Drivers download
Script for transferring the chip to memory access mode
{$ INIT_AND_READ_FLASH_ID}
begin
ID:= CreateByteArray(4);
RESP:= CreateByteArray(250);
if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
LogPrint ('Read JEDEC ID');
// init SPI
for i:=0 to 250 do
begin
SPIWrite (0, 1, $D2);
ProgressBar(1);
end;
// read response
SPIRead(1, 3, ID);
// logprint('RESP: ' + inttohex((GetArrayItem(RESP, 0)),2)+ inttohex((GetArrayItem(RESP, 1)),2));
// read ID to test installation
SPIWrite (0, 4, $9F, $00, $00, $00);
SPIRead(1, 4, ID);
logprint('CHIP ID: ' + inttohex((GetArrayItem(ID, 2)),2) + inttohex((GetArrayItem(ID, 1)),2)+ inttohex((GetArrayItem(ID, 0)),2));
LogPrint ('End read JEDEC ID');
SPIExitProgMode ();
end
1. Press CEN in gnd, Execute script & release CEN
wait 15701 in log
repit in err (id 00000)
2.Press "Detect" Chip
select EN25Q16
3. Press Read IC
Wait:
Currently selected: EN25QH16 [3.3V] 16 Mbits, 2 Mbytes
---------------------------------------------------------------------------
Current programmer: CH341 Black
21:19:22
Reading memory... Main Memory
Success
Execution time: 00:00:17.072
CRC32 = 0x********
4.Press File & Save
Great. you can always return to this state if you do not break the board
Firmware through any UART port available to you with 3.3v levels (for example)
We transfer the programmer CH341A to serial mode, remove the jumper (or any other, which is available)
run the program for the firmware (download the program and the latest firmware )
specify your file with the program and your com port
python uartprogram С:\test\OpenBK7231T_UA_1.12.103.bin -d com8 -w
Next, we connect to the access point, go to the address 192.168.4.1 and make settings
The main ones related to the lamp and the chip:
Configure module:
P24 BP1658CJ_DAT
P26 BP1658CJ_CLK
Configure General
set Flag4 ( restore on power and flag12 )
Change Startup command text::
BP1658CJ_Map 2 1 0 4 3
Setting up MQTT ( ip, topic, username, password )
Home assistaint (configuration.yaml ):
mqtt:
light:
- unique_id: "Name_Id"
name: "Name"
rgb_command_template: "{{ '%02x%02x%02x' | format(red, green, blue)}}"
rgb_state_topic: "obkMAC/led_basecolor_rgb/get"
rgb_command_topic: "cmnd/obkMAC/led_basecolor_rgb"
rgb_value_template: "{{ value[0:2]|int(base=16) }},{{ value[2:4]|int(base=16) }},{{ value[4:6]|int(base=16) }}"
command_topic: "cmnd/obkMAC/led_enableAll"
state_topic: "obkMAC/led_enableAll/get"
availability_topic: "obkMAC/connected"
payload_on: "1"
payload_off: "0"
brightness_command_topic: "cmnd/obkMAC/led_dimmer"
brightness_scale: 100
brightness_state_topic: "obkMAC/led_dimmer/get"
brightness_value_template: "{{value}}"
color_temp_command_topic: "cmnd/obkMAC/led_temperature"
color_temp_state_topic: "obkMAC/led_temperature/get"
retain: true
Good luck!
P.S.
Huge thanks to btsimonh and Refuhr for their help!
P.S.S
(RUS version) and sorry for bad english
Comments
Как узнать правильный порядок цветов , у меня аналогичная лампа, но цвета не соответствуют выбранным. [Read more]
Change Startup command text:: BP1658CJ_Map 2 1 0 4 3 2 1 0 4 3 - > BRGWC [Read more]
спасибо ! разобрался сам, получилось BP1658CJ_Map 1 0 2 3 4 [Read more]
I just recieved the same bulb, board is the same, only module is different. It has CBLC9, and it doesn't work with custom firmware (neither openbeken, or libretiny has worked). If flashed with openbeken,... [Read more]
interesting. I wonder if it's uses new keys like https://www.elektroda.com/rtvforum/topic4032988.html @pkaczmarek2 knows about this. I think I've seen other posts with similar boot output and non-working... [Read more]
https://github.com/Brokly/ESPHOME_SBER_SBDV-00115 @divadiow Only: board_build.bkcrypt_coeffs: 79bffed7a3fbeafd5dd3abffdfbfff5b board_build.bkota.key: BDB4CE110F4787C2F539BF50E30A14E0 board_build.bkota.iv:... [Read more]
That one has not worked for me, it seems it has different encryption keys. Besides, it's a different device, E27 + CB2L + BP5758D. Edit: installed with these platformio_options: board_build.bkcrypt_coeffs:... [Read more]