Перейти к содержимому

Spinner360: протокол

BLE/USB-протокол Spinner360 V1.1. ASCII-команды, каждая заканчивается \r (0x0D).

  • Маска BLE-имени: DT-SPIN-XXXX, где XXXX — серийный номер контроллера (например, DT-SPIN-1234);
  • BLE service: FFE0;
  • BLE characteristic: FFE1;
  • USB (serial): 9600 8N1, маска имени устройства CP210 — мосту Silabs CP210x может потребоваться драйвер, см. Основы интеграции;
  • protocol: ASCII; terminator: \r.
Команда Назначение Ответ
V?\r версия контроллера DT-SPINNER-VX.Y (старые контроллеры могут молчать)
A\r статус Azxcv (см. ниже)
P\r старт вращения эхо P\r
W\r стоп вращения эхо W\r
S?\r текущая скорость Phhhh\r — hexadecimal
Sxxxx\r задать скорость Phhhh\r с применённой скоростью
C?\r текущее ускорение Chhhh\r — hexadecimal
Cxxxx\r задать ускорение Chhhh\r с применённым значением
B0001\r / B0000\r BLE safety ON / OFF эхо команды

xxxx — четыре ASCII-цифры. Скорость — рекомендуется S0015 (медленно) … S0090 (очень быстро).

Set-команды принимают decimal ASCII, а ответ содержит значение в hexadecimal ASCII. У ответа по скорости префикс P, а не S:

TX RX Значение
S0093\r P005D\r 0x005D = 93
S0081\r P0051\r 0x0051 = 81
S0059\r P003B\r 0x003B = 59

То есть контракт такой: Sdddd\r на запись и Phhhh\r в ответе. Ускорение ведёт себя так же, сохраняя собственный префикс C в обе стороны.

Управление ускорением работает только на поддерживаемых контроллерах. Чтобы определить поддержку, отправьте V?: если контроллер ответил строкой версии (DT-SPINNER-VX.Y), он поддерживает настройку ускорения. Если ответа нет — не используйте C? / Cxxxx, но учтите, что об остальном протоколе это ничего не говорит, см. Старые контроллеры.

Значение ускорения — это время в секундах, за которое платформа разгоняется до максимальной скорости вращения. По умолчанию: 20 с.

Команда Смысл
C?\r получить ускорение → C + значение в hexadecimal
Cxxxx\r задать ускорение, значение в секундах

Рекомендуемый диапазон:

  • C0005\r — очень быстрый разгон (5 с);
  • C0020\r — очень медленный разгон (20 с).

A\r возвращает A и флаги статуса: Azxcv по BLE, Azxc по USB (в USB-ответе нет флага BLE safety).

Флаг Значение 0 1
z вращение платформы остановлена вращается
x Safe stop safe stop сработал нормальное состояние
c питание платформы кабель питания не подключён подключение OK
v система BLE safety (только BLE) OFF ON

Включение/выключение системы BLE safety: B0001\r (ON) / B0000\r (OFF).

Граница notification — не граница кадра. Один callback может принести неполный кадр, а не реже — несколько сразу: эхо вместе со статусом или ответом на запрос, либо два одинаковых ответа подряд.

Буферизуйте входящие байты и:

  • накапливайте до каждого 0x0D;
  • извлекайте из буфера все завершённые кадры, а не только первый;
  • считайте второй кадр реальными данными, а не мусором в хвосте;
  • не рассчитывайте, что одна GATT-запись даёт ровно один notification.

Успешное подтверждение GATT-записи означает только, что байты дошли до BLE-стека. Оно не означает, что парсер контроллера уже обработал команду, поэтому ответы на запросы сразу после подписки — или отправленные плотным burst — могут потеряться совсем.

Последовательность, которая на железе оказалась надёжной:

  1. дождаться подтверждения подписки на notifications;
  2. отправлять V?, A, S?, C?, A по одной;
  3. выдерживать примерно 400–500 мс между этими начальными запросами;
  4. повторить V? или A, если нужный ответ не пришёл.

Молчание на V? не означает несовместимость контроллера. Физический DT-SPIN-0052 с подтверждённой подпиской на notifications проигнорировал два V? и C? — но при этом штатно выполнял A, S?, P и W.

Трактуйте это узко: отсутствие ответа на версию означает, что ревизия прошивки и поддержка ускорения не подтверждены, и ничего больше. Проверяйте базовые команды отдельно, прежде чем считать устройство неподдерживаемым.

  1. Прочитайте версию через V? — это заодно говорит, поддерживается ли ускорение. Молчание здесь не фатально, см. Старые контроллеры.
  2. Прочитайте статус через A.
  3. Прочитайте скорость через S?; при необходимости задайте Sxxxx.
  4. Если ускорение поддерживается, прочитайте C? и при необходимости задайте Cxxxx.
  5. Старт — P, стоп — W.
  6. Если BLE safety включён — во время вращения слать A или S? каждые 1000–1500 мс.
  7. Перед закрытием остановите платформу командой W.

По BLE распределяйте начальные запросы во времени, как описано в Стартовой последовательности.