It moved != it is working correctly... Even the first time

If the two bytes 0x00, 0x07 represent the length of the following command string then:
  • Should the length include or exclude the trailing CR? Currently it would exclude the CR, which might leave the controller with a spurious byte in a buffer when it receives the next command datagram.
  • Should the length value include the two bytes of the length indicator itself? Different spurious bytes in the buffer.
  • Is the byte order correct? 0x00, 0x07 could mean 7 or 1792 decimal. Might still be waiting for more bytes to arrive.