Протокол информационного обмена с SelfieBot

Оглавление

Структура пакета
Данные передаваемые от ПО на SelfieBot
Команды управления
Сервисная команда установки имени Bluetooth модуля
Данные передаваемые от SelfieBot на ПО

Структура пакета

Данные передаются пакетами байт. Пакет состоит из четырёх полей: старт-байт, поле длины данных, поле данных, стоп-байт. Максимальный размер пакета ограничен 255 байтами, т.е. размер данных не может превышать 252 байта.

Старт-байт занимает объём 1 байт и является признаком начала пакета, пакет начинает приниматься и собираться только после получения старт байта.

Поле длины посылки занимает объём 1 байт и задаёт кол-во информационных байт в пакете.

Поле данных содержит информацию для получателя (данные команды или телеметрии) и может занимать объём от 1 до 255 байт.

Стоп-байт занимает объём 1 байт и является признаком окончания пакета, по факту сборки пакета указанной длины (в поле длины пакета) проверяется стоп-байт и принимается решение о корректности принятого пакета.

Таблица 1. Структура информационного пакета

Поле Старт-байт Длина пакета Данные Стоп-байт
Размер поля, байт 1 1 1…252 1

Старт-байт, поле длины пакета и стоп-байт организуют первый протокольный уровень пакета данных.

Второй протокольный уровень пакета данных определяет структуру поля данных. Первый байт поля данных является идентификатором данных и определяет получателя или источника передаваемых данных. Таким образом, количество итоговых информационных данных не может превышать 251 байта.

Таблица 2. Структура поля данных пакета

Поле ID Данные
Размер поля, байт 1 1…251

Данные передаваемые от ПО на SelfieBot

Команды управления

Старт-байт = 3Ah.

Длина посылки = 06h.

Стоп-байт = С5h.

Поле данных состоит из шести байт.

Пакет: 3A – 06 – D[0] – D[1] – … – D[5] – С5

Первый байт данных является идентификатором штатных команд, ID = D[0] = 01h.

Ниже приведено содержимое поля данных D[1:5] пакетов.

1) Команда запроса получения обобщённой телеметрии

00 – 00 – 00 – 00 – 00

2) Команда управления горизонтальным сервоприводом

01 – Data1 – XX – XX – XX

Данные Размер, бит Значение, hex Значение по умолч., hex Назначение
Data1 8 0…FF 7F Угол положения горизонтального сервопривода.
0 соответствует 0 градусов, FFh – 180, 7Fh – 90.

Крайние значения могут быть ограничены на аппаратном уровне, в таком случае команда будет принята, но выставлено будет разрешенное предельное значение, например, вместо 180 градусов может быть установлено 175 или 170. Предельные значения можно контролировать по возвращаемой телеметрии.

3) Команда управления вертикальным сервоприводом

02 – Data1 – XX – XX – XX

Данные Размер, бит Значение, hex Значение по умолч., hex Назначение
Data1 8 0…FF 7F Угол положения вертикального сервопривода.
0 соответствует 0 градусов, FFh – 180, 7Fh – 90.

Крайние значения могут быть ограничены на аппаратном уровне, в таком случае команда будет принята, но выставлено будет разрешенное предельное значение, например, вместо 180 градусов может быть установлено 175 или 170. Предельные значения можно контролировать по возвращаемой телеметрии.

4) Команда управления горизонтальным и вертикальным сервоприводами

03 – Data1 – Data2 – XX – XX

Данные Размер, бит Значение, hex Значение по умолч., hex Назначение
Data1 8 0…FF 7F Угол положения горизонтального сервопривода.
0 соответствует 0 градусов, FFh – 180, 7Fh – 90.
Data2 8 0…FF 7F Угол положения вертикального сервопривода.
0 соответствует 0 градусов, FFh – 180, 7Fh – 90.

Крайние значения могут быть ограничены на аппаратном уровне, в таком случае команда будет принята, но выставлено будет разрешенное предельное значение, например, вместо 180 градусов может быть установлено 175 или 170. Предельные значения можно контролировать по возвращаемой телеметрии.

Сервисная команда установки имени Bluetooth модуля

Старт-байт = 3Ah.

Длина посылки = 0Сh.

Стоп-байт = С5h.

Поле данных состоит из 13 байт.

Пакет: 3A – 0С – D[0] – D[1] – … – D[12] – С5

Первый байт данных является идентификатором сервисной команды работы с модулем Bluetooth, ID = D[0] = 02h.

Данные D[1:12] содержат ASCII коды названия модуля Bluetooth, которое должно устанавливаться после инициализации устройства. Это название принимается и записывается в память устройства. При передаче нулевого массива данных (D[1:12]=0х00) записанное ранее название стирается из внутренней памяти устройства и после инициализации будет установлено название по умолчанию: SELFIEBOT-XX.

Для названия модуля, устанавливаемого по умолчанию (SELFIEBOT-XX), будет справедлив следующий массив данных D[1:12]:

Номер байта 1 2 3 4 5 6 7 8 9 10 11 12
ASCII код S E L F I E B O T X X
Байт данных DEC 83 69 76 70 73 69 66 79 84 45 88 88
Байт данных HEX 53 45 4C 46 49 45 42 4F 54 2D 58 58

Для записи нового названия модуля Bluetooth или стирания названия из памяти необходимо передать сервисную команду 3 раза подряд. При успешном принятии и сохранении нового названия модуля Bluetooth пользовательский светодиод кратковременно (1 секунда) изменит свой цвет на синий, при успешном стирании – на белый.

Данные передаваемые от SelfieBot на ПО

Старт-байт = 3Ah.

Длина посылки = 0Сh.

Стоп-байт = С5h.

Поле данных состоит из тринадцати байт.

Пакет: 3A – 0С – D[0] – D[1] – … – D[12] – С5

Первый байт данных является идентификатором телеметрии, ID = D[0] = F1h.

Ниже приведено содержимое поля данных D[1:12] пакетов.

1) Пакет, формируемый в ответ на команду запроса телеметрии

Init – Status1 – Status2 – Angle1 – Angle2 – Vbat[0:7] – Vbat[8:15] – Vin[0:7] – Vin[8:15] – Light[0:7] – Light[8:15] — XX

Данные Размер, бит Назначение
Init 8 Байт результата инициализации устройства
0 Установка связи с модулем Bluetooth
0 Сбой установки связи
1 Связь установлена успешно
1 Настройка модуля Bluetooth
0 Сбой настройки модуля
1 Модуль настроен успешно
2 Название модуля Bluetooth
0 Модуль проинициализирован названием по умолчанию: SELFIEBOT-XX
1 Модуль проинициализирован названием, записанным ранее в постоянную память устройства
3 Проверка питания сервоприводов
0 Отсутствует питание сервоприводов
1 Обнаружена подача питания на сервоприводы
7:4
Status1 8 Байт статуса устройства
0 Питание сервоприводов
0 Отключено
1 Включено
1 Управление автоматическим отключением питания сервоприводов
0 Отключено
1 Включено
2 Наличие внешнего питания
0 Не обнаружено
1 Обнаружено
3 Состояние внешнего питания
0 Отключено
1 Подключено
4 Питание USB
0 Отключено
1 Подключено
5 Питание внешней нагрузки
0 Отключено
1 Подключено
6 Использование датчика движения
0 Не задействован
1 Задействован
7 Состояние пользовательской кнопки
0 Отжата
1 Нажата
Status2 8 Не используется
0
0
1
1
0
1
2
0
1
3
0
1
4
0
1
5
0
1
6
0
1
7
0
1
Angle1 8 0…FF Угол положения горизонтального сервопривода.0 соответствует 0 градусов, FFh – 180, 7Fh – 90.

Angle1[град] = Angle1*(180/255).

Angle2 8 0…FF Угол положения вертикального сервопривода.0 соответствует 0 градусов, FFh – 180, 7Fh – 90.

Angle2[град] = Angle2*(180/255).

Vbat 16 0…3FF Значение уровня напряжения аккумуляторной батареи.V[вольт] = 5*[Vbat_2:Vbat_1].
Vin 16 0…3FF Значение уровня напряжения, выдаваемого внешним зарядным устройством.V[вольт] = 5*[Vin_2:Vin_1].
Light 16 0…3FF Значение уровня напряжения, выдаваемого датчиком освещённости.V[вольт] = 5*[Light _2:Light _1].
ХХ Не используется