Общие сведения:
Протокол 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– Конец кадра.

Обсуждение