-
Bafang BBS02 Programming Adapter: CP2102 Version
The last view before sticking the lid in place with hot melt glue:

Bafang BBS02 – CP2102 Programming Adapter The cable on the right goes to the motor controller through the display pigtail cable, sporting colors from a parallel universe.
A (possibly not counterfeit) CP2102 USB-to-serial adapter allows a slightly smaller case than one with the known-fake FTDI adapter and added some identification:

Bafang BBS02 – CP2102 Programming Adapter – case solid model It splits along the midline for printing, of course.
The OpenSCAD source code replaces the previous version:
// Programming cable case ProgCavity = [60.0,18.0,7.0]; ProgBlock = [70.0,24.0,13.0]; ProgCableOD = 4.0; module ProgrammerCase() { difference() { hull() { for (i=[-1,1], j=[-1,1]) translate([i*(ProgBlock.x/2 - CornerRadius),j*i*(ProgBlock.y/2 - CornerRadius),-ProgBlock.z/2]) cylinder(r=CornerRadius,h=ProgBlock.z,$fn=12); } translate([-ProgBlock.x,0,0]) rotate([0,90,0]) PolyCyl(ProgCableOD,3*ProgBlock.x,6); cube(ProgCavity,center=true); translate([0,0,ProgBlock.z/2 + ProgCavity.z/2 - EmbossDepth]) cube(ProgCavity,center=true); translate([0,0,-(ProgBlock.z/2 + ProgCavity.z/2 - EmbossDepth)]) cube(ProgCavity,center=true); } translate([0,4,ProgBlock.z/2 - EmbossDepth]) linear_extrude(height=EmbossDepth) text(text="Bafang BBS02", size=5,spacing=1.00,font="Bitstream Vera Sans:style=Bold", halign="center",valign="center"); translate([0,-4,ProgBlock.z/2 - EmbossDepth]) linear_extrude(height=EmbossDepth) text(text="Programmer", size=5,spacing=1.00,font="Bitstream Vera Sans:style=Bold", halign="center",valign="center"); translate([0,4,-ProgBlock.z/2]) linear_extrude(height=EmbossDepth) mirror([1,0]) text(text="Ed Nisley", size=5,spacing=1.00,font="Bitstream Vera Sans:style=Bold", halign="center",valign="center"); translate([0,-4,-ProgBlock.z/2]) linear_extrude(height=EmbossDepth) mirror([1,0]) text(text="softsolder.com", size=5,spacing=1.00,font="Bitstream Vera Sans:style=Bold", halign="center",valign="center"); } // Half case sections for printing module HalfCase(Section = "Upper") { intersection() { translate([0,0,ProgBlock.z/4]) cube([2*ProgBlock.x,2*ProgBlock.y,ProgBlock.z/2],center=true); if (Section == "Upper") ProgrammerCase(); else translate([0,0,ProgBlock.z/2]) ProgrammerCase(); } } // .. snippage .. translate([0,2*Block.x/2 * gap,0]) { translate([gap*ProgBlock.x/2,0,ProgBlock.z/2]) rotate([180,0,0]) HalfCase("Upper"); translate([-gap*ProgBlock.x/2,0,0]) HalfCase("Lower"); }My friend rides about the same way we do, except from a much higher perch, so I’ll start her off with a configuration similar to the one we settled on for Mary’s Tour Easy.