57200 57600 bps a pattern at last!!!
So I put Bus Pirate capturing traffic between the LEGO BOOST Hub and the BOOT motor (the one with the encoder that LEGO calls “Interactive Motor“) at 57200.
I ran my serial sniffer:
jpnevulator --ascii --tty /dev/ttyUSB3 --read
I power up the Hub with the motor attached (to port C, not sure if important).
And a pattern of 6 bytes appears:
0A EF EF 00 A0
Where ‘0A’ and ‘A0’ seem “start” and “end” of a message and ‘EF EF 00’ the payload. Or something completely different, like the Monty Python would say.
I connect to the Hub with gatttool in interactive mode and activate notifications and motor readings and then send a command to turn just 1 degree:
char-write-req 0x0f 0100 char-write-req 0x0e 0a004101020100000001 char-write-req 0x0e 0E018101110B0100000064647F03
no events return from the motor but something flows between the Hub and the motor and then the pattern returns:
0A EF EF 00 A0
Thats good! Because I knew that 1 degree is not enough to generate a new position notification (usually 4 to 6 commands are needed) and the payload didn’t change.
1 more command to turn 1 degree. Same
1 more. Same.
1 more. Same. I already sent the same command 4 times.
No 1 more command and a notification is received. And the pattern changes to
0A 00 00 00 A0
There was an increase! But not by +1..
Now I move the axle myself a bit and the payload changes to ’01 00 00′.
I move again backwards so the payload changes back to ’00 00 00′.
Now I send again the same ‘turn 1 degree’ command 5 times… and I get a position change notification and the payload increased to ’01 00 00′ as expected.
So the payload is the encoder position in degrees. 3 bytes, reverted (or little endian).
Edited: spoke too early. 5 bytes message yes, payload related to encoder position yes, payload meaning not so simple.
Not enough yet to use the motor on other systems (like an Arduino or an Ev3) but it is a start. And a drop of wisdom on a hot night after a very pleasant day with family at water sliding park.