Firmata library – библиотека, реализующая протокол Firmata
Библиотека Firmata реализует протокол Firmata, что позволяет простым образом общаться с программами на компьютере.
Данная библиотека входит в состав Arduino IDE.
Удобна тем, что при необходимости не нужно изобретать велосипед и придумывать свой протокол, как, например, в этой программе управления, а уже использовать этот готовый протокол. К тому же он реализован и для Processing-а.
Рассмотрим функции библиотеки:
void begin();
void begin(long);
Описание:
Запуск/инициализация библиотеки
Параметры:
long – отличная от установленной по-умолчанию(57600) скорость обмена
void printVersion(void);
Описание:
Отправить компьютеру версию протокола
void blinkVersion(void);
Описание:
Промигать версию протокола на 13 пине.
void printFirmwareVersion(void);
Описание:
отправить название прошивки и ее версию на компьютер.
void setFirmwareNameAndVersion(const char *name, byte major, byte minor);
Описание:
установить название и версию прошивки, используя название скетча без расширения (.pde)
Отправка сообщений
void sendAnalog(byte pin, int value);
Описание:
отправить аналоговое сообщение
void sendDigitalPort(byte portNumber, int portData);
Описание:
Отправить значение порта одним 8-битным сообщением
void sendSysex(byte command, byte bytec, byte* bytev);
Описание:
послать сообщение в виде массива байт
void sendString(const char* string);
Описание:
Отправить сообщение в виде стоки
void sendString(byte command, const char* string);
Описание:
Отправить сообщение в виде стоки командного типа
Получение сообщений
int available(void);
Описание:
Проверяет наличие сообщений в буфере
void processInput(void);
Описание:
Прочесть сообщение из буфера, отправить данные зарегистрированным функциям-обработчикам
Теперь нужно разобраться – какой формат сообщений нужно предавать с управляющей программы компьютера (хоста).
В этом поможет описание протокола на официальном сайте firmata.org/wiki/Protocol
а так же пример программы, управляющей состоянием портов Arduino: firmata.org/wiki/Proposals
Интересное, конечно, решение, но только зачем-то подразумевает написание обработчиков. Можно было бы отдавать полный контроль управляющему приложению.
И самого главного нет — передачи данных. Есть «строка», но эту строку надо ещё парсить, а это тоже целый процесс. Нет обратной связи — дошло ли, в целости ли…
В общем сомнительная библиотека. Надо изобретать что-то своё!
Что нет проверки целостности данных — это минус.
Разве нет передачи данных?
Cвоё, разумеется, изобрести можно, но рекомендую внимательнее присмотреться к этому протоколу.
Например, этот же протокол для работы с Arduino использует Processing, да и для взаимодействия с URBI я планирую использовать именно его.
А разве есть передача данных? Я присмотрелся как мог, и пришёл к выводу, что даже для процессинга реализация посредственная.
Собственно для связи с процессингом я и начал писать свою библиотеку.
На мой взгляд гораздо интереснее взаимодействие на следующем уровне:
В программе для Ардуино подключаются функции в качестве событий, которым передаются данные, тут схоже как сделано в Firmata, но во-первых очень редко надо передавать String, тем более, что его не просто парсить, во-вторых длинны byte явно недостаточно для передачи большинства значений. Поэтому интереснее если будет передаваться массив int, при чём к нему ещё будет прилагаться параметр команды — для определения обработчика:
Да, схожая тема, но пока мы тут говорили — я написал львиную долю того, чего хотел получить от Firmata.
Через некоторое время, думаю, смогу представить здесь. Вдруг кому-то будет интересно.
Комментарии (11)
RSS свернуть / развернутьИ самого главного нет — передачи данных. Есть «строка», но эту строку надо ещё парсить, а это тоже целый процесс. Нет обратной связи — дошло ли, в целости ли…
В общем сомнительная библиотека. Надо изобретать что-то своё!
savarez
Разве нет передачи данных?
Cвоё, разумеется, изобрести можно, но рекомендую внимательнее присмотреться к этому протоколу.
Например, этот же протокол для работы с Arduino использует
noonv
Собственно для связи с процессингом я и начал писать свою библиотеку.
На мой взгляд гораздо интереснее взаимодействие на следующем уровне:
В программе для Ардуино подключаются функции в качестве событий, которым передаются данные, тут схоже как сделано в Firmata, но во-первых очень редко надо передавать String, тем более, что его не просто парсить, во-вторых длинны byte явно недостаточно для передачи большинства значений. Поэтому интереснее если будет передаваться массив int, при чём к нему ещё будет прилагаться параметр команды — для определения обработчика:
А из Процессинга:
0 — как команда, для определения разных функций на разные команды (чтобы не развлекаться switch-case)).
Библиотека должна сама проверять целостность, и отправлять-принимать авто-отчёт об успешности передачи и т.п.
Ну и ещё интересный и важный момент — автоматический поиск и определение порта на котором висит устройство.
В общем много есть ценных нововведений, которые в Firmata вряд ли реализуют в ближайшее время.
savarez
noonv
Через некоторое время, думаю, смогу представить здесь. Вдруг кому-то будет интересно.
savarez
noonv
и на компе аналогично. Хоть процессинг, хоть на сях, хоть на (О трепещите ацкие кодеры) VB.NET
MAFia
nes
Borocco
см. пример в
admin
P.S. очень нужно, перерыл все, но так и не понял(
Borocco
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.