Связь с кирпичом Lego® Mindstorms® NXT по Bluetooth®

Этот пример иллюстрирует связь с кирпичом Lego Mindstorms NXT использование текстовых команд, отправленных по Профилю Последовательного порта Bluetooth.

Получите информацию о доступных bluetooth-устройствах

Перед подготовкой связи в MATLAB кирпич NXT должен быть соединен с вашим компьютером. Если это сделано, устройство отобразится в MATLAB.

Чтобы получить список всех доступных bluetooth-устройств используют instrhwinfo команда. Получите "дружественные" имена bluetooth-устройств доступное использование RemoteNames поле от выхода instrhwinfo.

bluetoothDevices = instrhwinfo('Bluetooth')

remoteNames = bluetoothDevices.RemoteNames
bluetoothDevices = 

        RemoteNames: {'NXT'}
          RemoteIDs: {'btspp://00165310E7C4'}
    BluecoveVersion: 'BlueCove-2.1.1-SNAPSHOT'
     JarFileVersion: 'Version 3.2'


remoteNames = 

    'NXT'

Посмотрите детали кирпича NXT

Получите детали кирпича NXT.

deviceInfo = instrhwinfo('Bluetooth','NXT')
deviceInfo = 

               RemoteName: 'NXT'
                 RemoteID: 'btspp://00165310E7C4'
    ObjectConstructorName: {'Bluetooth('NXT', 1);'}
                 Channels: {'1'}

Настройте связь с кирпичом NXT

RemoteName устройства NXT и его Channel 1. Создайте объект Bluetooth, названный bt как показано ObjectConstructorName на предыдущем шаге.

bt = Bluetooth('NXT', 1);

Теперь свяжите с устройством.

fopen(bt);

Получите информацию о кирпиче Lego Mindstorms NXT

Таблица данных Lego Mindstorms задает протокол для связи с кирпичом NXT. Это указывает, что, чтобы получить информацию об устройстве, команда должна иметь следующий формат:

  • Байты 1:2 - Продолжительность команды

  • Байт 3 - Тип команды

  • Байт 4 - Дополнительная информация, чтобы выполнить команду

Используя эту информацию, формируется пакет необработанных данных, который отправляется в кирпич NXT.

  • Байты 1:2 - Продолжительность команды = 2

  • Байт 3 - Тип команды = 1 (поскольку это - системная команда с ответом от устройства),

  • Байт 4 - 0x9B (Это значение задано протоколом связи Lego Mindstorms NXT),

Это переводит пакет необработанных данных, чтобы быть: [2 0 1 155]. Запишите эти данные в кирпич.

fwrite(bt,[2 0 1 155]);

Устройство затем дает ответ, содержащий информацию об устройстве. Ответ имеет следующий формат:

  • Байты 1:2 - Продолжительность ответа

  • Байт 3 - Тип данной команды

  • Байт 4 - Данные, отправленные в устройство

  • Состояние Byte 5 - Command

  • Байты 6:20 - Имя устройства (14 символов + пустой терминатор строки)

  • Байты 21:27 - адрес Bluetooth

  • Байт 28 - LSB Bluetooth сигнализирует о силе

  • Байт 29 - Не заданный

  • Байт 30 - Не заданный

  • Байт 31 - MSB Bluetooth сигнализирует о силе

  • Байт 32 - LSB пользовательской флэш-памяти

  • Байт 33 - Не заданный

  • Байт 34 - Не заданный

  • Байт 35 - MSB пользовательской флэш-памяти

Теперь считайте ответ из кирпича, чтобы получить его информацию

btResponse = fread(bt,32)'
btResponse =

  Columns 1 through 13

    33     0     2   155     0    78    88    84     0     0     0     0     0

  Columns 14 through 26

     0     0     0     0     0     0     0     0    22    83    16   231   196

  Columns 27 through 32

     0     0     0     0     0   132

В этом примере ответ от кирпича NXT:

  • Байты 1:2 - Продолжительность ответа = 33

  • Байт 3 - Тип команды, данной = 2

  • Байт 4 - Данные, отправленные в устройство = 0x9B

  • Состояние Byte 5 - Command = 0 (команда была успешна),

  • Байты 6:20 - Имя устройства (14 символов + пустой терминатор строки)

  • Байты 21:27 - адрес Bluetooth

  • Байт 28 - LSB Bluetooth сигнализирует о силе = 0

  • Байт 29 - Не заданный = 0

  • Байт 30 - Не заданный = 0

  • Байт 31 - MSB Bluetooth сигнализирует о силе = 0

  • Байт 32 - LSB пользователя высвечивается = 0

  • Байт 33 - Не заданный = 0

  • Байт 34 - Не заданный = 0

  • Байт 35 - MSB пользователя высвечивается = 132

Позвольте нам теперь только для чтения имя кирпича от его ответа. Мы знаем, что байты 6 - 20 соответствуют имени кирпича.

btName = char(btResponse(6:20))
btName =

NXT            

Очистите буфер объекта Bluetooth

flushinput(bt);

Проигрывайте тон на кирпиче Lego Mindstorms NXT

Давайте теперь проигрывать тон на частоте 1 500 Гц для 1 000 мс на кирпиче. Lego Mindstorms NXT прямые команды задает команду, чтобы проигрывать тон на кирпиче можно следующим образом:

  • Байты 1:2 - Продолжительность команды

  • Байт 3 - Тип команды

  • Байт 4 - Идентификатор сообщения

  • Байты 5:6 - Частота тона в Гц

  • Байты 7:8 - Длительность тона в мс

В этом примере пакет необработанных данных формируется можно следующим образом:

  • Байт 1:2 - Продолжительность команды = 6

  • Байт 3 - Тип команды = 0 (поскольку это - прямая команда с ответом от устройства),

  • Байт 4 - Идентификатор сообщения = 3

  • Байты 5:6 - Частота тона составляет 1500 Гц, который переводит в uint8 [220 5]

  • Байты 7:8 - Длительность тона составляет 1 000 мс, который переводит в uint8 [232 3]

Следовательно командой, которая будет записана в кирпич, является [6 0 0 3 220 5 232 3].

fwrite(bt,[6 0 0 3 220 5 232 3]);

В дополнение к аудио тону, проигрываемому на кирпиче NXT, устройство также дает 5-байтовый ответ. Давайте теперь считаем ответ из кирпича. Ответ имеет следующий формат:

  • Байт 1:2 - Продолжительность ответа

  • Байт 3 - Тип данной команды

  • Байт 4 - Идентификатор сообщения

  • Байт 5 - Байт состояния

btResponse = fread(bt,5)'
btResponse =

     3     0     2     3     0

В этом примере ответ от кирпича NXT:

  • Байт 1:2 - Продолжительность ответа = 3

  • Байт 3 - Тип команды, данной = 2

  • Байт 4 - Идентификатор сообщения = 3

  • Байт 5 - Байт состояния = 0 (команда была успешна),

Закройте связь с кирпичом NXT

fclose(bt);
delete(bt);
clear('bt');

Можно получить больше информации о связи с Lego Mindstorms NXT с помощью команд высокого уровня здесь.