COM Port Communication

When connected via USB, turntable is represented as virtual COM port and use simple text protocol to communicate with PC. To test following commands manually software like PuTTY can be used.

Old turntables (before June 2018)#

Command formatDescription
#sN.Set max speed to N
#aN.Set max acceleration to N
#pN.Move engine N ticks
#e[1,0].Set engine state (1 - enabled, 0 - disabled)
#i*.Version number
#r*.Infinite rotation
#c*.Stop rotation
#x[0,1].Set finity (similar to c if 0)
#w[1,0].Set WiFi enabled
#m*.Return current steps
#vN.Set steps per notify

New turntables (after June 2018)#

For compatibility reasons, new turntables are using legacy protocol (described above) by default. To switch to new messages format, send command #l..

It is not recommended to use legacy format with new turntables. It is enabled to support Object2VR software and contains workarounds specific to this use case. New format is more structured, provides more functionality and easier to use.

PC-to-table commands#

These commands are sent from pc to turntable. Turntable will send status message for every command received.



For commands without arguments they must be omitted:

#Command begin character
commandCommand string
argumentCommand argument string
.Command end character

Currently only integer arguments are used. For commands where argument is boolean, positive values are true, negative or zero are false.

List of commands#

GetVersionInfoReturns version string-
GetStepsPerRoundReturns amount of steps needed to rotate 360 degrees-
GetMaxAllowedSpeedReturns max speed in steps per second-
GetInitialSpeedReturns speed at which turntable starts rotation-
GetCurrentStepsReturns amount of steps rotated during rotation, 0 if turntable is not rotating at the moment-
GetIsRotatingReturns whether turntable is currently rotating-
GetIsCancellationRequestedReturns whether turntable is currently stopping rotation-
GetManualRotationModeEnabledReturns whether turntable is in manual speed control mode-
SetSendNewLinesSet whether to send line breaks after messages (useful for readability)Boolean
SetInitialSpeedSet starting rotation speedNumber (steps per second)
SetTargetSpeedSet target rotation speedNumber (steps per second)
SetAccelerationSet accelerationNumber (steps per second^2)
SetEngineEnabledEnable or disable engine lockBoolean
SetStepsPerNotifySet steps interval at which rotation progress notification messages would be sent to PCNumber (steps count)
SetManualRotationModeEnabledEnable or disable manual rotation mode. Usual commands are disabled in this mode, rotation speed is not controlled by user.Boolean
SetSpeedManuallySet rotation speed in manual control modeNumber (steps per second)
RotateStepsStart rotation for desired amount of steps with the set speed and accelerationNumber (steps count)
RotateInfiniteStart infinite rotationBoolean (direction, 1 for CW, 0 for CCW)
CancelRotationStart braking-
GetAccumulatedStepsCountReturns value of internal steps counter (since MFTv5). Might be useful to recover photo shooting process after software errors.-
ResetAccumulatedStepsCountReset value of internal steps counter (since MFTv5).-
ExecuteCustomEsp8266CommandSend arbitrary command to ESP8266. Argument should be valid AT command string. Note that the command string will be added to internal queue and this ExecuteCustomEsp8266 command itself will return success immediately. Wi-Fi only.String (AT command)
ExecuteCustomEsp8266CommandAppendNewLineSame as ExecuteCustomEsp8266Command but also sends \r\n at the end of the command. Wi-Fi only.String (AT command)
SetCustomEsp8266CommandsDelaySet minimal interval between executing custom ESP8266 commands. Also affect firmware startup time (how long will it wait for Wi-Fi to connect before restarting ESP8266). Wi-Fi only.Number (milliseconds)



Table-to-PC messages#


#command.Command of described previously format.
[Message begin character
messageMessage string
]Message begin character

Messages types#

Commands status messages:




Commands info messages

... (all commands with "Get" prefix)

Global info messages

The command part is empty in this messages (message does not belong to any particular command and can be sent at any time).

[#.CurrentSteps:100] - sent during rotation if steps per notify not set to zero
[Assertion failed at ...] - internal contract was violated, probably firmware bug


Please refer to versioning page.