Общие сведения:
Протокол VR3 содержит основные команды для управления модулем распознавания голоса - Voice Recognition Module V3.1. Все команды VR3 отправляются байтами через последовательный порт (UART), на скорости (по умолчанию) 9600 бит/сек.
Каждая команда VR3 является кадром состоящим из нескольких байт, первым байтом кадра всегда является байт AA
(код заголовка кадра), а последним байтом кадра всегда является байт 0A
(код конца кадра).
Модуль получив кадр команды VR3 отвечает кадром ответа, который так же состоит из нескольких байт, начинается с байта AA
и завершается байтом 0A
.
В данной статье все байты и коды команд представлены в шестнадцатеричном формате.
Формат команды VR3:
- Первый байт – код заголовка кадра:
AA
. - Второй байт – длина кадра (количество байт в кадре без байтов заголовка и конца кадра).
- Третий байт – код команды.
- Далее могут следовать байты данных (зависит от кода команды).
- Последний байт – код конца кадра:
0A
. - Пример:
AA 02 10 0A
. Расшифровка:AA
-заголовок,02
-длина,10
-команда,0A
-конец кадра.
Формат ответа на команду:
- Первый байт – код заголовка кадра:
AA
. - Второй байт – длина кадра (количество байт в кадре без байтов заголовка и конца кадра).
- Третий байт – код команды, на которую был прислан ответ.
- Байты данных (количество и состав зависят от кода команды).
- Последний байт – код конца кадра:
0A
. - Пример:
AA 03 10 00 0A
. Расшифровка:AA
-заголовок,03
-длина,10
-команда,00
-данные,0A
-конец кадра.
Отправка команд:
Для отправки команд и получения ответов можно использовать Arduino UNO или Piranha Uno, подключив модуль распознавания голоса - Voice Recognition Module V3.1. по следующей схеме:
Выводы модуля: | Выводы Arduino UNO / Piranha UNO: |
---|---|
RXD - вход шины UART. | 3 - назначенный вывод TX программной шины UART. |
TXD - выход шины UART. | 2 - назначенный вывод RX программной шины UART. |
VCC - вход питания 5 В. | 5V - вывод питания 5 В. |
GND - общий вывод питания. | GND - общий вывод питания. |
Далее необходимо загрузить следующий скетч (он не требует подключения внешних библиотек):
const uint8_t pinRX = 2; // Определяем вывод RX программного UART (номер вывода можно менять). const uint8_t pinTX = 3; // Определяем вывод TX программного UART (номер вывода можно менять). // #include <SoftwareSerial.h> // Подключаем библиотеку для работы с программной шиной UART SoftwareSerial softSerial( pinRX , pinTX ); // Создаём объект softSerial с указанием выводов RX и TX программного UART Arduino. byte c, n, f, h[32], toHEX(char); // Объявляем переменные c,n,f, массив h и функцию toHEX() преобразующую символ в число. // void setup(){ // Serial.begin(9600); // Инициируем связь по аппаратной шине UART на скорости 9600 (используется для работы с монитором). softSerial.begin(9600); // Инициируем связь по программной шине UART на скорости 9600 (используется для подключения модуля). Serial.println(F("ВВЕДИТЕ КОМАНДУ в шестнадцатеричном формате. ")); Serial.println(F("Команды можно вводить как целиком, так и без ")); Serial.println(F("кода начала кадра, длины кадра и конца кадра. ")); Serial.println(F("Можно использовать пробелы и иные разделители.")); } // // void loop(){ // // ПЕРЕДАЁМ КОМАНДЫ ИЗ МОНИТОРА В МОДУЛЬ: // if(Serial.available()>0){ // Если в буфере аппаратного UART есть данные (из монитора), то ... Serial.println(F("--------------------------------")); // Выводим в монитор текст. c=0, n=0, f=0, h[0]=0; // Сбрасываем значения переменных. // Получаем данные из монитора: // while(Serial.available()){ // Выполняем цикл while пока в буфере аппаратного UART есть данные ... c=Serial.read(); c=toHEX(c); // Читаем очередной символ из буфера аппаратного UART (из монитора). if(c<16){if(f){h[n]<<=4; h[n]+=c; n++; h[n]=0;}else{h[n]+=c;} f=!f;} // Получен полный байт как элемент массива h. else {if(f){ n++; h[n]=0;} f= 0;} // Получен не полный байт как элемент массива h. delay(2); // Выполняем задержку внутри цикла while, так как он выполняется быстрее чем UART на скорости 9600. } // // Добавляем код заголовка, длину и код конца кадра: // if(h[0]!=0xAA){ // Если первый (полученный из монитора) байт не равен коду заголовка кадра, то ... for(c=n-1; c>0; c--){h[c+2]=h[c];} // Сдвигаем кадр h на 2 байта назад. n+=3; h[2]=h[0]; h[1]=n-2; h[0]=0xAA; h[n-1]=0x0A; // Добавляем код начала кадра, длину кадра и код конца кадра. } // // Выводим полученный кар обратно в монитор: // Serial.print(F("Команда: '")); // Выводим в монитор текст. for(c=0; c<n; c++){ // Проходим по всем полученным байтам кадра if(h[c]<0x10){Serial.print(0);} // Выводим в монитор старший 0, если очередной байт меньше 0x10. Serial.print(h[c],HEX); // Выводим в монитор очередной байт в шестнадцатеричном формате. Serial.print(c<n-1?" ":"'\r\n"); // Выводим в монитор пробел текст. } // // Передаём полученный кадр модулю: // softSerial.write(h,n); // Отправляем сформированный пакет h состоящий из n байт по программному UART в модуль. } // // ПОЛУЧАЕМ ОТВЕТЫ ОТ МОДУЛЯ В МОНИТОР: // if(softSerial.available()>0){ // Если в буфере программного UART есть данные, то ... Serial.print(F("Ответ: '")); n=0; // Выводим в монитор текст. while(softSerial.available()){ // Выполняем цикл while пока в буфере программного UART есть данные ... c=softSerial.read(); // Читаем очередной байт из буфера программного UART. if(n>0) {Serial.print(' ');} // Выводим в монитор разделительный пробел. if(c<0x10){Serial.print(0);} // Выводим в монитор старший 0, если очередной байт меньше 0x10. Serial.print(c, HEX); // Выводим в монитор принятый байт в шестнадцатеричном формате. delay(2); n++; // Выполняем задержку внутри цикла while, так как он выполняется быстрее чем UART на скорости 9600. } Serial.print("'\r\n"); // Выводим в монитор текст. } // } // // // ФУНКЦИЯ ПРЕОБРАЗОВАНИЯ СИМВОЛА В ЧИСЛО: // byte toHEX(char i){ // if(i>='0' && i<='9'){return (byte)(i-'0' );}else // Преобразуем символ '0'-'9' в число 0-9 и возвращаем его. if(i>='a' && i<='f'){return (byte)(i-'a'+10);}else // Преобразуем символ 'a'-'f' в число 10-15 и возвращаем его. if(i>='A' && i<='F'){return (byte)(i-'A'+10);}else // Преобразуем символ 'A'-'F' в число 10-15 и возвращаем его. return 16; // Если символ не является шестнадцатеричным представлением числа, то возвращаем 16. } //
При необходимости выводы TX и RX программной шины UART можно переназначить в первых двух строках скетча.
Открыв монитор последовательного порта можно вводить команды VR3 в шестнадцатеричном формате и получать ответы от модуля.
Команды можно вводить как целиком, например, AA 02 01 0A
, так и без кода заголовка, длины кадра и конца кадра, значит для отправки той же команды достаточно ввести только 01
, так как остальные байты это: AA
-заголовок, 02
-длина и 0A
-конец кадра.
Так же скетч позволяет указывать разделители между байтами в виде пробелов и иных символов: AA02010A
= AA 02 01 0A
= AA 2 1 A
= AA-2-1-A
= AA-02-01-0A
= 01
= 1
.
Коды команд:
Проверка состояния модуля:
00
– Проверка настроек системы.01
– Проверка ячеек распознавателя голосовых команд.02
– Проверка ячеек хранилища голосовых команд.03
– Запрос подписи к голосовой команде хранилища.
Настройка системы:
10
– Восстановление системных настроек по умолчанию.11
– Установка скорости передачи данных.12
– Установка режима работы выходов модуля.13
– Установка ширины импульсов на выходах модуля.14
– Сброс логических уровней выходов в неактивное состояние.15
– Установка автозагрузки голосовых команд в распознаватель при подаче питания.
Команды записи:
20
– Запись (обучение) одной или нескольких голосовых команд в хранилище без подписи.21
– Запись (обучение) одной голосовой команды в хранилище с указанием подписи.22
– Записать / удалить подпись (текстовый комментарий) к голосовой команде хранилища.
Управление распознавателем:
30
– Загрузка голосовых команд из хранилища в распознаватель.31
– Удаление всех записей распознавателя.32
– Управление группами голосовых команд.
Команды ответов:
0A
– Подсказка при обучении.0D
– Распознана голосовая команда.FF
– Ошибка.
Команда «00» Проверка настроек системы:
Команда 00
позволяет узнать текущие настройки модуля.
Формат команды:
AA
02
00
0A
Формат ответа:
AA
08
00
СТАТУС
СКОРОСТЬ
РЕЖИМ
ШИРИНА
АВТОЗАГРУЗКА
ГРУППЫ
0A
Данные:
Тип данных: | Возможные значения: |
---|---|
СТАТУС | Статус обучения модуля с момента последней подачи питания:
00 – Голосовые команды не записывались в хранилище модуля.01 – Голосовые команды записывались в хранилище модуля.FF – Статус обучения модуля неизвестен. |
СКОРОСТЬ | Скорость передачи данных по шине UART:00 – 9’600 бит/сек.01 – 2’400 бит/сек.02 – 4’800 бит/сек.03 – 9’600 бит/сек.04 – 19’200 бит/сек.05 – 38’400 бит/сек. |
РЕЖИМ | Режим работы выходов OUT-0...OUT-6: (определяет поведение выходов при опознании голосовой команды загруженной в распознаватель).
|
ШИРИНА | Длительность (ширина) импульса на выходе OUT (в импульсном режиме):
|
АВТОЗАГРУЗКА | Автоматическая загрузка голосовых команд из хранилища в распознаватель:
|
ГРУППЫ | Управление группами голосовых команд при помощи входов IN-0...IN-2:
|
Пример:
Команда: AA 02 00 0A
Ответ: AA 08 00 00 00 00 00 00 00 0A
Расшифровка ответа:
AA
– Заголовок кадра.08
– Длина кадра в байтах, без учета байта заголовка и байта конца кадра.00
– Номер команды на которую отправлен данный ответ.00
– (СТАТУС) Голосовые команды не записывались в хранилище модуля.00
– (СКОРОСТЬ) Скорость передачи данных по шине UART равна 9600 бит/сек.00
– (РЕЖИМ) Выходы OUT 0-6 модуля работают в импульсном режиме.00
– (ШИРИНА) Импульс на выходах модуля устанавливается на 10 мс.00
– (АВТОЗАГРУЗКА) Автоматическая загрузка голосовых команд отключена.00
– (ГРУППЫ) Входы IN-0...IN-2 не управляют группами голосовых команд.0A
– Конец кадра.
Команда «01» Проверка ячеек распознавателя:
Команда 01
позволяет узнать текущее состояние распознавателя голосовых команд.
Формат команды:
AA
02
01
0A
Формат ответа:
AA
0D
01
АКТ
ГК-0 ГК-1 ГК-2 ГК-3 ГК-4 ГК-5 ГК-6
ВСЕГО
МАСКА
ГРУППА
0A
Данные:
Тип данных: | Возможные значения: |
---|---|
АКТИВНЫЕ | Количество активных голосовых команд в распознавателе:
|
ГК-X (голосовая команда) | Номер ячейки хранилища голосовых команд, данные которой загружены в ячейку X памяти распознавателя голосовых команд:
|
ВСЕГО | Количество голосовых команд загруженных из хранилища в распознаватель:
|
МАСКА | Маска это битовая карта активных ячеек памяти распознавателя: Каждый бит байта маски (кроме старшего) отвечает за номер ячейки памяти распознавателя которую необходимо сделать активной (рабочей).
|
ГРУППА | Данный байт определяет, как были загружены записи в распознаватель:
|
Пример:
Команда: AA 02 01 0A
Ответ: AA 0D 01 00 FF FF FF FF FF FF FF 00 00 FF 0A
Расшифровка ответа:
AA
– Заголовок кадра.0D
– Длина кадра в байтах, без учета байта заголовка и байта конца кадра.01
– Номер команды на которую отправлен данный ответ.00
– (АКТИВНЫЕ) В распознавателе нет активных записей.FF
– (ГК-0) В 0 ячейке распознавателе нет записей.FF
– (ГК-1) В 1 ячейке распознавателе нет записей.FF
– (ГК-2) В 2 ячейке распознавателе нет записей.FF
– (ГК-3) В 3 ячейке распознавателе нет записей.FF
– (ГК-4) В 4 ячейке распознавателе нет записей.FF
– (ГК-5) В 5 ячейке распознавателе нет записей.FF
– (ГК-6) В 6 ячейке распознавателе нет записей.00
– (ВСЕГО) В распознавателе нет записей.00
– (МАСКА) Все ячейки памяти распознавателя неактивны.FF
– (ГРУППЫ) Записи в распознавателе не загружены из групп.0A
– Конец кадра.
Команда «02» Проверка ячеек хранилища:
Команда 02
позволяет узнать статус ячеек хранилища голосовых команд, обучена (содержит запись) или нет.
Формат команды:
AA
02+количество
02
ЯЧЕЙКА
... ЯЧЕЙКА
0A
Формат ответа:
AA
3+2*количество
02
ВСЕГО
ЯЧЕЙКА СТАТУС
... ЯЧЕЙКА СТАТУС
0A
Данные:
Тип данных: | Возможные значения: |
---|---|
количество | Количество проверяемых ячеек хранилища:
|
ЯЧЕЙКА | Номер проверяемой ячейки (можно указать один или несколько номеров ячеек):
|
ВСЕГО | Общее количество обученных ячеек (ячеек содержащих записи):
|
СТАТУС | Состояние ячейки:
|
Пример:
Команда: AA 05 02 00 01 4F 0A
– проверить статус ячеек 00, 01 и 4F.
Ответ: AA 09 02 02 00 01 01 01 4F 00 0A
Расшифровка ответа:
AA
– Заголовок кадра.09
– Длина кадра в байтах, без учета байта заголовка и байта конца кадра.02
– Номер команды на которую отправлен данный ответ.02
– (ВСЕГО) В хранилище модуля есть всего две ячейки содержащие голосовые команды.00 01
– (ЯЧЕЙКА СТАТУС) Проверяемая ячейка номер 00 – обучена (01).01 01
– (ЯЧЕЙКА СТАТУС) Проверяемая ячейка номер 01 – обучена (01).4F 00
– (ЯЧЕЙКА СТАТУС) Проверяемая ячейка номер 4F – не обучена (00).0A
– Конец кадра.
Если запрошен статус всех ячеек хранилища (команда AA 03 02 FF 0A
), то ответ будет состоять из шестнадцати кадров. При этом каждый кадр будет содержать информацию о статусе очередных пяти ячеек хранилища голосовых команд.
Команда «03» Запрос подписи:
Команда 03
позволяет узнать подпись (текстовый комментарий) к записи хранилища.
Формат команды:
AA
03
03
ЯЧЕЙКА
0A
Формат ответа:
AA
4+ДЛИНА
03
ЯЧЕЙКА
ДЛИНА
ПОДПИСЬ
0A
Данные:
Тип данных: | Возможные значения: |
---|---|
ЯЧЕЙКА | Номер ячейки голосовой команды хранилища, подпись которой требуется узнать:
|
ДЛИНА | Длина подписи в байтах.
|
ПОДПИСЬ | Подпись:
|
Пример:
Команда: AA 03 03 01 0A
– запрос подписи голосовой команды из 01 ячейки хранилища.
Ответ: AA 07 03 01 03 4F 66 66 0A
Расшифровка ответа:
AA
– Заголовок кадра.07
– Длина кадра в байтах, без учета байта заголовка и байта конца кадра.03
– Номер команды на которую отправлен данный ответ.01
– (ЯЧЕЙКА) Номер записи подпись которой была запрошена.03
– (ДЛИНА) Количество байт в подписи.4F 66 66
– (ПОДПИСЬ) Байты подписи. Коды символов 4F 66 66 соответствуют тексту «Off».0A
– Конец кадра.
Команда «10» Восстановление настроек по умолчанию:
Команда 10
позволяет восстановить системные настройки в значения по умолчанию.
Формат команды:
AA
02
10
0A
Формат ответа:
AA
03
10
00
0A
Данные:
Тип данных: | Возможные значения: |
---|---|
00 | В команде и ответе нет данных, но так как ответ обязан содержать данные, то в качестве данных указан пустой байт. |
Пример:
Команда: AA 02 10 0A
Ответ: AA 03 10 00 0A
Расшифровка ответа:
AA
– Заголовок кадра.03
– Длина кадра в байтах, без учета байта заголовка и байта конца кадра.10
– Номер команды на которую отправлен данный ответ.00
– Пустой байт данных.0A
– Конец кадра.
Команда «11» Скорость UART:
Команда 11
позволяет установить скорость передачи данных по шине UART.
Формат команды:
AA
03
11
СКОРОСТЬ
0A
Формат ответа:
AA
03
11
00
0A
Данные:
Тип данных: | Возможные значения: |
---|---|
СКОРОСТЬ | Значение определяющее скорость передачи данных по шине UART:
|
Пример:
Команда: AA 03 11 03 0A
– установить скорость 9’600 бит/сек.
Ответ: AA 03 11 00 0A
Расшифровка ответа:
AA
– Заголовок кадра.03
– Длина кадра в байтах, без учета байта заголовка и байта конца кадра.11
– Номер команды на которую отправлен данный ответ.00
– Пустой байт данных.0A
– Конец кадра.
Команда «12» Режим выходов:
Команда 12
позволяет установить один из режимов работы для всех выходов OUT 0-6.
Установленный режим определяет поведение выходов OUT 0-6 при опознании голосовых команд.
Формат команды:
AA
03
12
РЕЖИМ
0A
Формат ответа:
AA
03
12
00
0A
Данные:
Тип данных: | Возможные значения: |
---|---|
РЕЖИМ | Режим работы всех выходов OUT 0-6 модуля:
|
- В импульсном режиме, при опознании голосовой команды, на соответствующем выходе появится отрицательный импульс, длительность которого можно указать командой «13».
- В режиме триггера, при опознании голосовой команды, на соответствующем выходе изменится его логический уровень, с «0» на «1», или с «1» на «0».
- В режимах установки или сброса, при опознании голосовой команды, выход будет установлен в активное состояние («1» или «0» соответственно). Восстановить неактивное состояние можно командой «14».
Пример:
Команда: AA 03 12 01 0A
– установить все выходы модуля в режим триггера.
Ответ: AA 03 12 00 0A
Расшифровка ответа:
AA
– Заголовок кадра.03
– Длина кадра в байтах, без учета байта заголовка и байта конца кадра.12
– Номер команды на которую отправлен данный ответ.00
– Пустой байт данных.0A
– Конец кадра.
Команда «13» Ширина импульсов:
Команда 13
позволяет задать длительность отрицательного импульса, появляющегося на выходах OUT 0-6 при опознании голосовой команды, если командой «12» был выбран импульсный режим работы выходов модуля.
Формат команды:
AA
03
13
ШИРИНА
0A
Формат ответа:
AA
03
13
00
0A
Данные:
Тип данных: | Возможные значения: |
---|---|
ШИРИНА | Длительность импульса на выходах OUT 0-6 модуля (в импульсном режиме):
|
Пример:
Команда: AA 03 13 0A 0A
– установить длительность импульса в 0,1 секунду.
Ответ: AA 03 13 00 0A
Расшифровка ответа:
AA
– Заголовок кадра.03
– Длина кадра в байтах, без учета байта заголовка и байта конца кадра.13
– Номер команды на которую отправлен данный ответ.00
– Пустой байт данных.0A
– Конец кадра.
Команда «14» Сброс выходов:
Команда 14
позволяет сбросить логические уровни выходов OUT 0-6 в неактивное состояние, если они работают в режиме установки или сброса (режим задаётся командой «12»)..
Формат команды:
AA
02+количество
14
ВЫХОД
... ВЫХОД
0A
Формат ответа:
AA
03
14
00
0A
Данные:
Тип данных: | Возможные значения: |
---|---|
количество | Количество выходов уровни которых требуется сбросить в неактивное состояние:
|
ВЫХОД | Номер выхода уровень которого требуется сбросить в неактивное состояние:
|
Пример:
Команда: AA 03 14 FF 0A
– сбросить все выходы OUT 0-6 в неактивное состояние.
Команда: AA 05 14 00 01 06 0A
– сбросить в неактивное состояние выходы OUT 0, 1 и 6.
Ответ: AA 03 14 00 0A
Расшифровка ответа:
AA
– Заголовок кадра.03
– Длина кадра в байтах, без учета байта заголовка и байта конца кадра.14
– Номер команды на которую отправлен данный ответ.00
– Пустой байт данных.0A
– Конец кадра.
Команда «15» Автозагрузка голосовых команд в распознаватель:
Команда 15
позволяет загрузить до 7 записей (голосовых команд) из хранилища в распознаватель голосовых команд при подаче питания.
Дело в том, что память хранилища голосовых команд модуля является энергонезависимой, а память распознавателя голосовых команд - энергозависимая. Значит после сброса питания память распознавателя очищается.
Если Вы желаете что бы модуль начинал распознавать голосовые команды после отключения и включения питания, то нужно указать, какие голосовые команды требуется автоматически загружать из хранилища в распознаватель при подаче питания..
Формат команды:
AA
03+количество
15
МАСКА
ЯЧЕЙКА[0]
... ЯЧЕЙКА[n]
0A
Формат ответа:
AA
04+количество
15
00
МАСКА
ЯЧЕЙКА[0]
... ЯЧЕЙКА[n]
0A
Данные:
Тип данных: | Возможные значения: |
---|---|
количество | Количество голосовых команд которые требуется автоматически загружать:
|
МАСКА | Маска это битовая карта активных ячеек памяти распознавателя: Каждый бит байта маски (кроме старшего) активирует одну ячейку памяти распознавателя. В распознавателе 7 ячеек памяти с номерами от 0 до 6.
|
ЯЧЕЙКА[Х] | Номер ячейки хранилища, голосовую команду которой требуется автоматически загружать в ячейку X распознавателя голосовых команд:
|
Пример:
Команда: AA 03 15 00 0A
– отключить автоматическую загрузку голосовых команд.
Ответ: AA 04 15 00 00 0A
Пример:
Команда: AA 05 15 03 05 09 0A
– загружать записи 5 и 9 в 0 и 1 ячейки распознавателя.
Ответ: AA 06 15 00 03 05 09 0A
Пример:
Команда: AA 05 15 03 03 05 07 09 0A
– загружать записи 3, 5, 7 и 9 в 0, 1, 2 и 3 ячейки.
Ответ: AA 08 15 00 03 03 05 07 09 0A
Расшифровка ответа: кадр ответа отличается от кадра команды наличием дополнительного байта 00
после номера команды 15
.
Команда «20» Запись голосовых команд:
Команда 20
позволяет записать одну или несколько голосовых команд в указанные ячейки памяти хранилища голосовых команд. Запись осуществляется без ввода подписи (текстового комментария).
Если в команде указать несколько ячеек хранилища, то будет предпринята попытка записать сразу несколько голосовых команд в указанные номера ячеек хранилища, по очереди.
Формат команды:
AA
02+количество
20
ЯЧЕЙКА
... ЯЧЕЙКА
0A
Формат ответа:
AA
04+длина подсказки
0A
ЯЧЕЙКА
ПОДСКАЗКА
0D
0A
AA
03+2*количество
20
ВСЕГО
ЯЧЕЙКА СТАТУС
... ЯЧЕЙКА СТАТУС
0A
После команды, модуль отправляет несколько подсказок и только потом ответ на команду.
Данные:
Тип данных: | Возможные значения: |
---|---|
количество | Количество голосовых команд которые требуется записать в хранилище:
|
ЯЧЕЙКА | Номер ячейки хранилища, в которую требуется записать голосовую команду:
|
ПОДСКАЗКА | Текстовый статус записи голосовой команды, это коды символов текста:
|
длина подсказки | Количество байт в подсказке |
СТАТУС | Статус записи голосовой команды в хранилище:
|
ВСЕГО | Количество успешно записанных голосовых команд.
|
Пример:
Команда: AA 03 20 05 0A
– Записать голосовую команду в 5 ячейку хранилища.
Ответы:
AA 0D 0A 05 53 70 65 61 6B 20 6E 6F 77 0D 0A
– модуль просит произнести команду.
AA 0F 0A 05 53 70 65 61 6B 20 61 67 61 69 6E 0D 0A
– модуль просит повторить команду.
AA 0B 0A 05 53 75 63 63 65 73 73 0D 0A
– модуль сообщает что команда записана в 5 ячейку.
AA 05 20 01 05 00 0A
– модуль возвращает статус записи голосовой команды в хранилище.
Расшифровка ответа:
Ответы с кодом 0A
являются текстовыми подсказками, а последний ответ на команду 20
.
AA
– Заголовок кадра.05
– Длина кадра в байтах, без учета байта заголовка и байта конца кадра.20
– Номер команды на которую отправлен данный ответ.01
– (ВСЕГО) В хранилище модуля успешно записана одна голосовая команда.05 00
– (ЯЧЕЙКА СТАТУС) В ячейку номер 05 – запись выполнена успешно (00).0A
– Конец кадра.
Если в команде указать несколько ячеек памяти хранилища голосовых команд, например,AA 04 20 05 09 0A
(записать голосовые команды в 5 и 9 ячейки хранилища голосовых команд), то модуль поочерёдно будет просить произнести команды для записи, сначала в 5 ячейку, а потом в 9, после чего вернёт статус записи всех команд в указанные ячейки хранилища.
Примечание: Выполнение записи голосовой команды в любую ячейку хранилища голосовых команд приводит к очистке всех ячеек распознавателя. Желтый светодиод на плате модуля будет постоянно светиться, сигнализируя об отсутствии сравнения звукового сигнала с записями распознавателя.
Команда «21» Запись голосовой команды с подписью:
Команда 21
позволяет записать одну голосовую команду в указанную ячейку памяти хранилища голосовых команд, с указанием подписи (комментария) к записи.
Данная команда, в отличии от команды 20, позволяет записать только одну голосовую команду за раз, но с возможностью указать подпись к записи.
Формат команды:
AA
03+длина подписи
21
ЯЧЕЙКА
ПОДПИСЬ
0A
Формат ответа:
AA
04+длина подсказки
0A
ЯЧЕЙКА
ПОДСКАЗКА
0D
0A
AA
05+длина подписи
21
ВСЕГО
ЯЧЕЙКА
СТАТУС
ПОДПИСЬ
0A
После команды, модуль отправляет несколько подсказок и только потом ответ на команду.
Данные:
Тип данных: | Возможные значения: |
---|---|
ЯЧЕЙКА | Номер ячейки хранилища, в которую требуется записать голосовую команду:
|
ПОДПИСЬ | Текстовый комментарий к голосовой команде. В примере ниже в качестве комментария указаны 6 кодов символов 50 72 69 76 65 74 , что соответствует тексту «Privet».Допускается указывать подпись длиной от 0 (без подписи) до 10 байт. |
длина подписи | Количество байт в подписи. |
ПОДСКАЗКА | Текстовый статус записи голосовой команды, это коды символов текста:
|
длина подсказки | Количество байт в подсказке |
СТАТУС | Статус записи голосовой команды в хранилище:
|
ВСЕГО | Количество успешно записанных голосовых команд.
|
Пример:
Команда: AA 09 21 05 50 72 69 76 65 74 0A
– Записать голосовую команду в 5 ячейку хранилища голосовых команд, с подписью «Privet».
Ответы:
AA 0D 0A 05 53 70 65 61 6B 20 6E 6F 77 0D 0A
– модуль просит произнести команду.
AA 0F 0A 05 53 70 65 61 6B 20 61 67 61 69 6E 0D 0A
– модуль просит повторить команду.
AA 0B 0A 05 53 75 63 63 65 73 73 0D 0A
– модуль сообщает что команда записана в 5 ячейку.
AA 0B 21 01 05 00 50 72 69 76 65 74 0A
– модуль возвращает статус записи.
Расшифровка ответа:
Ответы с кодом 0A
являются текстовыми подсказками, а последний ответ на команду 21
.
AA
– Заголовок кадра.0B
– Длина кадра в байтах, без учета байта заголовка и байта конца кадра.21
– Номер команды на которую отправлен данный ответ.01
– (ВСЕГО) В хранилище модуля успешно записана одна голосовая команда.05 00
– (ЯЧЕЙКА СТАТУС) В ячейку номер 05 – запись выполнена успешно (00).50 72 69 76 65 74
- (ПОДПИСЬ) Коды символов строки «Privet» указанной как подпись записи.0A
– Конец кадра.
Примечание: Выполнение записи голосовой команды в любую ячейку хранилища голосовых команд приводит к очистке всех ячеек распознавателя. Желтый светодиод на плате модуля будет постоянно светиться, сигнализируя об отсутствии сравнения звукового сигнала с записями распознавателя.
Команда «22» Запись/удаление подписи:
Команда 22
позволяет записать или удалить подпись к голосовой команде уже записанной в хранилище голосовых команд.
Формат команды:
AA
03+длина подписи
22
ЯЧЕЙКА
ПОДПИСЬ
0A
Формат ответа:
AA
04+длина подписи
22
00
ЯЧЕЙКА
ПОДПИСЬ
0A
Данные:
Тип данных: | Возможные значения: |
---|---|
ЯЧЕЙКА | Номер ячейки хранилища, в которую требуется записать/удалить подпись:
|
ПОДПИСЬ | Текстовый комментарий к голосовой команде. Подпись указывается кодами символов. Максимальная длина – десять байт. Если подпись не указать, то она будет стёрта из ячейки хранилища. |
длина подписи | Количество байт в подписи. |
Пример:
Команда: AA 09 22 01 50 72 69 76 65 74 0A
– Записать подпись «Privet» в 1 ячейку.
Ответ: AA 0A 22 00 01 50 72 69 76 65 74 0A
Расшифровка ответа:
AA
– Заголовок кадра.0A
– Длина кадра в байтах, без учета байта заголовка и байта конца кадра.22
– Номер команды на которую отправлен данный ответ.00
– Пустой байт данных.01
– (ЯЧЕЙКА) Номер ячейки хранилища, в которую добавлена подпись.50 72 69 76 65 74
– (ПОДПИСЬ) Коды символов текста подписи «Privet».0A
– Конец кадра.
Пример:
Команда: AA 03 22 09 0A
– Удалить подпись из 9 ячейки хранилища голосовых команд.
Ответ: AA 04 22 00 09 0A
Расшифровка ответа:
AA
– Заголовок кадра.04
– Длина кадра в байтах, без учета байта заголовка и байта конца кадра.22
– Номер команды на которую отправлен данный ответ.00
– Пустой байт данных.09
– (ЯЧЕЙКА) Номер ячейки хранилища, из которой удалена подпись.0A
– Конец кадра.
Примечание: Если подпись добавляется/изменяется/удаляется в ячейке хранилища, голосовая команда которой уже записана в распознаватель, то при совпадении речи в распознавателе, будет выведена новая подпись.
Команда «30» Загрузка голосовых команд:
Команда 30
позволяет загрузить до 7 голосовых команд из указанных ячеек хранилища в ячейки распознавателя голосовых команд.
Формат команды:
AA
02+количество
30
ЯЧЕЙКА[0]
... ЯЧЕЙКА[n]
0A
Формат ответа:
AA
03+количество
30
ВСЕГО
ЯЧЕЙКА[0] СТАТУС
… ЯЧЕЙКА[n] СТАТУС
0A
Данные:
Тип данных: | Возможные значения: |
---|---|
количество | Количество голосовых команд которые требуется загрузить в распознаватель:
|
ЯЧЕЙКА[Х] | Номер ячейки хранилища, запись которой требуется загрузить в ячейку X распознавателя голосовых команд:
|
СТАТУС | Результат загрузки голосовой команды из хранилища в распознаватель:
|
ВСЕГО | Количество успешно загруженных записей из хранилища в распознаватель:
|
Пример:
Команда: AA 04 30 05 09 0A
– загрузить ячейки 5 и 9 хранилища в 0 и 1 распознавателя.
Ответ: AA 07 30 02 05 00 09 00 0A
Расшифровка ответа:
AA
– Заголовок кадра.07
– Длина кадра в байтах, без учета байта заголовка и байта конца кадра.30
– Номер команды на которую отправлен данный ответ.02
– (ВСЕГО) Количество голосовых команд записанных из хранилища в распознаватель.05
– (ЯЧЕЙКА[0]) В 0 ячейку распознавателя загружена запись 5 ячейки хранилища.00
– (СТАТУС) Статус загрузки 5 ячейки хранилища в распознаватель - успех.09
– (ЯЧЕЙКА[1]) В 1 ячейку распознавателя загружена запись 9 ячейки хранилища.00
– (СТАТУС) Статус загрузки 9 ячейки хранилища в распознаватель - успех.0A
– Конец кадра.
Голосовая команда хранилища может быть записана в распознаватель, только если она еще не записана в него.
Пример:
Если в любой ячейке распознавателя уже есть запись из 7 ячейки хранилища, то…
Команда: AA 03 30 07 0A
– загрузить запись 7 ячейки хранилища в 0 ячейку распознавателя.
Ответ: AA 05 30 00 07 FC 0A
Расшифровка ответа:
AA
– Заголовок кадра.05
– Длина кадра в байтах, без учета байта заголовка и байта конца кадра.30
– Номер команды на которую отправлен данный ответ.00
– (ВСЕГО) Количество голосовых команд записанных из хранилища в распознаватель.07
– (ЯЧЕЙКА[0]) В 0 ячейку распознавателя загружена запись 7 ячейки хранилища.FC
– (СТАТУС) Статус загрузки 7 ячейки хранилища в распознаватель - ошибка.0A
– Конец кадра.
Примечание: После загрузки голосовых команд в распознаватель, желтый светодиод на плате модуля начнёт медленно мигать, сигнализируя о начале сравнения звукового сигнала с записями распознавателя.
Команда «31» Удаление всех записей распознавателя:
Команда 31
позволяет удалить все записи распознавателя. Удаление всех записей из памяти распознавателя приведёт к завершению сравнения записей с поступающим звуковым сигналом.
Формат команды:
AA
02
31
0A
Формат ответа:
AA
03
31
00
0A
Данные:
Тип данных: | Возможные значения: |
---|---|
00 | В команде и ответе нет данных, но так как ответ обязан содержать данные, то в качестве данных указан пустой байт. |
Пример:
Команда: AA 02 31 0A
– Удалить все записи распознавателя голосовых команд.
Ответ: AA 03 31 00 0A
Расшифровка ответа:
AA
– Заголовок кадра.03
– Длина кадра в байтах, без учета байта заголовка и байта конца кадра.31
– Номер команды на которую отправлен данный ответ.00
– Пустой байт данных.0A
– Конец кадра.
Примечание: После удаления всех голосовых команд распознавателя, желтый светодиод на плате модуля будет постоянно светиться, сигнализируя об отсутствии сравнения звукового сигнала с записями распознавателя.
Команда «32» Управление группами:
Команда 32
вызывается с одной из подкоманд: 00
, 01
, 02
, 03
, или 04
. Номер подкоманды указывается в команде сразу за номером команды.
Подробнее про группы можно прочитать в разделе Wiki - модуль распознавания голоса V3.1.
Команда 32
c подкомандой 00
определяет работу входов IN 0-2.
Формат команды:
AA
04
32
00
РЕЖИМ
0A
– выбор режима работы входов IN 0-2.
AA
04
32
00
FF
0A
– запрос режима работы входов IN 0-2.
Формат ответа:
AA
03
32
00
0A
– ответ на выбор режима работы входов IN 0-2.
AA
05
32
00
FF
РЕЖИМ
0A
– ответ на запрос режима работы входов IN 0-2.
Данные:
Тип данных: | Возможные значения: |
---|---|
РЕЖИМ | Режим управления группами голосовых команд при помощи входов модуля:
|
Как именно происходит загрузка группы при помощи входов IN 0-2 указано в таблице описывающей колодку IN модуля.
Команда 32
c подкомандой 01
позволяет создавать и удалять пользовательские группы.
Формат команды:
AA
04+количество
32
01
ГРУППА
ЯЧЕЙКА[a]
… ЯЧЕЙКА[n]
0A
– создать группу.
AA
04
32
01
ГРУППА
0A
– удалить пользовательскую группу.
Формат ответа:
AA
03
32
00
0A
Данные:
Тип данных: | Возможные значения: |
---|---|
количество | Количество ячеек хранилища которые требуется включить в группу:
|
ГРУППА | Номер создаваемой / удаляемой пользовательской группы:
|
ЯЧЕЙКА[Х] | Номера ячеек хранилища голосовых команд, которые будут включены в группу:
|
Команда 32
c подкомандой 02
позволяет загрузить системную группу, а с подкомандой 03
загрузить пользовательскую группу.
Формат команды:
AA
04
32
02
ГРУППА
0A
– загрузить системную группу.
AA
04
32
03
ГРУППА
0A
– загрузить пользовательскую группу.
Формат ответа:
AA
0D
32
ГРУППА
ГК-0 ГК-1 ГК-2 ГК-3 ГК-4 ГК-5 ГК-6
ВСЕГО
МАСКА
ГРУППА
0A
Данные:
Тип данных: | Возможные значения: |
---|---|
ГРУППА | Номер загружаемой группы:
|
ГК-Х | Номера ячеек из списка группы которые были загружены в распознаватель:
|
ВСЕГО | Общее количество записей загруженных в распознаватель голосовых команд:
|
МАСКА | Битовая карта активных ячеек памяти распознавателя. См команду 01. |
Пример:
Команда: AA 04 32 02 01 0A
– Загрузить системную группу № 01.
Ответ: AA 0D 32 01 07 08 09 0A 0B 0C 0D 07 00 01 0A
Расшифровка ответа:
AA
– Заголовок кадра.0D
– Длина кадра в байтах, без учета байта заголовка и байта конца кадра.32
– Номер команды на которую отправлен данный ответ.01
– (ГРУППА) Загружена группа № 1.07 08 09 0A 0B 0C 0D
– (ГК-X) Номера ячеек хранилища, загруженные в распознаватель.07
– (ВСЕГО) В распознаватель загружено 7 голосовых команд.07
– (МАСКА) = (00000111)2 В распознавателе три активных ячейки голосовых команд.01
– (ГРУППА) Загружена группа № 1.0A
– Конец кадра.
Команда 32
c подкомандой 04
позволяет узнать состав пользовательских групп.
Формат команды:
AA
03
32
04
0A
– получить номера ячеек хранилища во всех пользовательских группах.
AA
04
32
04
ГРУППА
0A
– получить номера ячеек хранилища из указанной группы.
Формат ответа:
AA
0A
32
ГРУППА
ГК-0
ГК-1
ГК-2
ГК-3
ГК-4
ГК-5
ГК-6
0A
Данные:
Тип данных: | Возможные значения: |
---|---|
ГРУППА | Номер проверяемой пользовательской группы:
|
ГК-X | Номера ячеек хранилища голосовых команд входящие в пользовательскую группу:
|
Пример:
Команда: AA 04 32 04 00 0A
– Получить номера ячеек хранилища включённые в группу № 0.
Ответ: AA 0A 32 00 00 01 02 FF FF FF FF 0A
Расшифровка ответа:
AA
– Заголовок кадра.0A
– Длина кадра в байтах, без учета байта заголовка и байта конца кадра.32
– Номер команды на которую отправлен данный ответ.00
– (ГРУППА) Номер пользовательской группы для которой выполнен запрос.00 01 02 FF FF FF FF
– (ГК-X) Номера ячеек хранилища в составе группы (00, 01 и 02).0A
– Конец кадра.
Команда ответа «0A» Подсказка:
Команда ответа 0A
позволяет получать подсказки при записи голосовых команд в хранилище.
Формат ответа:
AA
04+длина подсказки
0A
ЯЧЕЙКА
ПОДСКАЗКА
0D
0A
Данные:
Тип данных: | Возможные значения: |
---|---|
ЯЧЕЙКА | Номер ячейки хранилища, в которую требуется записать голосовую команду |
ПОДСКАЗКА | Текстовый статус записи голосовой команды, это коды символов текста |
Описание ответа с подсказкой рассмотрено в команде 20 и команде 21.
Команда ответа «0D» Опознана голосовая команда:
Команда ответа 0D
позволяет узнать об опознании голосовой команды, а именно, о совпадении голосовой команды загруженной в распознаватель с поступающим звуковым сигналом микрофона.
Формат ответа:
AA
07+ДЛИНА
0D
00
ГРУППА
ХРАНИЛИЩЕ
РАСПОЗНАВАТЕЛЬ
ДЛИНА
ПОДПИСЬ
0A
Данные:
Тип данных: | Возможные значения: |
---|---|
ГРУППА | Номер группы из которой загружена распознанная голосовая команда:
|
ХРАНИЛИЩЕ | №ячейки хранилища из которой в распознаватель была загружена опознанная голосовая команда.
|
РАСПОЗНАВАТЕЛЬ | № ячейки распознавателя в которой находится опознанная голосовая команда.
|
ДЛИНА | Длина подписи в байтах.
|
ПОДПИСЬ | Текстовый комментарий к голосовой команде.
|
Пример:
Ответ: AA 0D 0D 00 FF 4F 00 06 50 72 69 76 65 74 0A
– Опознана голосовая команда.
Расшифровка ответа:
AA
– Заголовок кадра.0D
– Длина кадра в байтах, без учета байта заголовка и байта конца кадра.0D
– Номер команды ответа на событие опознавания голосовой команды.00
– Пустой байт данных.FF
– (ГРУППА) Опознанная голосовая команда не загружена из групп.4F
– (ХРАНИЛИЩЕ) Опознанная голосовая команда загружена из ячейки 4F хранилища.00
– (РАСПОЗНАВАТЕЛЬ) Опознанная голосовая команда находится в 0 ячейке распознавателя.06
– (ДЛИНА) У опознанной голосовой команды есть подпись состоящая из 6 байт.50 72 69 76 65 74
– (ПОДПИСЬ) Коды символов текста подписи «Privet» голосовой команды.0A
– Конец кадра.
Команда ответа «FF» Ошибка:
Команда ответа FF
позволяет узнать о выявленных модулем ошибках.
Формат ответа:
AA
03
FF
КОД ОШИБКИ
0A
Данные:
Тип данных: | Возможные значения: |
---|---|
КОД ОШИБКИ | Выявленные модулем ошибки:
|
Пример:
Команда: AA 03 00 01 0A
- команда 00
с байтом данных 01
которого быть не должно.
Ответ: AA 03 FF FE 0A
Расшифровка ответа:
AA
– Заголовок кадра.03
– Длина кадра в байтах, без учета байта заголовка и байта конца кадра.FF
– Номер команды ответа на выявление ошибок.FE
– (КОД ОШИБКИ) В поступившей команде выявлена ошибка её длины.0A
– Конец кадра.
Обсуждение