LINUX.ORG.RU

Выбор технологий для управления железом из браузера

 , , ,


2

1

Здравствуйте уважаемые формучане и тролли.

Так получилось, что я большую часть времени разрабатываю всякие железки на микроконтроллерах и программирую их на няшной сишке или суровом ассемблере. Ну и пишу простенькие софтинки для управления ими на Qt/C++.

Но тут у одной из разрабатываемых железок появился 100-Мбитный Ethernet и надо по нему управлять этой подделкой. И появилась идея сделать софтину для управления ею в виде Web-приложения. Как я себе это представляю: подключаю железку к локальной сети, отрываю браузер, тыкаю на это чудесное Web-приложение, и вуаля, управляю своей железкой.

И сейчас возник вопрос, на чем это Web-приложение делать. По мне, то наиболее симпатизируют Python и Ruby. Но возможно ни тот, ни другой не сможет рулить железкой из браузера. А может и оба умеют. А может и есть вариант получше, только я его не знаю.

И вопрос во в чём: что мне лучше начать изучать из Web-технологий для реализации своей затеи?


Как я себе это представляю: подключаю железку к локальной сети, отрываю браузер, тыкаю на это чудесное Web-приложение, и вуаля, управляю своей железкой.

Вебсервер то где стоит? На железке или локально? Как управляется железка?

alozovskoy ★★★★★ ()

Любой эмбеддед-сервер и пиши на няшной дальше

ruzisufaka ()

А что хоть примерно делать надо - как этой самой железкой управлять ? Если писать в порты/файлы или с шеллом работать - то все равно, на чем хочешь на том и пиши (на том же питоне куча примеров)

Balantay ()
Ответ на: комментарий от alozovskoy

Сервер стоит локально, на компе. Железка просто подключена к нему по Ethernet. И управляется тоже по Ethernet на MAC уровне

S9 ()
Ответ на: комментарий от Balantay

В железке есть Ethernet порт, и надо тупо посредством него слать/получать данные. Обмен планируется на MAC уровне, ибо вся конструкция будет realtime

S9 ()
Ответ на: комментарий от ruzisufaka

Мне не надо сервер в микроконтроллере. Сервер будет в компе. Микроконтроллер должен к нему уметь подключаться

S9 ()
Ответ на: комментарий от S9

Тогда без С не обойдешься, ну а не-низкоуровневые вещи пиши на чем хочешь опять же

Balantay ()

И появилась идея сделать софтину для управления ею в виде Web-приложения.

Окстись! Окстись, окаянный!

anonymous ()

Я бы взял Python (второй или третий 100% есть под любым Linux). Думаю у тебя уже должны быть наработки на C по управлению железками. Если так, то смотри в сторону ffi (там реализаций много, вот одна https://docs.python.org/2/library/ctypes.html).

Дальше ты просто берёшь http://bottlepy.org/ и лепишь себе web морду.

P.S. Если у тебя web-сервер на компе стоит, то никакой разницы есть у тебя Ethernet или просто COM\USB\etc нет вообще.

У тебя управление железкой будет примерно такое web клиент <-> web server <-> демон управления железкой <-> C код для передачи\получения данных <-> Твоя железка.

Отдельный демон я сделал бы, чтобы не заморачиваться с потоками на web серваке, а просто гонял бы команды по RPC какому-нибудь.

Norgat ★★★★★ ()
Последнее исправление: Norgat (всего исправлений: 2)
Ответ на: комментарий от Norgat

Спасибо за ответ. По поводу FFI, то находил статью на хабре, вот она https://habrahabr.ru/post/142172/ Там как раз чувак из проги на Ruby обращался к железке через драйвер FTDI

Но сначала мне показать концепция примерно такой: Web клиент <-> Web сервер (тут же приблуда с FFI) <-> Железка (в которой свой протокол обмена)

Под «своим протоколом обмена» подразумеваю некий протокол, который в качестве транспортного уровня использует Ethernet, и соответственно Web приложение общается с желекой по этому же протоколу через Ethernet.

Но в любом случае, как я понял, FFI есть как и под Python или Ruby, который позволит юзать всякие низкоуровневые штуки написанные на C.

Осталось решить, на чем делать Web-морду приложения и в принципе начинать изучать

По поводу инструмента, то как указывал выше, думаю или Python или Ruby. Если честно, то совсем хз что выбрать, исходя из того что может пригодится в дальнейшем для эмбедера. Имел некоторый опыт работы в IDEA, и на основе IDEA есть PyCharm и RubyMine, причем PyCharm есть community версия, а RubyMine нет. Но с другой стороны на серваке (на котором может и будет запускаться это безобразие) уже есть Ruby on Rails и если я сломаю его своими кривыми руками, которые ставят Python, то меня расстреляют.

Вообщем незнаю что выбрать для создания красивых и функциональных Web-приложений. Для меня что Python, что Ruby обладают одинаковым наркоманским синтаксисом после няшной сишки, поэтому приоритета никакого (или если только чуть-чуть в сторону Ruby, т.к. есть чувство самосохранения)

S9 ()
Ответ на: комментарий от S9

обладают одинаковым наркоманским синтаксисом после няшной сишки

golang?

Nicholass ★★★ ()
Ответ на: комментарий от S9

Вообщем незнаю что выбрать для создания красивых и функциональных Web-приложений.

для создания красивых и функциональных Web-приложений.

функциональных Web-приложений.

Web-приложений.

Web.

Как ты смог эти слова уместить рядом? Это какой-то сарказм?

Для меня что Python, что Ruby обладают одинаковым наркоманским синтаксисом после няшной сишки

Java? Ну или кушать ложкой и сразу зашквариться об JS, все равно на клиенте без него не обойтись, а нынче на нем пишут все, включая и сервсайд.

А вообще это МАКСИМУМ странное желание. Веб-интерфейс - это удел или чего-то удаленного, или признак веб-обезьяны, которая дорвалась до чего-то сложнее сайтиков. Чтобы эмбеддер стал обезьяной - это очень странно.

ruzisufaka ()
Ответ на: комментарий от Norgat

А можно в двух словах как управлять железкой-клиентом(не сервером) по HTTP?

zolden ★★★★★ ()

Вот откуда вьі такие беретесь?

anonymous ()
Ответ на: комментарий от S9

после няшной сишки

Питон после сишки это просто как пересесть с инвалидной коляски на феррари

zolden ★★★★★ ()

Выбор технологий для управления железом из браузера

Не нужно управлять железом из браузера. Есть же NETCONF.

good_riddance ()

Я не очень понимаю как связаны эти два понятия «разрабатываемых железок появился 100-Мбитный Ethernet» и «для управления ею в виде Web-приложения». И как одно из другого вытекает.

Ведь если это будет просто страница управления доступная в Opera/Chrome/Firefox/etc, то сервер, генерирующий эту страницу, должен находиться внутри железки и причём тут тогда питоны и руби не понятно. Так как страница будет из себя представлять помесь html/css/js. А внутри железки всё будет на сишке и ассемблере, значит и генерирующий контент сервер внутри железки тоже на сишке и ассемблере.

Если же панель управления будет как плагин/расширение/дополнения для Opera/Chrome/Firefox/etc, то придется написать кучу разных расширений потом суметь их правильно разместить во всех этих магазинах приложений и следить за их актуальностью постоянно. А потом пользователь захочет зайти через ipad с safari или через android с uc browser. И опять писать/писать/писать одну и ту же панельку управления.

justAmoment ★★★★★ ()
Ответ на: комментарий от zolden

Что тебе конкретно непонятно? У тебя есть железка, шлющая по Ethernet\USB\COM\etc данные на комп и получающая от компа данные и команды. Для компа пишется управляющая программа умеющая работать с протоколом железки. А уже к управляющей программе ты можешь присобачить хоть десктопное UI, хоть Web клиент, которые просто будут получать уведомления от управляющей программы и дёргать методы управляющей программы (а это уже можно даже с помощью RPC делать).

Norgat ★★★★★ ()
Ответ на: комментарий от S9

С вероятностью 99.9% у вас на серваке есть минимум Python 2.6.

В целом я бы советовал Python, т.к. на Python есть куча всяких интересных либ и приложений не только в сфере Web или UI, но и в сфере обработки данных, рисования графиков, машинного обучения и т.д. Не слышал, чтобы для Ruby было такое разнообразие.

Norgat ★★★★★ ()

По мне, то наиболее симпатизируют Python и Ruby. Но возможно ни тот, ни другой не сможет рулить железкой из браузера

Конечно не смогут, они же не работают в браузере.

Но тут у одной из разрабатываемых железок появился 100-Мбитный Ethernet и надо по нему управлять этой подделкой

Прямо из браузера не получится никак. Но можно сделать сайт, который будет рулить железкой - выбор языка для сервера тут произвольный.

no-such-file ★★★★★ ()

Делай на том, что лучше знаешь.

Писать всё с нуля не имеет смыла наверное. https://habrahabr.ru/post/215083/

А вообще я бы рекомендовал малинку для всего этого, если конечно тут не присутствует желание узнать спутницу вечеров поближе, познакомиться, так сказать, со своей железкой в более интимной обстановке. https://xakep.ru/2013/11/18/raspberry-pi-cofemachine/

xSudo ★★★ ()

Веб-приложения для управления железяками, в принципе, можно писать и на C++. Можно посмотреть в сторону Wt (https://www.webtoolkit.eu/wt/ru/), они как раз позиционируют себя в качестве инструмента для Web-морд на устройствах. (Статья на Хабре, хотя и старая: https://habrahabr.ru/post/142585/).

Ну и вообще Wt не единственный подобный инструмент для C++, когда-то сделал вот этот список с похожими инструментами. Уж не знаю, насколько он устарел со временем.

eao197 ★★★★★ ()
Ответ на: комментарий от justAmoment

Я понял ТС-а: хочет чтобы в браузере крутилось сложное тяжелое приложение на клиентской стороне, а в контроллере оставалось что-то примитивное на базе простых пакетов, чуть ли не UDP.

Только вот как пользователь будет брать это приложение? Допустим не из железки (не по HTTP), но вот как UDP - оно работает в браузере, если из Python переляпать в Js транслятором (коих как собак)

I-Love-Microsoft ★★★★★ ()

cgi на Си сделай и вызывай его, всего-то делов

SZT ★★★★ ()
Ответ на: комментарий от Nicholass

golang?

Вот у кого уж, а у GoLang точно наркоманский синтаксис.

xpahos ★★★★★ ()

perl, если что - есть inline::c

annulen ★★★★★ ()

Зависит от того что ты хочешь и как быстро в плане разработки. Например, если у тебя не 1kk rps, то можно взять обычный SimpleHTTPServer в Python и простой шаблонизатор вроде mako или jinja. SimpleHTTPServer можно заменить на pywsgi из gevent. Все это будет работать из коробки, отдавать HTML и рисовать все что нужно.

xpahos ★★★★★ ()

Но тут у одной из разрабатываемых железок появился 100-Мбитный Ethernet и надо по нему управлять этой подделкой. И появилась идея сделать софтину для управления ею в виде Web-приложения. Как я себе это представляю: подключаю железку к локальной сети, отрываю браузер, тыкаю на это чудесное Web-приложение, и вуаля, управляю своей железкой.

Под «своим протоколом обмена» подразумеваю некий протокол, который в качестве транспортного уровня использует Ethernet, и соответственно Web приложение общается с желекой по этому же протоколу через Ethernet.

Ну и нахрена тебе лишнее звено в виде веб-сервера на ПеКа?

Есть же http://www.nongnu.org/lwip/2_0_0/group__httpd.html, и даже https://forum.micropython.org/viewtopic.php?t=1033!

Будь мужиком, сделай прямо на микроконтроллере!

shkolnick-kun ★★★★ ()
Последнее исправление: shkolnick-kun (всего исправлений: 1)
Ответ на: комментарий от SZT

cgi на Си сделай и вызывай его, всего-то делов

Удваиваю. А вот после этого:

Для меня что Python, что Ruby обладают одинаковым наркоманским синтаксисом после няшной сишки

для вебни можно вобще посоветовать PHP.

В частности можно сделать как советует Norgat:

Для компа пишется управляющая программа умеющая работать с протоколом железки. А уже к управляющей программе ты можешь присобачить хоть десктопное UI, хоть Web клиент

Т.е. схема такая: «Железка» -> Ethernet -> Резидентная прога на Си с каким-либо API -> Веб-скрипт, обращающийся к резидентной проге.

Веб-скрипт хоть на PHP, хоть на Python, хоть на Ruby, хоть опять же на Си (cgi) - тут уже разницы нет. Но чисто для вебни я бы посоветовал пых-пых.

Novator ★★★★ ()

Я юзал для такого Tornado Python web framework прямо на девайсе http://www.tornadoweb.org/en/stable/

Впечатления положительные, встроенный веб сервер, разобраться несложно, места занимает сравнительно немного

ls -hs python-tornado_*.ipk
472K python-tornado_4.3-r0_cortexa9hf-neon.ipk
alx777 ()
Ответ на: комментарий от S9

Если напрямую дергать сишные функции из веб приложения, могут понадобиться дополнительные примитивы синхронизации, проще написать программу на няшной сишечке, которая будет с помощью message queue общаться с веб интерфейсом.

в качестве транспортного уровня использует Ethernet

ethernet не может быть транспортным уровнем

mythCreator ()
Ответ на: комментарий от Norgat

web клиент <-> web server <-> демон управления железкой <-> C код для передачи\получения данных <-> Твоя железка

Это же CGI, не?

Т.е. вебморда вообще может быть статической, в принципе.

cgi на C. Удваиваю

ну вот, утраиваю.

deep-purple ★★★★★ ()
Последнее исправление: deep-purple (всего исправлений: 1)
Ответ на: комментарий от deep-purple

Нафига там CGI? Он же текстовый. А если захочется в реальном времени получать данные с железки и показывать их в интерфейсе? Дёргать по таймеру? Да ну нафиг.

Я бы взял WebSockets для web клиента и web сервера, а web сервер подключил к «демону» через ZMQ по подписке и гонял бинарные данные тут.

P.S. Я тут погуглил, оказывается для ZMQ есть какая-то поддержка WebSockets. Так что да, можно оставить web клиент статикой на сервере, сделать его, как SPA, а данные тащить через WebSockets.

Norgat ★★★★★ ()
Ответ на: комментарий от Norgat

Вообщем, незнаю как ответить на все сообщение разом, но это относится ко всему вопросу в целом.

Чтобы более-менее все было ясно, проясню некоторые моменты (некоторые могут показаться немного неожиданными).

1. Как именно эта железка будет работать. Эта чудесная Web-софтина нужна лишь для тестирования этой железки, в реальности ей команды по Ethernet будут поступать с другой железки, называемой бортовой машиной. Поэтому все эти питоны/руби и прочие зоопарки нужны лишь для отладки.

2. Где именно эта железка будет работать. Эта железка будет работать в составе комплекса оборудования радиоприцела самолёта СУ-35С. Поэтому, т.к. самолёт работает в реальном времени, то и команды железка получает в реальном времени. И естественно никаких серверов поднятых в микроконтроллерах. Web-приложение в идеале должно имитировать бортовую машину, но пусть без динамики переключения различных режимов. Тупо нажал кнопку, каждые N времени шлёт определенный набор данных в канал.

Исходя из перечисленных выше пунктов, требуется инструмент который мог освоить инженер у которого ассемблер головного мозга за относительно адекватные сроки, и наваять это грёбанное приложение.

Может возникнуть вполне ожидаемый вопрос, зачем именно Web-приложение, раз можно на том же самом C++/Qt наваять? А лишь в том, чтобы управлять этим безобразием компом, который подключен к локалке (как и железка) и у которого есть лишь браузер.

S9 ()
Ответ на: комментарий от S9

Да знаю я чем у нас в Саратове железячники занимаются, не секрет это для меня.

Общем понятно, тебе отладочный стенд нужен через web. Мой совет - бери Python и не парься. Напиши на C либу для общения с железкой, подключи её в Python и дёргай нужные функции. На Python ты научишься писать за неделю, ну две максимум.

Norgat ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.