Comments 14
В первом же посте я писал о том, что приведенное решение не для микроконтроллеров, потому как места часто недостаточно. Больше смахивает на just-for-fun концепт.
Имхо, достаточно реализовать ответы на ping
и небольшую обертку поверх js-библиотеки serialport
чтобы получить более высокоуровневый итерфейс подписки на события connect
, disconnect
, data
.
Потом было бы неплохо синхронизировать внутреннее состояние девайса с подключенным компьютером. Потому что при любом дисконнекте необходимо либо повторно принудительно изменить состояние девайса, либо обновить интерфейс программы последним состоянием полученным с девайса.
В первом же посте я писал о том, что приведенное решение не для микроконтроллеров, потому как места часто недостаточно. Больше смахивает на just-for-fun концепт.
Только что ответил в тот тред. Базовый вариант прошивки без JSON не так уж сильно требователен к месту. Вариант с JSON жручий, да (думаю посмотреть еще другие варианты парсеров), но в мои контроллеры умещается и работает. В любом случае, я думаю, что ради единообразия кодовой базы и удобства разработки иногда можно пожертвовать местом на контроллере. Если требования проекта не позволяют, то, да, стоит подыскать другое решение.
Имхо, достаточно реализовать ответы на ping и небольшую обертку поверх js-библиотеки serialport чтобы получить более высокоуровневый итерфейс подписки на события connect, disconnect, data.
Ну, у меня, собственно, так и сделано
Потом было бы неплохо синхронизировать внутреннее состояние девайса с подключенным компьютером. Потому что при любом дисконнекте необходимо либо повторно принудительно изменить состояние девайса, либо обновить интерфейс программы последним состоянием полученным с девайса.
Да, для примера с лампочкой следует добавить еще одну команду ledstatus.
Помимо всего прочего уже придумано множество протоколов, в частности можно обратить внимание на безпроводной MQTT, который горантирует доставку пакетов, и Firmata, который как раз создан чтобы связываться с девайсом по Serial (есть поддержка кучи языков, включая JavaScript).
Буду разбираться…
Warning: Accessing PropTypes via the main React package is deprecated.
module.js:440 Uncaught Error: Cannot find module 'babbler-js-material-ui/lib/BabblerConnectionStatusIcon'
git clone https://github.com/1i7/babbler-js-demo.git
cd babbler-js-demo/babbler-serial-react
npm install
./babbler-serial.sh
Всё установилось, запустилось, подключилось.
В консольке View->Developer tools->Console появился красный ворнинг
/home/xxx/babbler-js-demo/babbler-serial-react/node_modules/fbjs/lib/warning.js:36 Warning: BabblerConnectionStatusIcon: React.createClass is deprecated and will be removed in version 16. Use plain JavaScript classes instead. If you're not yet ready to migrate, create-react-class is available on npm as a drop-in replacement.
Но он пока работе не мешает.
module.js:440 Uncaught Error: Cannot find module 'babbler-js-material-ui/lib/BabblerConnectionStatusIcon'
Это виджет с иконкой статуса и прогресса подключения, он находится внутри пакета babbler-js-material-ui:
npm install babbler-js-material-ui
но он в зависимостях демо-проекта прописан, должен был установиться вместе с первым «npm install»
Сам файл вот — на месте:
https://github.com/1i7/babbler-js-material-ui/blob/master/src/BabblerConnectionStatusIcon.js
/home/xxx/babbler-js-demo/babbler-serial-react/node_modules/fbjs/lib/warning.js:36 Warning: Accessing PropTypes via the main React package is deprecated. Use the prop-types package from npm instead.
не успеваю я за прогрессом этих библиотек, но работать он все равно не мешает.
https://github.com/1i7/babbler-js/releases/tag/v0.6.0
будет запрошено один раз при подключении
babbler.stickProp("name", "name", []);
babbler.stickProp("manufacturer", "manufacturer", []);
будут постоянно опрашиваться 2 раза в секунду (каждые 500 миллисекунд)
babbler.stickProp("name", "name", [], 500);
babbler.stickProp("manufacturer", "manufacturer", [], 500);
Получить значение «приклеенного» свойства:
babbler.getStickedProp("name").val
если при последнем запросе свойства произошла ошибка:
babbler.getStickedProp("name").err
Глобальное событие при изменении значения свойства:
babbler.on('manufacturer', function(prop_name, err, val) {
//...
}
В случае с лампочкой нужно в прошивку добавить команду ledstatus, а потом «приклеить» ее в виде свойства. В таком случае смайлик на главном экране будет обновляться не только при нажатии кнопок, но и при ручном вызове команд ledon/ledoff из экрана отладки (уже реализовано в последней версии демо-проекта — мастер и ветка 0.6.0).
Настольный пульт управления на JavaScript/Node.js для робота на Ардуине