arduino + openwrt. вывод serial на web page.

d00m
Offline
Зарегистрирован: 21.02.2013

всем привет.

нужен совет как красиво и грамотно реализовать ввод-вывод данных на вебстраничку, из Arduino которая подключена через Serial порт к роутеру с OpenWRT.

Итак есть МК arduino+FTDI USB адаптер.

и есть роутер MR3020 с прошитой OpenWRT CHAOS CALMER (15.05.1, r48532). на нем есть веб сервер греезв и Luci.

MK через USB адаптер подключен к роутеру. OpenWRT видит устройство /dev/ttyUSB0 и с помощью разных консольных утилит я могу работать с этим Serial портом - читать и писать.

Но мне нужно вынести эти манипуляции на веб страничку. Нужно передавать на arduino команду в виде цифры и после этого получать ответ - в виде нескольких строк текста. Все это хочется делать на какойто веб странице.

Вопрос - на чем лучше написать эту веб страницу? какието модули и технологии лучше использовать сейчас?

буду очень рад какимто конкретным примерам.

на данный момент читаю про Lua - есть поддержка у OpenWRT прямо из коробки. но не пойму пока как делать печать данных из Serial в реальном времени - выводить то, что выходит из Serial построчно, на веб страницу..

 

 

sadman41
Offline
Зарегистрирован: 19.10.2016

греезв - это что?

d00m
Offline
Зарегистрирован: 21.02.2013

проклятье.. punto в последнее время чтото шалит - на openwrt есть веб сервере из коробки - uhttpd

  985 root      1596 S    /usr/sbin/uhttpd -f -h /www -r OpenWrt -x /cgi-bin -u /ubus -t 60 -T 30 -k 20 -A 1 -n 3 -N 100 -R -p 0.0.0.0:80 -p [::]:80
 
 
 

 

sadman41
Offline
Зарегистрирован: 19.10.2016
d00m
Offline
Зарегистрирован: 21.02.2013

спасибо. php конечно можно запустить на openwrt, но он тяжеловат для роутера..

я все пытаюсь разобраться как на Lua это сделать.. 

sadman41
Offline
Зарегистрирован: 19.10.2016

Любой интерпретатор тяжел на такой системе. Быстрым может быть только скомпилированный cgi-модуль. Но наврядли вы собираетесь овладевать искусством кросс-компиляции и opkg-кунфу.

Olej
Olej аватар
Offline
Зарегистрирован: 05.03.2018

d00m пишет:

Вопрос - на чем лучше написать эту веб страницу? какието модули и технологии лучше использовать сейчас?

Проще всего и быстрее (по времени реализации) будет на Python.

Кроме того, Python для Linux (OpenWrt) - это очень органично, и, скорее всего, он там у вас уже установлен (потому что множество системных скриптов Linux написано на Python ... но всё это очень зависит от установленной версии).

 

 

 

Olej
Olej аватар
Offline
Зарегистрирован: 05.03.2018

d00m пишет:

я все пытаюсь разобраться как на Lua это сделать.. 

Lua, вообще то говоря, не для этого.

 

DenSyo
Offline
Зарегистрирован: 13.01.2017

d00m пишет:
но не пойму пока как делать печать данных из Serial в реальном времени - выводить то, что выходит из Serial построчно, на веб страницу..

направить сообщения ардуины в файл, cat /dev/ttyUSB0 > myserial.log, создать скрипт периодически чистящий этот лог и проверяющий/перезапускающий наш процесс cat - это важно, линь все-таки. и искать веб-примеры по отображению динамически изменяемого файла, с этим будет проще чем с сериалом.

d00m
Offline
Зарегистрирован: 21.02.2013

Olej пишет:

d00m пишет:

Вопрос - на чем лучше написать эту веб страницу? какието модули и технологии лучше использовать сейчас?

Проще всего и быстрее (по времени реализации) будет на Python.

Кроме того, Python для Linux (OpenWrt) - это очень органично, и, скорее всего, он там у вас уже установлен (потому что множество системных скриптов Linux написано на Python ... но всё это очень зависит от установленной версии).

 

спасибо, но питон надо дополнительно устанавливать, а Lua как раз уже есть из коробки в прошивке.

но установить не проблема - вопрос как на страницу выводить.. 

 
d00m
Offline
Зарегистрирован: 21.02.2013

DenSyo пишет:

d00m пишет:
но не пойму пока как делать печать данных из Serial в реальном времени - выводить то, что выходит из Serial построчно, на веб страницу..

направить сообщения ардуины в файл, cat /dev/ttyUSB0 > myserial.log, создать скрипт периодически чистящий этот лог и проверяющий/перезапускающий наш процесс cat - это важно, линь все-таки. и искать веб-примеры по отображению динамически изменяемого файла, с этим будет проще чем с сериалом.

 

дело в том, что ардуина начинает выводить в Serial только после получения команды на тот же Serial.

то есть мне надо реализовать некую интерактивность на веб странице - вводить команду (просто цифра) и после этого считать результат.

Olej
Olej аватар
Offline
Зарегистрирован: 05.03.2018

d00m пишет:

нужен совет как красиво и грамотно реализовать ввод-вывод данных на вебстраничку, из Arduino которая подключена через Serial порт к роутеру с OpenWRT.

А вы твёрдо уверены, что вам нужен вывод данных именно в WEB-страницу ... или просто хотелось бы внятного вывода куда-то в графическое (GUI) приложение? Может и всего то?

 

d00m
Offline
Зарегистрирован: 21.02.2013

Olej пишет:

d00m пишет:

нужен совет как красиво и грамотно реализовать ввод-вывод данных на вебстраничку, из Arduino которая подключена через Serial порт к роутеру с OpenWRT.

А вы твёрдо уверены, что вам нужен вывод данных именно в WEB-страницу ... или просто хотелось бы внятного вывода куда-то в графическое (GUI) приложение? Может и всего то?

у меня есть доступ к Web серверу на этом роутере в OpenWRT, к этому роутеру подключена arduino.

и я хотел бы видеть вывод ардуины на вебстранице - это самый простой и всегда доступный интерфейс. зачем еще писать какоето GUI приложение? браузер - наше все)

Olej
Olej аватар
Offline
Зарегистрирован: 05.03.2018

d00m пишет:

у меня есть доступ к Web серверу на этом роутере в OpenWRT, к этому роутеру подключена arduino.

и я хотел бы видеть вывод ардуины на вебстранице - это самый простой и всегда доступный интерфейс. зачем еще писать какоето GUI приложение? браузер - наше все)

А вам и не нужно "писать" никакого приложения - Processing

А X-протокол - сетевой, вы доступ по X можете расшарить из любой точки мира, но SSH протоколу, например:

$ ssh -X ...

Так что WEB - далеко не ваше всё ;-)

 

sadman41
Offline
Зарегистрирован: 19.10.2016

d00m пишет:

то есть мне надо реализовать некую интерактивность на веб странице - вводить команду (просто цифра) и после этого считать результат.

Так в чем затруднения-то собственно? Lua подключили к веб-серверу? С портом через него научились работать? Теперь делаете так, чтобы uhttpd при запросе страницы дергал скрипт, скрипт писал в Serial, получал пару чисел и формировал html-код, куда бы эти цифры вставлял. Потом выплевывал его в stdout.

a5021
Offline
Зарегистрирован: 07.07.2013

Типа, вот такого.

d00m
Offline
Зарегистрирован: 21.02.2013

a5021 пишет:

Типа, вот такого.

 

дада. я тоже нашел это и прочитал. только там cgi скрипт похоже просто печатает на страничку

а как прикрутить интерактивность? например с той же странички осуществлять ввод в Serial.

похоже тут нужен JS?

sadman41
Offline
Зарегистрирован: 19.10.2016

Все равно не понимаю вашей проблемы. Что такое "интерактивность" - по кнопке моргнуть D13 или что-то иное?

d00m
Offline
Зарегистрирован: 21.02.2013

sadman41 пишет:

Все равно не понимаю вашей проблемы. Что такое "интерактивность" - по кнопке моргнуть D13 или что-то иное?

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

arduino слушает Serial и получив эту цифру, делает вычисление и выводит результат тоже в Serial. 

он должен отобразиться на этой же веб страничке. 

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну так вот. Когда вы на страничке вводите в <input type="text" name="some_number"> и затем делаете  submit, то вся эта инфа через POST/GET-запрос засылается на httpd, а httpd должен ее сунуть в stdout скрипту, которого он дергает в качестве cgi. Таким образом, полагаю, что вам нужно в вашем LUA сделать так: https://stackoverflow.com/questions/34346499/how-to-read-post-from-lua-on-openwrt-uhttpd

Потом всё это дело пропарсили, переменную вычленили, цифирь с нее взяли, заставили Lua сунуть ея в /dev/ttyXX, послушали ответ, сгенерили страничку, сунули в stdout.

Я так примерно этот конвейер себе представляю. Однако, если бы вы завели php (хотя бы на период отладки) - было бы проще. Там это всё давно отточено и куски кода раскиданы по всему интернету.