Skip to main content

Making the Shimano BT-E60xx discharge machine

Github repo for the finished software: https://github.com/gregyedlik/BT-E60xx/

The process is very similar to hacking the Shimano charger, but this time a bicycle is also involved.

image.png

It seems like the bicycle sends a short message, and then the battery answers a long message.

The UART settings are :

  • 9600 baud
  • No parity bit
  • 1 stop bit
  • 0 to 3.3V

Normal captures

  • The bike sends the same thing
  • The battery answer starts the same and then different from 20
  • These things happen once per second

image.png

image.png

image.png

Startup capture

  • Starts by the bike! This is unexpected - because I pressed the button on the battery!

image.png

Startup sequence including non-valid frames and battery voltage:

image.png

Note that the battery voltage is not zero before switch on due to the cap on the bike side, not because one can find a voltage on the battery terminals.

  • Yellow is what the bike sends (RX)
  • Purple is what the battery sends (TX)

image.png

Zoom in on the startup, and we see that indeed the first to move is the battery TX, the RX moves up in response, and the battery then turns on.

image.png

If I try to listen to the battery when it is unplugged from the bike: TX goes high for 250ms.

Software:

  • Just send every second and see what happens?

Making software on a raspberry pi400

  • Configure UART in raspi-config
  • Simple python code to log messages from bike
  • Really simple, 4 messages repeat - very very similar to the charging situation!!
  • Just sending them does not work it seems

Big learning: I have FDTIs that I can plug into my Mac and don't need to fuck with the RPi400. ^^

Just forwarding all the messages to another battery work ONLY IF THE FIRST MESSAGES ARE ALSO INCLUDED!!

But how long does it work? It seems maybe not forever, let's test.

Maybe I was also having connection issues. Removed the USB hub.

It did fail after a while, but it took a LONG time. Around 45 minutes. There is a big break in the log after 2697 sec. Could it be like a screensaver kinda thing ruining it?

It was. Ran 10k+ seconds without the screensaver bullshit. Runs great on RPi400.

Could be ported to an Arduino, but it would take a day at least.

image.png