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 (очень быстро).
На запись decimal, в ответе hexadecimal
Заголовок раздела «На запись decimal, в ответе hexadecimal»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
Заголовок раздела «BLE safety»Включение/выключение системы BLE safety: B0001\r (ON) / B0000\r (OFF).
Разбор ответов по BLE
Заголовок раздела «Разбор ответов по BLE»Граница notification — не граница кадра. Один callback может принести неполный кадр, а не реже — несколько сразу: эхо вместе со статусом или ответом на запрос, либо два одинаковых ответа подряд.
Буферизуйте входящие байты и:
- накапливайте до каждого
0x0D; - извлекайте из буфера все завершённые кадры, а не только первый;
- считайте второй кадр реальными данными, а не мусором в хвосте;
- не рассчитывайте, что одна GATT-запись даёт ровно один notification.
Стартовая последовательность
Заголовок раздела «Стартовая последовательность»Успешное подтверждение GATT-записи означает только, что байты дошли до BLE-стека. Оно не означает, что парсер контроллера уже обработал команду, поэтому ответы на запросы сразу после подписки — или отправленные плотным burst — могут потеряться совсем.
Последовательность, которая на железе оказалась надёжной:
- дождаться подтверждения подписки на notifications;
- отправлять
V?,A,S?,C?,Aпо одной; - выдерживать примерно 400–500 мс между этими начальными запросами;
- повторить
V?илиA, если нужный ответ не пришёл.
Старые контроллеры
Заголовок раздела «Старые контроллеры»Молчание на V? не означает несовместимость контроллера. Физический DT-SPIN-0052 с
подтверждённой подпиской на notifications проигнорировал два V? и C? — но при этом штатно
выполнял A, S?, P и W.
Трактуйте это узко: отсутствие ответа на версию означает, что ревизия прошивки и поддержка ускорения не подтверждены, и ничего больше. Проверяйте базовые команды отдельно, прежде чем считать устройство неподдерживаемым.
Типовой порядок работы
Заголовок раздела «Типовой порядок работы»- Прочитайте версию через
V?— это заодно говорит, поддерживается ли ускорение. Молчание здесь не фатально, см. Старые контроллеры. - Прочитайте статус через
A. - Прочитайте скорость через
S?; при необходимости задайтеSxxxx. - Если ускорение поддерживается, прочитайте
C?и при необходимости задайтеCxxxx. - Старт —
P, стоп —W. - Если BLE safety включён — во время вращения слать
AилиS?каждые 1000–1500 мс. - Перед закрытием остановите платформу командой
W.
По BLE распределяйте начальные запросы во времени, как описано в Стартовой последовательности.