Документация проекта “Балалайка”¶
Протокол обмена¶
Общие сведения¶
Головное устройстройство и все модули, входящие в проект, использют единый бинарный протокол. Общая структура пакета данного протокола представлена в Таблице ниже.
Байт # | Поле | Тип | Значение | Описание |
---|---|---|---|---|
0 | start_byte | uint8_t | 0xAA | Стартовый байт. Всегда равен 0xAA |
1 | id | uint8_t | 0xXX | Идентификатор получателя пакета |
2 | type | uint8_t | 0xXX | Тип пакета |
... | data | ... | ... | Блок данных (зависит от типа пакета) |
N | checksum | uint8_t | 0xXX | Котрольная сумма пакета - младший байт суммы всех байтов пакета |
Для обнаружения начала пакета с данными, используется стартовый байт 0xAA. Следующим идёт байт с идентификатором получателя данного пакета, а затем байт с кодом типа пакета. Далее находятся данные, формат которых зависит от типа пакета.
Данные, для передачи которых требуется больше одного байта (uint16_t, uint32_t) передаются в формате little endian. Выбор данного формата позволяет обойтись без дополнительных конвертаций при использовании платформ x86, AVR и ARM.
В последнем байте пакета содержится контрольная сумма (checksum), вычисляемая как младший байт суммы всех байтов пакета.
Пакеты бывают двух типов:
- Пакет типа “Запрос“
- Пакет типа “Ответ“
Пара Запрос-Ответ формирует сущность “Команда”. Команды специфичны для каждого типа устройства, которое может работать в данной сети:
- Головное устройство;
- Датчик ФПГ;
- Датчик двигательной активности;
- Датчик температуры.
Описание общих полей¶
Поле “Стартовый байт” - start_byte¶
Стартовый байт всегда равен 0xAA и используется для определения начала пакета.
Поле “Идентификатор получателя пакета” - id¶
Идентификатор получателя пакета используется для определения адреса, куда передается запрос.
Идентификаторы получателя пакета приведены в таблице ниже.
Поле ID | Получатель пакета |
---|---|
0x00 | Компьютер (хост-устройство) |
0x01 | Головной модуль |
0x10 | Датчик температуры |
0x30 | Датчик двигательной активности |
0x40 | Датчик ФПГ |
Поле “Тип пакета” - type¶
Тип пакета определяет данные, содержащиеся в пакете, которые либо запрашиваются в запросе, либо содержатся в ответе.
Типы пакетов приведены в таблице ниже.
Поле type | Тип пакета |
---|---|
0x01 | Пакет команды “Управление состоянием” |
0x02 | Пакет контроля регистров ADS1299 |
0xA0 | Пакет с данными от одной ADS1299 |
0xA1 | Пакет с данными от двух ADS1299 |
0xA3 | Пакет с данными от четырех ADS1299 |
0xB0 | Пакет с данными регистров ADS1299 |
0x10 | Пакет с данными температуры |
0x20 | Пакет с данными о статусе аккумулятора |
0x30 | Пакет с углами Эйлера (данные IMU) |
0x31 | Пакет с кватернионом (данные IMU) |
0x32 | Пакет с сырыми данными (данные IMU) |
0x40 | Пакет с пульсом (данные ФПГ) |
0x41 | Пакет с сатурацией крови (данные ФПГ) |
0x42 | Пакет с сырыми данными (данные ФПГ) |
Поле “Контрольная сумма пакета” - checksum¶
Контрольная сумма пакета - checksum определяется как младший байт суммы всех байтов пакета.
void NDK_CalcCheckSumForPacket(uint8_t * packet, uint8_t len)
{
uint8_t checkSum = 0x00;
for (uint8_t i = 0; i < len - 1; i++)
{
checkSum += *packet;
packet++;
}
*packet = checkSum;
}
Пример реализации вычисления контрольной суммы, где:
packet
- указатель на массив с пакетом данных;len
- длина массива
В результате выполнения данной функции контрольная сумма записывается в последний байт пакета.
Формат запроса для команд¶
Для управления, получения данных и настройки параметров всех устройств, находящихся в одной сети, используется специфичные для них команды, но формат запроса имеет общую для всех команд структуру. В свою очередь, формат ответа команды специфичен только для нее.
Длина запроса - 8 байт.
Байт # | Поле | Тип | Значение | Описание |
---|---|---|---|---|
0 | start_byte | uint8_t | 0xAA | Стартовый байт. Всегда равен 0xAA |
1 | id | uint8_t | 0xXX | Идентификатор получателя пакета |
2 | type | uint8_t | 0x01 | Тип пакета - пакет команды “Управление состоянием” |
3 | action | uint8_t | 0xXX | Действие, которое необходимо выполнить |
4 | param | uint8_t | 0xXX | Параметр для действия |
5 | data | uint8_t | 0xXX | Данные для действия |
6 | payload | uint8_t | 0xXX | Дополнительные данные для действия |
7 | checksum | uint8_t | 0xXX | Котрольная сумма пакета - младший байт суммы всех байтов пакета |
Действия специфичны для каждого устройства.
Возможные значения полей param, data, payload, специфичны для отдельно взятых устройств и возможных действий.
Модуль двигательной активности¶

Технические характеристики¶
- Размеры: TBA
- Напряжение питания: TBA
- Потребляемые ток, пиковый: TBA
Подключение к головному устройству¶
Подключение к головному устройству осуществляется по протоколу RS-485 через разъем SH04, расположенному на плате. Распиновка приведена на рисунке ниже.

Выполняемые команды¶
Команда на получение углов Эйлера¶
Формат запроса¶
Длина запроса - 8 байт.
Байт # | Поле | Тип | Значение | Описание |
---|---|---|---|---|
0 | start_byte | uint8_t | 0xAA | Стартовый байт. Всегда равен 0xAA |
1 | id | uint8_t | 0x30 | Идентификатор получателя пакета. 0x30 - получатель - Датчик ДА |
2 | type | uint8_t | 0x01 | Тип пакета. 0x01 - пакет команды управления |
3 | action | uint8_t | 0x00 | Действие, которое необходимо выполнить. 0x00 - Чтение |
4 | param | uint8_t | 0x30 | Параметр для действия. 0x30 - Данные углов Эйлера. |
5 | data | uint8_t | 0x00 | Данные для действия. 0x00 - нет данных |
6 | payload | uint8_t | 0x00 | Дополнительные данные для действия. 0x00 - нет данных |
7 | checksum | uint8_t | 0x0B | Котрольная сумма пакета - младший байт суммы всех байтов пакета |
Формат ответа¶
Длина ответа - 20 байт.
Байт # | Поле | Тип | Значение | Описание |
---|---|---|---|---|
0 | start_byte | uint8_t | 0xAA | Стартовый байт. Всегда равен 0xAA |
1 | id | uint8_t | 0x01 | Идентификатор получателя пакета 0x01 - получатель - Головной модуль |
2 | type | uint8_t | 0x30 | 0x30 - Данные углов Эйлера |
3 | systime | uint32_t | 0xXX | Системное время модуля в миллисекундах. Порядок байт - little endian |
4 | 0xXX | |||
5 | 0xXX | |||
6 | 0xXX | |||
7 | heading | uint16_t | 0xXX | Один из углов Эйлера - рысканье. 1 градус = 16 LSB Порядок байт - little endian |
8 | 0xXX | |||
9 | roll | uint16_t | 0xXX | Один из углов Эйлера - крен. 1 градус = 16 LSB Порядок байт - little endian |
10 | 0xXX | |||
11 | pitch | uint16_t | 0xXX | Один из углов Эйлера - тангаж. 1 градус = 16 LSB Порядок байт - little endian |
12 | ||||
13 | lin_acc_x | uint16_t | 0xXX | Линейное ускорение по оси X. 1 м/с^2 = 100 LSB Порядок байт - little endian |
14 | ||||
15 | lin_acc_y | uint16_t | 0xXX | Линейное ускорение по оси Y. 1 м/с^2 = 100 LSB Порядок байт - little endian |
16 | ||||
17 | lin_acc_z | uint16_t | 0xXX | Линейное ускорение по оси Z. 1 м/с^2 = 100 LSB Порядок байт - little endian |
18 | ||||
19 | checksum | uint8_t | 0xXX | Контрольная сумма пакета - младший байт суммы всех байтов пакета |
Имплементация значений¶
- Поле systime содержит значение системного времени модуля с дискретностью миллисекунда
- Поле heading содержит значение одного из углов Эйлера - рысканье. Диапазон значений: от 0° до 360°. (поворот по часовой стрелке увеличивает значение)
- Поле roll содержит значение одного из углов Эйлера - крен. Диапазон значений: от -90° до 90°. (увеличивается с увеличинеим наклона)
- Поле pitch содержит значение одного из углов Эйлера - тангаж. Диапазон значений: от -180° до 180° (поворот по часовой стрелке увеличивает значение)
- Поля lin_acc_x, lin_acc_y, lin_acc_z содержат значения линейного ускорения по соответствующим осям
Примеры¶
Все команды приведены в HEX-формате без указания 0x
Запрос: AA 30 01 00 30 00 00 0B
Ответ: AA 01 30 FA 27 00 00 00 00 C3 FE 98 FF 01 00 FE FF 00 00 52
Интерпретация ответа:
- тип пакета - данные кватерниона
- systime = 00 00 27 FA = 10 234 мc,
- heading = 00 00 = 0°,
- roll = FE C3 = -19.8125°,
- pitch = FF 98 = -6.5°,
- acc_x = 00 01 = 0.01 м/с2,
- acc_y = FF FE = -0.02 м/с2,
- acc_z = 00 00 = 0 м/с2.
Команда на получение кватернионов¶
Формат запроса¶
Длина запроса - 8 байт.
Байт # | Поле | Тип | Значение | Описание |
---|---|---|---|---|
0 | start_byte | uint8_t | 0xAA | Стартовый байт. Всегда равен 0xAA |
1 | id | uint8_t | 0x30 | Идентификатор получателя пакета. 0x30 - получатель - Датчик ДА |
2 | type | uint8_t | 0x01 | Тип пакета. 0x01 - пакет команды управления |
3 | action | uint8_t | 0x00 | Действие, которое необходимо выполнить. 0x00 - Чтение |
4 | param | uint8_t | 0x31 | Параметр для действия. 0x40 - Данные кватернионов |
5 | data | uint8_t | 0x00 | Данные для действия. 0x00 - нет данных |
6 | payload | uint8_t | 0x00 | Дополнительные данные для действия. 0x00 - нет данных |
7 | checksum | uint8_t | 0x0C | Контрольная сумма пакета - младший байт суммы всех байтов пакета |
Формат ответа¶
Длина ответа - 16 байт.
Байт # | Поле | Тип | Значение | Описание |
---|---|---|---|---|
0 | start_byte | uint8_t | 0xAA | Стартовый байт. Всегда равен 0xAA |
1 | id | uint8_t | 0x01 | Идентификатор получателя пакета 0x01 - получатель - Головной модуль |
2 | type | uint8_t | 0x31 | 0x31 - Данные кватернионов |
3 | systime | uint32_t | 0xXX | Системное время модуля в миллисекундах. Порядок байт - little endian |
4 | 0xXX | |||
5 | 0xXX | |||
6 | 0xXX | |||
7 | w | uint16_t | 0xXX | Значение кватерниона. 1 кватернион = 2^14 LSB Порядок байт - little endian |
8 | 0xXX | |||
9 | x | uint16_t | 0xXX | Значение кватерниона. 1 кватернион = 2^14 LSB Порядок байт - little endian |
10 | 0xXX | |||
11 | y | uint16_t | 0xXX | Значение кватерниона. 1 кватернион = 2^14 LSB Порядок байт - little endian |
12 | ||||
13 | z | uint16_t | 0xXX | Значение кватерниона. 1 кватернион = 2^14 LSB Порядок байт - little endian |
14 | ||||
15 | checksum | uint8_t | 0xXX | Контрольная сумма пакета - младший байт суммы всех байтов пакета |
Имплементация значений¶
- Поле systime содержит значение системного времени модуля с дискретностью миллисекунда
- Поля w, x, y, z содержат значения кватернионов
Примеры¶
Все команды приведены в HEX-формате без указания 0x
Запрос: AA 30 01 00 31 00 00 0C
Ответ: AA 01 31 A1 0E 00 00 F5 3E 8A 03 F4 0A FF FF 47
Интерпретация ответа:
- тип пакета - данные кватерниона
- systime = 00 00 0E A1 = 3745 мс,
- w = 3E F5 = 0.98370361328125,
- x = 03 8A = 0.0552978515625,
- y = 0A F4 = 0.171142578125,
- z = FF FF = -0.00006103515625.
Команда на получение сырых данных¶
Формат запроса¶
Длина запроса - 8 байт.
Байт # | Поле | Тип | Значение | Описание |
---|---|---|---|---|
0 | start_byte | uint8_t | 0xAA | Стартовый байт. Всегда равен 0xAA |
1 | id | uint8_t | 0x30 | Идентификатор получателя пакета. 0x30 - получатель - Датчик ДА |
2 | type | uint8_t | 0x01 | Тип пакета. 0x01 - пакет команды управления |
3 | action | uint8_t | 0x00 | Действие, которое необходимо выполнить. 0x00 - Чтение |
4 | param | uint8_t | 0x32 | Параметр для действия. 0x32 - Сырые данные |
5 | data | uint8_t | 0x00 | Данные для действия. 0x00 - нет данных |
6 | payload | uint8_t | 0x00 | Дополнительные данные для действия. 0x00 - нет данных |
7 | checksum | uint8_t | 0x0D | Контрольная сумма пакета - младший байт суммы всех байтов пакета |
Формат ответа¶
Длина ответа - 26 байт.
Байт # | Поле | Тип | Значение | Описание |
---|---|---|---|---|
0 | start_byte | uint8_t | 0xAA | Стартовый байт. Всегда равен 0xAA |
1 | id | uint8_t | 0x01 | Идентификатор получателя пакета 0x01 - получатель - Головной модуль |
2 | type | uint8_t | 0x32 | 0x32 - Сырые данные |
3 | systime | uint32_t | 0xXX | Системное время модуля в миллисекундах. Порядок байт - little endian |
4 | 0xXX | |||
5 | 0xXX | |||
6 | 0xXX | |||
7 | acc_x | uint16_t | 0xXX | Данные акселерометра по оси X. 1 м/с^2 = 100 LSB Порядок байт - little endian |
8 | 0xXX | |||
9 | acc_y | uint16_t | 0xXX | Данные акселерометра по оси Y. 1 м/с^2 = 100 LSB Порядок байт - little endian |
10 | 0xXX | |||
11 | acc_z | uint16_t | 0xXX | Данные акселерометра по оси Z. 1 м/с^2 = 100 LSB Порядок байт - little endian |
12 | 0xXX | |||
13 | mag_x | uint16_t | 0xXX | Данные магнитометра по оси X. 1 мкТ = 16 LSB Порядок байт - little endian |
14 | 0xXX | |||
15 | mag_y | uint16_t | 0xXX | Данные магнитометра по оси Y. 1 мкТ = 16 LSB Порядок байт - little endian |
16 | 0xXX | |||
17 | mag_z | 0xXX | Данные магнитометра по оси Z. 1 мкТ = 16 LSB Порядок байт - little endian |
|
18 | 0xXX | |||
19 | gyro_x | int16_t | 0xXX | Данные гироскопа по оси X. 1 Dps = 16 LSB Порядок байт - little endian |
20 | 0xXX | |||
21 | gyro_y | int16_t | 0xXX | Данные гироскопа по оси Y. 1 Dps = 16 LSB Порядок байт - little endian |
22 | 0xXX | |||
23 | gyro_z | int16_t | 0xXX | Данные гироскопа по оси Z. 1 Dps = 16 LSB Порядок байт - little endian |
24 | 0xXX | |||
25 | checksum | uint8_t | 0xXX | Контрольная сумма пакета - младший байт суммы всех байтов пакета |
Имплементация значений¶
- Поле systime содержит значение системного времени модуля с дискретностью миллисекунда
- Поля acc_x, acc_y, acc_z содержат данные акселерометра по соответствующим осям
- Поля mag_x, mag_y, mag_z содержат данные магнитометра по соответствующим осям
- Поля gyro_x, gyro_y, gyro_z содержат данные гироскопа по соответствующим осям
Примеры¶
Все команды приведены в HEX-формате без указания 0x
Запрос: AA 30 01 00 32 00 00 0D
Ответ: AA 01 32 3F 0C 00 00 B7 FE 69 00 99 03 D0 00 C4 FF 77 FE FF FF 01 00 01 00 EA
Интерпретация ответа:
- тип пакета - сырые данные ДА
- systime = 00 00 0C 3F = 3135 мс,
- acc_x = FE B7 = -3.29 м/с^2,
- acc_y = 00 69 = 1.05 м/с^2,
- acc_z = 03 99 = 9.21 м/с^2,
- mag_x = 00 D0 = 13 1 мкТ,
- mag_y = FF C4 = -3.75 1 мкТ,
- mag_z = FE 77 = -24.5625 1 мкТ,
- gyro_x = FF FF = -0.0625 Dps,
- gyro_y = 00 01 = 0.0625 Dps,
- gyro_z = 00 01 = 0.0625 Dps.
Модуль температуры¶

Технические характеристики¶
- Размеры: TBA
- Напряжение питания: TBA
- Потребляемые ток, пиковый: TBA
Подключение к головному устройству¶
Подключение к головному устройству осуществляется по протоколу RS-485 через разъем SH04, расположенному на плате. Распиновка приведена на рисунке ниже.

Выполняемые команды¶
Команда на получение температуры¶
Формат запроса¶
Длина запроса - 8 байт.
Байт # | Поле | Тип | Значение | Описание |
---|---|---|---|---|
0 | start_byte | uint8_t | 0xAA | Стартовый байт. Всегда равен 0xAA |
1 | id | uint8_t | 0x10 | Идентификатор получателя пакета. 0x10 - получатель - Датчик температуры |
2 | type | uint8_t | 0x01 | Тип пакета. 0x01 - пакет команды управления |
3 | action | uint8_t | 0x00 | Действие, которое необходимо выполнить. 0x00 - Чтение |
4 | param | uint8_t | 0x10 | Параметр для действия. 0x10 - данные температуры |
5 | data | uint8_t | 0x00 | Данные для действия. 0x00 - нет данных |
6 | payload | uint8_t | 0x00 | Дополнительные данные для действия. 0x00 - нет данных |
7 | checksum | uint8_t | 0xCB | Контрольная сумма пакета - младший байт суммы всех байтов пакета |
Формат ответа¶
Длина ответа - 13 байт.
Байт # | Поле | Тип | Значение | Описание |
---|---|---|---|---|
0 | start_byte | uint8_t | 0xAA | Стартовый байт. Всегда равен 0xAA |
1 | id | uint8_t | 0x01 | Идентификатор получателя пакета 0x01 - получатель - Головное устройство |
2 | type | uint8_t | 0x10 | 0x10 - Данные темперратуры |
3 | sensor_id | uint8_t | 0x00 | Идентификатор сенсора |
4 | systime | uint32_t | 0xXX | Системное время модуля в миллисекундах. Порядок байт - little endian |
5 | 0xXX | |||
6 | 0xXX | |||
7 | 0xXX | |||
8 | currentTemp | uint32_t | 0xXX | Данные температуры в градусах Цельсия Полученное значение необходимо разделить на 10000 Порядок байт - little endian |
9 | 0xXX | |||
10 | 0xXX | |||
11 | 0xXX | |||
12 | checksum | uint8_t | 0xXX | Контрольная сумма пакета - младший байт суммы всех байтов пакета |
Имплементация значений¶
- Поле systime содержит значение системного времени модуля с дискретностью 1 миллисекунда.
- Поле currentTemp содержит значение температуры в градусах цельсия (Полученное значение необходимо разделить на 10000).
Примеры¶
Все команды приведены в HEX-формате без указания 0x
Запрос: AA 10 01 00 10 00 00 CB
Ответ: AA 01 10 00 F5 71 94 00 34 8C 03 00 78
Интерпретация ответа:
- тип пакета - данные температуры;
- systime = 00 94 71 F5 = 9728501 мс,
- температура = 00 03 8C 34 = 23.2 °C.
Модуль ФПГ¶

Технические характеристики¶
- Размеры: TBA
- Напряжение питания: TBA
- Потребляемые ток, пиковый: TBA
Подключение к головному устройству¶
Подключение к головному устройству осуществляется по протоколу RS-485 через разъем SH04, расположенному на плате модуля ФПГ. Распиновка приведена на рисунке ниже.

Выполняемые команды¶
Команда на получение пульса¶
Формат запроса¶
Длина запроса - 8 байт.
Байт # | Поле | Тип | Значение | Описание |
---|---|---|---|---|
0 | start_byte | uint8_t | 0xAA | Стартовый байт. Всегда равен 0xAA |
1 | id | uint8_t | 0x40 | Идентификатор получателя пакета. 0x40 - получатель - Датчик ФПГ |
2 | type | uint8_t | 0x01 | Тип пакета. 0x01 - пакет команды управления |
3 | action | uint8_t | 0x00 | Действие, которое необходимо выполнить. 0x00 - Чтение |
4 | param | uint8_t | 0x40 | Параметр для действия. 0x40 - Данные пульса |
5 | data | uint8_t | 0x00 | Данные для действия. 0x00 - нет данных |
6 | payload | uint8_t | 0x00 | Дополнительные данные для действия. 0x00 - нет данных |
7 | checksum | uint8_t | 0x2B | Контрольная сумма пакета - младший байт суммы всех байтов пакета |
Формат ответа¶
Длина ответа - 12 байт.
Байт # | Поле | Тип | Значение | Описание |
---|---|---|---|---|
0 | start_byte | uint8_t | 0xAA | Стартовый байт. Всегда равен 0xAA |
1 | id | uint8_t | 0x01 | Идентификатор получателя пакета 0x01 - получатель - Головное устройство |
2 | type | uint8_t | 0x40 | 0x40 - Данные пульса |
3 | systime | uint32_t | 0xXX | Системное время модуля в миллисекундах. Порядок байт - little endian |
4 | 0xXX | |||
5 | 0xXX | |||
6 | 0xXX | |||
7 | pulse | uint32_t | 0xXX | Частота сердечных сокращений в Уд/с Порядок байт - little endian |
8 | 0xXX | |||
9 | 0xXX | |||
10 | 0xXX | |||
11 | checksum | uint8_t | 0xXX | Контрольная сумма пакета - младший байт суммы всех байтов пакета |
Имплементация значений¶
- Поле systime содержит значение системного времени модуля с дискретностью 1 миллисекунда.
- Поле pulse содержит значение частоты сердечных сокращений.
Примеры¶
Все команды приведены в HEX-формате без указания 0x
Запрос: AA 40 01 00 40 00 00 2B
Ответ: AA 01 40 xx xx xx xx xx xx xx xx xx
Интерпретация ответа:
- тип пакета - данные пульса,
- systime = 1,
- пульс = 10 уд/мин.
Команда на получение сатурации¶
Формат запроса¶
Длина запроса - 8 байт.
Байт # | Поле | Тип | Значение | Описание |
---|---|---|---|---|
0 | start_byte | uint8_t | 0xAA | Стартовый байт. Всегда равен 0xAA |
1 | id | uint8_t | 0x40 | Идентификатор получателя пакета. 0x40 - получатель - Датчик ФПГ |
2 | type | uint8_t | 0x01 | Тип пакета. 0x01 - пакет команды управления |
3 | action | uint8_t | 0x00 | Действие, которое необходимо выполнить. 0x00 - Чтение |
4 | param | uint8_t | 0x41 | Параметр для действия. 0x41 - Данные сатурации крови. |
5 | data | uint8_t | 0x00 | Данные для действия. 0x00 - нет данных |
6 | payload | uint8_t | 0x00 | Дополнительные данные для действия. 0x00 - нет данных |
7 | checksum | uint8_t | 0x2C | Контрольная сумма пакета - младший байт суммы всех байтов пакета |
Формат ответа¶
Длина ответа - 12 байт.
Байт # | Поле | Тип | Значение | Описание |
---|---|---|---|---|
0 | start_byte | uint8_t | 0xAA | Стартовый байт. Всегда равен 0xAA |
1 | id | uint8_t | 0x01 | Идентификатор получателя пакета 0x01 - получатель - Головное устройство |
2 | type | uint8_t | 0x41 | 0x41 - Данные сатурации крови |
3 | systime | uint32_t | 0xXX | Системное время модуля в миллисекундах. Порядок байт - little endian |
4 | 0xXX | |||
5 | 0xXX | |||
6 | 0xXX | |||
7 | spo | uint32_t | 0xXX | Сатурация крови в процентах. Порядок байт - little endian |
8 | 0xXX | |||
9 | 0xXX | |||
10 | 0xXX | |||
11 | checksum | uint8_t | 0xXX | Контрольная сумма пакета - младший байт суммы всех байтов пакета |
Имплементация значений¶
- Поле systick содержит значение системного времени модуля с дискретностью 1 миллисекунда.
- Поля spo содержат значения сатурации крови в процентах.
Примеры¶
Все команды приведены в HEX-формате без указания 0x
Запрос: AA 40 01 00 41 00 00 2C
Ответ: AA 01 41 xx xx xx xx xx xx xx xx xx
Интерпретация ответа:
- тип пакета - данные сатурации,
- systime = 1,
- сатурация = 10%.
Команда на получение сырых данных¶
Формат запроса¶
Длина запроса - 8 байт.
Байт # | Поле | Тип | Значение | Описание |
---|---|---|---|---|
0 | start_byte | uint8_t | 0xAA | Стартовый байт. Всегда равен 0xAA |
1 | id | uint8_t | 0x40 | Идентификатор получателя пакета. 0x40 - получатель - Датчик ФПГ |
2 | type | uint8_t | 0x01 | Тип пакета. 0x01 - пакет команды управления |
3 | action | uint8_t | 0x00 | Действие, которое необходимо выполнить. 0x00 - Чтение |
4 | param | uint8_t | 0x42 | Параметр для действия. 0x42 - Сырые данные |
5 | data | uint8_t | 0x00 | Данные для действия. 0x00 - нет данных |
6 | payload | uint8_t | 0x00 | Дополнительные данные для действия. 0x00 - нет данных |
7 | checksum | uint8_t | 0x2D | Контрольная сумма пакета - младший байт суммы всех байтов пакета |
Формат ответа¶
Длина ответа - 26 байт.
Байт # | Поле | Тип | Значение | Описание |
---|---|---|---|---|
0 | start_byte | uint8_t | 0xAA | Стартовый байт. Всегда равен 0xAA |
1 | id | uint8_t | 0x01 | Идентификатор получателя пакета 0x01 - получатель - Головное устройство |
2 | type | uint8_t | 0x42 | 0x42 - Сырые данные |
3 | systime | uint32_t | 0xXX | Системное время модуля в миллисекундах. Порядок байт - little endian |
4 | 0xXX | |||
5 | 0xXX | |||
6 | 0xXX | |||
7 | ppg_raw_red | uint32_t | 0xXX | Сырые данные датчика ФПГ с красного светодиода в отсчетах АЦП. Безразмерная величина. Порядок байт - little endian |
8 | 0xXX | |||
9 | 0xXX | |||
10 | 0xXX | |||
11 | ppg_raw_ir | uint32_t | 0xXX | Сырые данные датчика ФПГ с ИК-светодиода в отсчетах АЦП. Безразмерная величина. Порядок байт - little endian |
12 | 0xXX | |||
13 | 0xXX | |||
14 | 0xXX | |||
15 | ppg_raw_green | uint32_t | 0xXX | Сырые данные датчика ФПГ с зеленого светодиода в осчетах АЦП. Безразмерная величина. Порядок байт - little endian |
16 | 0xXX | |||
17 | 0xXX | |||
18 | 0xXX | |||
19 | acc_x | int16_t | 0xXX | Линейное ускорение по оси X в 1 м/с2 = 100 LSB. Порядок байт - little endian |
20 | 0xXX | |||
21 | acc_y | int16_t | 0xXX | Линейное ускорение по оси Y в 1 м/с2 = 100 LSB. Порядок байт - little endian |
22 | 0xXX | |||
23 | acc_z | int16_t | 0xXX | Линейное ускорение по оси Z в 1 м/с2 = 100 LSB. Порядок байт - little endian |
24 | 0xXX | |||
25 | checksum | uint8_t | 0xXX | Контрольная сумма пакета - младший байт суммы всех байтов пакета |
Имплементация значений¶
- Поле systick содержит значение системного времени модуля с дискретностью 1 миллисекунда.
- Поля ppg_red, ppg_ir и ppg_green содержат значения освещенности, снятые с фотодиода по соответствующему каналу (цвету светодиода). Размерность - отсчеты АЦП и поэтому данная величина безразмерная.
- Поля acc_x, acc_y и acc_z содержат значения линейного ускорения по соответствующим осям в формате 1 м/с2 = 100 LSB. Т.е 1 = 0.01 м/с2.
Примеры¶
Все команды приведены в HEX-формате без указания 0x, что удобно для копирования в терминал.
Запрос: AA 40 01 00 42 00 00 1D
Ответ: AA 00 42 xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx
Интерпретация ответа:
- Тип пакета - сырые данные ФПГ
- systime = 1,
- ppg_raw_red =,
- ppg_raw_ir = ,
- ppg_raw_green = ,
- acc_x = ,
- acc_y = ,
- acc_z = .
Головное устройство¶

Технические характеристики¶
- Размеры: TBA
- Напряжение питания: TBA
- Потребляемые ток, пиковый: TBA
Подключение модулей к головному устройству¶
Подключение к головному устройству модулей осуществляется по протоколу RS-485 через терминальный блок, который расположен на плате. Распиновка приведена на рисунке ниже.

Выполняемые команды¶
Команда на начало стриминга данных¶
Данная команда переводит головное устройство в режим стриминга данных с заданной ранее частотой дискретизации
Формат запроса¶
Длина запроса - 8 байт.
Байт # | Поле | Тип | Значение | Описание |
---|---|---|---|---|
0 | start_byte | uint8_t | 0xAA | Стартовый байт. Всегда равен 0xAA |
1 | id | uint8_t | 0x40 | Идентификатор получателя пакета. 0x40 - получатель - Датчик ФПГ |
2 | type | uint8_t | 0x01 | Тип пакета. 0x01 - пакет команды управления |
3 | action | uint8_t | 0x00 | Действие, которое необходимо выполнить. 0x00 - Чтение |
4 | param | uint8_t | 0x42 | Параметр для действия. 0x42 - Сырые данные |
5 | data | uint8_t | 0x00 | Данные для действия. 0x00 - нет данных |
6 | payload | uint8_t | 0x00 | Дополнительные данные для действия. 0x00 - нет данных |
7 | checksum | uint8_t | 0x2D | Котрольная сумма пакета - младший байт суммы всех байтов пакета |
Формат ответа¶
Длина ответа - 26 байт.
Байт # | Поле | Тип | Значение | Описание |
---|---|---|---|---|
0 | start_byte | uint8_t | 0xAA | Стартовый байт. Всегда равен 0xAA |
1 | id | uint8_t | 0x40 | Идентификатор получателя пакета 0x40 - получатель - Головное устройство |
2 | type | uint8_t | 0x42 | 0x42 - Сырые данные |
3 | systime | uint32_t | 0xXX | Системное время модуля в миллисекундах. Порядок байт - little endian |
4 | 0xXX | |||
5 | 0xXX | |||
6 | 0xXX | |||
7 | ppg_red | uint32_t | 0xXX | Сырые данные датчика ФПГ с красного светодиода в отсчетах АЦП. Безразмерная величина. Порядок байт - little endian |
8 | 0xXX | |||
9 | 0xXX | |||
10 | 0xXX | |||
11 | ppg_ir | uint32_t | 0xXX | Сырые данные датчика ФПГ с ИК-светодиода в отсчетах АЦП. Безразмерная величина. Порядок байт - little endian |
12 | 0xXX | |||
13 | 0xXX | |||
14 | 0xXX | |||
15 | ppg_green | uint32_t | 0xXX | Сырые данные датчика ФПГ с зеленого светодиода в осчетах АЦП. Безразмерная величина. Порядок байт - little endian |
16 | 0xXX | |||
17 | 0xXX | |||
18 | 0xXX | |||
19 | acc_x | int16_t | 0xXX | Линейное ускорение по оси X в 1 м/с2 = 100 LSB. Порядок байт - little endian |
20 | 0xXX | |||
21 | acc_y | int16_t | 0xXX | Линейное ускорение по оси Y в 1 м/с2 = 100 LSB. Порядок байт - little endian |
22 | 0xXX | |||
23 | acc_z | int16_t | 0xXX | Линейное ускорение по оси Z в 1 м/с2 = 100 LSB. Порядок байт - little endian |
24 | 0xXX | |||
25 | checksum | uint8_t | 0xXX | Котрольная сумма пакета - младший байт суммы всех байтов пакета |
Имплементация значений¶
- Поле systick содержит значение системного времени модуля с дискретностью 1 миллисекунда.
- Поля ppg_red, ppg_ir и ppg_green содержат значения освещенности, снятые с фотодиода по соответствующему каналу (цвету светодиода). Размерность - отсчеты АЦП и поэтому данная величина безразмерная.
- Поля acc_x, acc_y и acc_z содержат значения линейного ускорения по соответствующим осям в формате 1 м/с2 = 100 LSB. Т.е 1 = 0.01 м/с2.
Примеры¶
Все команды приведены в HEX-формате без указания 0x, что удобно для копирования в терминал.
Запрос: AA 40 01 00 42 00 00 2D
Ответ: AA 00 42 6F E3 00 00 3E 0B 00 3E E3 0B 00 00 00 00 00 00 CC FD BD 02 35 10 80
Интерпретация ответа:
- Тип пакета - сырые данные ФПГ
- systime = 1,
- ppg_red =,
- ppg_ir = ,
- ppg_green = ,
- acc_x = ,
- acc_y = ,
- acc_z = ,
Команда на получение сырых данных¶
Формат запроса¶
Длина запроса - 8 байт.
Байт # | Поле | Тип | Значение | Описание |
---|---|---|---|---|
0 | start_byte | uint8_t | 0xAA | Стартовый байт. Всегда равен 0xAA |
1 | id | uint8_t | 0x40 | Идентификатор получателя пакета. 0x40 - получатель - Датчик ФПГ |
2 | type | uint8_t | 0x01 | Тип пакета. 0x01 - пакет команды управления |
3 | action | uint8_t | 0x00 | Действие, которое необходимо выполнить. 0x00 - Чтение |
4 | param | uint8_t | 0x42 | Параметр для действия. 0x42 - Сырые данные |
5 | data | uint8_t | 0x00 | Данные для действия. 0x00 - нет данных |
6 | payload | uint8_t | 0x00 | Дополнительные данные для действия. 0x00 - нет данных |
7 | checksum | uint8_t | 0x2D | Котрольная сумма пакета - младший байт суммы всех байтов пакета |
Формат ответа¶
Длина ответа - 26 байт.
Байт # | Поле | Тип | Значение | Описание |
---|---|---|---|---|
0 | start_byte | uint8_t | 0xAA | Стартовый байт. Всегда равен 0xAA |
1 | id | uint8_t | 0x40 | Идентификатор получателя пакета 0x40 - получатель - Головное устройство |
2 | type | uint8_t | 0x42 | 0x42 - Сырые данные |
3 | systime | uint32_t | 0xXX | Системное время модуля в миллисекундах. Порядок байт - little endian |
4 | 0xXX | |||
5 | 0xXX | |||
6 | 0xXX | |||
7 | ppg_red | uint32_t | 0xXX | Сырые данные датчика ФПГ с красного светодиода в отсчетах АЦП. Безразмерная величина. Порядок байт - little endian |
8 | 0xXX | |||
9 | 0xXX | |||
10 | 0xXX | |||
11 | ppg_ir | uint32_t | 0xXX | Сырые данные датчика ФПГ с ИК-светодиода в отсчетах АЦП. Безразмерная величина. Порядок байт - little endian |
12 | 0xXX | |||
13 | 0xXX | |||
14 | 0xXX | |||
15 | ppg_green | uint32_t | 0xXX | Сырые данные датчика ФПГ с зеленого светодиода в осчетах АЦП. Безразмерная величина. Порядок байт - little endian |
16 | 0xXX | |||
17 | 0xXX | |||
18 | 0xXX | |||
19 | acc_x | int16_t | 0xXX | Линейное ускорение по оси X в 1 м/с2 = 100 LSB. Порядок байт - little endian |
20 | 0xXX | |||
21 | acc_y | int16_t | 0xXX | Линейное ускорение по оси Y в 1 м/с2 = 100 LSB. Порядок байт - little endian |
22 | 0xXX | |||
23 | acc_z | int16_t | 0xXX | Линейное ускорение по оси Z в 1 м/с2 = 100 LSB. Порядок байт - little endian |
24 | 0xXX | |||
25 | checksum | uint8_t | 0xXX | Котрольная сумма пакета - младший байт суммы всех байтов пакета |
Имплементация значений¶
- Поле systick содержит значение системного времени модуля с дискретностью 1 миллисекунда.
- Поля ppg_red, ppg_ir и ppg_green содержат значения освещенности, снятые с фотодиода по соответствующему каналу (цвету светодиода). Размерность - отсчеты АЦП и поэтому данная величина безразмерная.
- Поля acc_x, acc_y и acc_z содержат значения линейного ускорения по соответствующим осям в формате 1 м/с2 = 100 LSB. Т.е 1 = 0.01 м/с2.
Примеры¶
Все команды приведены в HEX-формате без указания 0x, что удобно для копирования в терминал.
Запрос: AA 40 01 00 42 00 00 2D
Ответ: AA 00 42 6F E3 00 00 3E 0B 00 3E E3 0B 00 00 00 00 00 00 CC FD BD 02 35 10 80
Интерпретация ответа:
- Тип пакета - сырые данные ФПГ
- systime = 1,
- ppg_red =,
- ppg_ir = ,
- ppg_green = ,
- acc_x = ,
- acc_y = ,
- acc_z = ,
Команда на получение пульса¶
Формат запроса¶
Длина запроса - 8 байт.
Байт # | Поле | Тип | Значение | Описание |
---|---|---|---|---|
0 | start_byte | uint8_t | 0xAA | Стартовый байт. Всегда равен 0xAA |
1 | id | uint8_t | 0x40 | Идентификатор получателя пакета. 0x40 - получатель - Датчик ФПГ |
2 | type | uint8_t | 0x01 | Тип пакета. 0x01 - пакет команды управления |
3 | action | uint8_t | 0x00 | Действие, которое необходимо выполнить. 0x00 - Чтение |
4 | param | uint8_t | 0x40 | Параметр для действия. 0x40 - Данные пульса |
5 | data | uint8_t | 0x00 | Данные для действия. 0x00 - нет данных |
6 | payload | uint8_t | 0x00 | Дополнительные данные для действия. 0x00 - нет данных |
7 | checksum | uint8_t | 0x2B | Котрольная сумма пакета - младший байт суммы всех байтов пакета |
Формат ответа¶
Длина ответа - 12 байт.
Байт # | Поле | Тип | Значение | Описание |
---|---|---|---|---|
0 | start_byte | uint8_t | 0xAA | Стартовый байт. Всегда равен 0xAA |
1 | id | uint8_t | 0x40 | Идентификатор получателя пакета 0x40 - получатель - Головное устройство |
2 | type | uint8_t | 0x40 | 0x40 - Данные пульса |
3 | systime | uint32_t | 0xXX | Системное время модуля в миллисекундах. Порядок байт - little endian |
4 | 0xXX | |||
5 | 0xXX | |||
6 | 0xXX | |||
7 | pulse | uint32_t | 0xXX | Частота сердечных сокращений в Уд/с Порядок байт - little endian |
8 | 0xXX | |||
9 | 0xXX | |||
10 | 0xXX | |||
11 | checksum | uint8_t | 0xXX | Котрольная сумма пакета - младший байт суммы всех байтов пакета |
Имплементация значений¶
TODO сведения по имплементации значений
Примеры¶
Все команды приведены в HEX-формате без указания 0x
Запрос: AA 40 01 00 40 00 00 2B
Ответ: AA 00 40 01 00 00 00 10 00 00 00 22
Интерпретация ответа: тип пакета - данные пульса, systime = 1, пульс = 10 уд/мин.
Команда на получение сатурации¶
Формат запроса¶
Длина запроса - 8 байт.
Байт # | Поле | Тип | Значение | Описание |
---|---|---|---|---|
0 | start_byte | uint8_t | 0xAA | Стартовый байт. Всегда равен 0xAA |
1 | id | uint8_t | 0x40 | Идентификатор получателя пакета. 0x40 - получатель - Датчик ФПГ |
2 | type | uint8_t | 0x01 | Тип пакета. 0x01 - пакет команды управления |
3 | action | uint8_t | 0x00 | Действие, которое необходимо выполнить. 0x00 - Чтение |
4 | param | uint8_t | 0x41 | Параметр для действия. 0x41 - Данные сатурации крови. |
5 | data | uint8_t | 0x00 | Данные для действия. 0x00 - нет данных |
6 | payload | uint8_t | 0x00 | Дополнительные данные для действия. 0x00 - нет данных |
7 | checksum | uint8_t | 0x2C | Котрольная сумма пакета - младший байт суммы всех байтов пакета |
Формат ответа¶
Длина ответа - 12 байт.
Байт # | Поле | Тип | Значение | Описание |
---|---|---|---|---|
0 | start_byte | uint8_t | 0xAA | Стартовый байт. Всегда равен 0xAA |
1 | id | uint8_t | 0x40 | Идентификатор получателя пакета 0x40 - получатель - Головное устройство |
2 | type | uint8_t | 0x41 | 0x41 - Данные сатурации крови |
3 | systime | uint32_t | 0xXX | Системное время модуля в миллисекундах. Порядок байт - little endian |
4 | 0xXX | |||
5 | 0xXX | |||
6 | 0xXX | |||
7 | spo | uint32_t | 0xXX | Сатурация крови в процентах. Порядок байт - little endian |
8 | 0xXX | |||
9 | 0xXX | |||
10 | 0xXX | |||
11 | checksum | uint8_t | 0xXX | Котрольная сумма пакета - младший байт суммы всех байтов пакета |
Имплементация значений¶
TBA
Примеры¶
Все команды приведены в HEX-формате без указания 0x
Запрос: AA 40 01 00 41 00 00 2C
Ответ: AA 00 41 01 00 00 00 10 00 00 00 22
Интерпретация ответа: тип пакета - данные сатурации, systime = 1, сатурация = 10%.
Нейроустройство¶
Настройки UART¶
UART, выведенный на головном устройстве в виде порта microUSB, имеет следующие параметры:
- Скорость - 115200
- Количество бит данных - 8
- Стоп бит - 1
- Короткая запись - 115200 8N1
Изменение настроек WiFi¶
Данная настройка выполняется один раз при подключении Edison в новую сеть. Настройки автоматически сохраняются и при последующем включении Edison настройка не требуется.
Для изменения настроек WiFi:
- Подключить устройство посредством microUSB-кабеля к ПК.
- Открыть определившийся порт посредством терминальной программы (например, putty).
- Несколько раз нажать Enter до появления приглашений. Залогиниться. Логин/пароль - root/409409409
- Выполнить configure_edison –wifi
- Следовать указанием мастера настройки
- Определить IP-адрес через ifconfig или зайти с любого компьютера в той же сети на http://balalaika.local
- Done.