Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Управление устройством из WEB-браузера
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
skyled
На основе WIZ200WEB хочу иметь доступ к управлению устройством посредством WEB-браузера, в т.ч. с мобильного. В ту платку нужно загрузить rom-файл. Программа для его конвертации есть. Чтобы с ее помощью получить rom-файл нужно написать саму web-страничку. Вот теперь и возник главный вопрос как и в чем можно написать эту страничку? А как сделать так чтобы я на страничке ткнул в надпись, а плата отправила по USART нужную последовательность? Что можно почитать чтобы понять идею? Спасибо.
Нажмите для просмотра прикрепленного файла
mempfis_
Вам нужно на запросы браузера отправлять web-странички.
Например mozilla при попытку связи отправляет get-запрос

Код
GET / HTTP/1.1
User-Agent: Opera/9.62 (Windows NT 6.1; U; ru) Presto/2.1.1
Host: 192.168.0.1
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: uk-UA,uk;q=0.9,en;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Connection: Keep-Alive


Вы можете вернуть ей web-страницу - напр. я возвращаю примитивную страницу ввода пароля (можете набрать её в блокноте, сменить расширение на html и открыть браузером)

Код
<html>
<body>
<form action=http://192.168.0.1/ method=post>
Password<br>
<input type=text name=ps size="6" maxlength="6"/><br>
<input type=submit value=SUBMIT>
</form>
</body>
</form>
</form>


Нажимаете на кнопку SUBMIT браузер методом post отправляет то что было введено в поле ввода.
А там уже можете проверить пароль, вернуть другие страницы с другими полями, гипрессылками, надписями и т.д.
Почитайте о тегаx html - особенно о html, body, input, br. В opera 10.x можно просматривать и редактировать коды web-страниц.
skyled
Мне пока совсем не понятно как установить взаимосвязь между нажатием кнопки на страничке и конкретным действием МК на плате. Даже идеи не представляю пока.
AlexandrY
Цитата(skyled @ Apr 12 2011, 11:42) *
На основе WIZ200WEB хочу иметь доступ к управлению устройством посредством WEB-браузера, в т.ч. с мобильного. В ту платку нужно загрузить rom-файл. Программа для его конвертации есть. Чтобы с ее помощью получить rom-файл нужно написать саму web-страничку. Вот теперь и возник главный вопрос как и в чем можно написать эту страничку? А как сделать так чтобы я на страничке ткнул в надпись, а плата отправила по USART нужную последовательность? Что можно почитать чтобы понять идею? Спасибо.
Нажмите для просмотра прикрепленного файла


Ну из мануала ссылку на который вы дали действительно не понять как они предлагают управлять чем-то.
Реализовали ли они это способом Get или способом Post или у них вообще поддержка CGI не организована.
Не удивлюсь если китайцы в своей демке сделали какой-нить примитив который кроме как для зажигания светодиодов ни для чего не годится.
Видно только, что отдельного модуля поддержки CGI у них в сорсах нет, а значит придется многое дописывать самим юзерам по обработке HTTP запросов
skyled
Цитата(AlexandrY @ Apr 12 2011, 12:39) *
Ну из мануала ссылку на который вы дали действительно не понять как они предлагают управлять чем-то.
Реализовали ли они это способом Get или способом Post или у них вообще поддержка CGI не организована.
Не удивлюсь если китайцы в своей демке сделали какой-нить примитив который кроме как для зажигания светодиодов ни для чего не годится.
Видно только, что отдельного модуля поддержки CGI у них в сорсах нет, а значит придется многое дописывать самим юзерам по обработке HTTP запросов

Хоть они и корейцы, но действительно ничего мне пока не ясно. Может порекомендуете что-то подобное с большей степенью ясности? Насколько сложно будет что-то дописывать? Они для примера дают вот такой проект для mega128, что на борту. Может прояснит что. Я совершеннейший новичок в этих делах (ethernet-tcp/ip). Нужны подсказки и советы.Нажмите для просмотра прикрепленного файла
MrYuran
Цитата(skyled @ Apr 12 2011, 13:45) *
Хоть они и корейцы, но действительно ничего мне пока не ясно. Может порекомендуете что-то подобное с большей степенью ясности? Насколько сложно будет что-то дописывать? Они для примера дают вот такой проект для mega128, что на борту. Может прояснит что. Я совершеннейший новичок в этих делах (ethernet-tcp/ip). Нужны подсказки и советы.Нажмите для просмотра прикрепленного файла

Написали уже, с чего начать.
С изучения основ HTTP и HTML.
написать в блокноте
<HTML>
<HEAD>
<TITLE>Заголовок хелловорда</TITLE>
</HEAD>
<BODY>
Хелловорд
</BODY>
</HTML>
, поиграться немного. Это нулевой уровень.
Дальше разбираться с кишками парсера HTTP из вашего примера, искать похожие буквы.
skyled
Цитата(MrYuran @ Apr 12 2011, 13:04) *
Написали уже, с чего начать.
С изучения основ HTTP и HTML.
написать в блокноте
<HTML>
<HEAD>
<TITLE>Заголовок хелловорда</TITLE>
</HEAD>
<BODY>
Хелловорд
</BODY>
</HTML>
, поиграться немного. Это нулевой уровень.
Дальше разбираться с кишками парсера HTTP из вашего примера, искать похожие буквы.

А где кишки искать? Ну положим я разберусь с языком HTML - HTTP. Ну напишу в блокноте и все получится. Что толку если сама идея взаимосвязи HTTP - Mega128 мне пока непонятна. Да и из-за преобразования в rom-файл наверняка все усложнится.
MrYuran
Цитата(skyled @ Apr 12 2011, 14:08) *
А где кишки искать? Ну положим я разберусь с языком HTML - HTTP. Ну напишу в блокноте и все получится. Что толку если сама идея взаимосвязи HTTP - Mega128 мне пока непонятна.

А идея в том, что в ваше устройство приходит 2 типа запросов - Get или Post.
По какому-то из существующих каналов связи (UART/Eth/Etc).
Из большого количества буков вы выковыриваете небольшой кусочек информации - что именно от вас хочет пользователь.
И генерируете для него ответную страницу, примерно как я написал, но посложнее, конечно.
В простейшем случае можно заготовить несколько шаблонов ответов, а в нужные "клеточки" вписывать нужные значения.
Но для начала всё-таки поиграйтесь со статическими страничками на компе, или на narod.ru попробуйте что-нибудь сваять.
Всёж немного понятнее станет.
skyled
Меня на первое время вполне бы устроило только знать куда нажал пользователь на страничке. Что бы такое почитать чтобы понять как и откуда выковыривается то, что мне нужно?
MrYuran
Цитата(skyled @ Apr 12 2011, 14:35) *
Меня на первое время вполне бы устроило только знать куда нажал пользователь на страничке. Что бы такое почитать чтобы понять как и откуда выковыривается то, что мне нужно?

http://ru.wikipedia.org/wiki/HTTP
Обычно в этом случае отправляют запрос Post
AlexandrY
Цитата(skyled @ Apr 12 2011, 12:45) *
Хоть они и корейцы, но действительно ничего мне пока не ясно. Может порекомендуете что-то подобное с большей степенью ясности? Насколько сложно будет что-то дописывать? Они для примера дают вот такой проект для mega128, что на борту. Может прояснит что. Я совершеннейший новичок в этих делах (ethernet-tcp/ip). Нужны подсказки и советы.Нажмите для просмотра прикрепленного файла


Начинайте анализ со строки 397 в файле main.c
С этого места они начинают просматривать информацию которая пришла с вашего броузера методом POST.

Из всех файлов в вашем примере метод Post имеет только страница ipconfig.htm.

Откройте ее и увидите описание формы начинающееся со строки <form action="NETCONFIG.CGI" name="form1" method="post"> (лучше это делать в среде Dreamweaver )
Ключевое слово здесь: method="post"
Далее ниже будет строка <input type="submit" value="Network Config" action="NETCONF.CGI">
Это описание самой кнопки. Здесь важна фраза action="NETCONF.CGI"

Так вот файл main.c ищет в HTTP запросе надпись типа NETCONF.CGI и находит ее в строке 458 с кодом if(strstr(name,"NETCONFIG.CGI"))
после чего начинает парсить параметры идущие в HTTP запросе вслед за NETCONF.CGI в функции cgi_ipconfig
Какие они там будет зависеть от содержания формы с method="post"
Имена параметров кодируются строками вида <input name="dns" ...
И величины строками вида value="$DNS_SERVER_IP$">
Запись $DNS_SERVER_IP$ означает не саму величину, а шаблон на место которого ваш WEB сервер вставит реальное значение когда будет выдавать страницу в ваш броузер. Эта технология называется SSI (server side includes). (А обсуждаемая технология называется CGI)

Итого в процедуре cgi_ipconfig вы могли бы при обнаружении интересующего параметра послать его величину в UART.
Само название параметра и его значение должны быть написаны в форме HTML с кнопкой на вашей странице.

Более детально поймете когда снифером посмотрите пакеты отправляемые и принимаемые броузером по протоколу HТTP.

Мутными здесь остаются моменты насколько объемными могут быть POST запросы и откуда прога будет брать для них память.
Также при синхронном стиле выполнения процедур отправка в порт будет тормозить прикладной стек.
Ну и неясно как разруливать аутентификацию и доступ нескольких пользователей одновременно.
skyled
Цитата
Мутными здесь остаются моменты насколько объемными могут быть POST запросы и откуда прога будет брать для них память.
Также при синхронном стиле выполнения процедур отправка в порт будет тормозить прикладной стек.
Ну и неясно как разруливать аутентификацию и доступ нескольких пользователей одновременно.
Пользователь может быть только один. Приложение будет индивидуального использования. Ресурсы - на плате есть внешняя память (ОЗУ и флеш). На счет тормозов прикладного стека так я понимаю W5300, что на плате, должна разруливать это дело. Весь ethernet на ней держится (как я понимаю, а иначе зачем она там).
P.S. Спасибо за подсказки. Пытаюсь разобраться, хотя пока мало что понятно. Иерархию взаимоотношений в программе пока не вижу толком.
Слесарь
Я управляю устройствами по WEB с помощью PIC18F67J60. Этот контроллер уже содержит модуль Ethernet.
Микрочип предлагает библиотеку TCP/IP Stack, в библионеке есть все необходимое для работы с HTTP протоколом. Так же есть, для удобства виндовс прога конвертор заранее заготовленных HTML страничек с ссылками эдитами, кнопками и картинками, в специальный С код для подключения к проекту на языке С, к другим С файлам программы контроллера.
uriy
думаю для начала вам стоит установить web сервер под винду или линукс, на вашу рабочую машину. Чтобы понять как это все работает. Далее начать изучать html, потом навалять свой cgi скрипт, а потом javascript и ajax.
Слесарь
Цитата(uriy @ Apr 12 2011, 16:19) *
думаю для начала вам стоит установить web сервер под винду или линукс, на вашу рабочую машину. Чтобы понять как это все работает. Далее начать изучать html, потом навалять свой cgi скрипт, а потом javascript и ajax.

А зачем CGI и яваскрипт ajax ?

Ведь для управления устройством по WEB достаточно поверхностного знания HTML и боле-менее HTTP, совсем чуть-чуть TCP/IP.
skyled
Цитата(Слесарь @ Apr 12 2011, 15:10) *
Я управляю устройствами по WEB с помощью PIC18F67J60. Этот контроллер уже содержит модуль Ethernet.
Микрочип предлагает библиотеку TCP/IP Stack, в библионеке есть все необходимое для работы с HTTP протоколом. Так же есть, для удобства виндовс прога конвертор заранее заготовленных HTML страничек с ссылками эдитами, кнопками и картинками, в специальный С код для подключения к проекту на языке С, к другим С файлам программы контроллера.

Т.е. Вы хотите сказать, что можете управлять устройством посредством любого браузера, в т.ч. и с iPhon?
AlexandrY
Цитата(skyled @ Apr 12 2011, 14:27) *
Пользователь может быть только один. Приложение будет индивидуального использования. Ресурсы - на плате есть внешняя память (ОЗУ и флеш). На счет тормозов прикладного стека так я понимаю W5300, что на плате, должна разруливать это дело. Весь ethernet на ней держится (как я понимаю, а иначе зачем она там).
P.S. Спасибо за подсказки. Пытаюсь разобраться, хотя пока мало что понятно. Иерархию взаимоотношений в программе пока не вижу толком.


Гарантровать одного пользователя можно только в изолированной интрасети да и то весьма условно.
Ибо первый сеанс пользователя может по какой-то причине тормознуть и юзер с успехом начнет новую сессию, завалив все ваши надежды на однопользовательский режим. Тем боле что броузеры качают все таблицы css и прочие инклудные файлы и рисунки все скопом.
Чуть усложните страницы и могут появиться разорванные сессии и проч. неприятности.

W5300 делает только TCP протокол и только на 8-мь соединений. А прикладные уровни это WEB, FTP, MAIL и т.д. и похоже они там сделаны кое -как.
Поэтому рекомендации поучится на настольных серверах малополезны , поскольку ваши траблы будут уникальны.

Тут Слесарь вам дело говорит, стек Microchip-а гибче и удобней. (как для начинающих wink.gif )
uriy
Цитата(Слесарь @ Apr 12 2011, 16:35) *
А зачем CGI и яваскрипт ajax ?
Ведь для управления устройством по WEB достаточно поверхностного знания HTML и боле-менее HTTP, совсем чуть-чуть TCP/IP.

Без javascript не проверить валидность введенных в формы данных.
Например, у меня вводится новый ip, mac адрес и др. настройки сети, обновляется прошивка через браузер. А если юзер загонит вместо прошивки pdf файл например, что тогда??? Это же надо все проверять.

А используя ajax все выглядит куда приятней, не надо страницу перезагружать целиком. Удобно для отображения состояния датчиков.

Может быть мне кто-посоветует простенький web сервер с авторизацией под linux.
Щас использую boa для него есть патч для авторизации. Патчится без проблем, но сервер после этого работать не хочет.
MrYuran
Цитата(uriy @ Apr 12 2011, 17:25) *
А используя ajax все выглядит куда приятней, не надо страницу перезагружать целиком. Удобно для отображения состояния датчиков.

Ajax кагбе автоматом подразумевает php на сервере. Так?
На AVR не катит однозначно sm.gif
Да и может простенькую страницу целиком проще перезагрузить. Особенно, если разбить её на фреймы и подгружать по месту нужный.
skyled
Цитата
Тут Слесарь вам дело говорит, стек Microchip-а гибче и удобней. (как для начинающих )
Ну уговорили. Тогда уж может и носом ткнет во все нужные библиотеки, даташиты и т.п. Я с микрочипом доселе постольку-поскольку и на таком глубинном уровне никогда не бывал. Буду признателен. Спасибо.
Слесарь
Цитата(skyled @ Apr 12 2011, 16:47) *
Т.е. Вы хотите сказать, что можете управлять устройством посредством любого браузера, в т.ч. и с iPhon?

Без разницы. Скорее всего, смогу управлять и из командной строки

Цитата(uriy @ Apr 12 2011, 17:25) *
Без javascript не проверить валидность введенных в формы данных.
Например, у меня вводится новый ip, mac адрес и др. настройки сети, обновляется прошивка через браузер. А если юзер загонит вместо прошивки pdf файл например, что тогда??? Это же надо все проверять.

Не вижу проблем. В случае неправильного ввода контроллер сгенерирует соответствующую страничку пользователю, с сообщением в чем он ошибся.

Цитата(uriy @ Apr 12 2011, 17:25) *
А используя ajax все выглядит куда приятней, не надо страницу перезагружать целиком. Удобно для отображения состояния датчиков.

Мне без разницы что отвечать и принимать по сети. Дай мне описание ajax я тебе напишу под него обработчик на стороне WEB сервера.

Цитата(skyled @ Apr 12 2011, 17:56) *
Ну уговорили. Тогда уж может и носом ткнет во все нужные библиотеки, даташиты и т.п. Я с микрочипом доселе постольку-поскольку и на таком глубинном уровне никогда не бывал. Буду признателен. Спасибо.

Нет уж, советую тебе самому проявить инциативу. Некоторые полезные сведения есть на моем сайте в разделе Самоделки -> Интернет радиоприемники

Припоминаю, то что сейчас называется AJAX я делал лет пять тому назад, только у меня это называлось - Удаленный пользовательский интерфейс. Разработчик использующий мой метод, мог писать полноценные приложения на C++. Пользовательский интерфейс этих приложений открывался в любом браузере.
ukpyr
стоит посмотреть на W7100, думаю уделает ПИКа как щенка, все-таки 100МБит, памяти намного больше, многие фичи реализованы аппаратно.
Слесарь
Цитата(ukpyr @ Apr 12 2011, 18:59) *
стоит посмотреть на W7100, думаю уделает ПИКа как щенка, все-таки 100МБит, памяти намного больше, многие фичи реализованы аппаратно.

А зачем для управления устройством 100 Мбит? Какие такие фичи которые не реализоване в PIC ?
uriy
Цитата
Ajax кагбе автоматом подразумевает php на сервере. Так?
На AVR не катит однозначно
php совсем не обязателен. У меня cgi скрипы на си и shell.
AlexandrY
Цитата(uriy @ Apr 13 2011, 07:54) *
php совсем не обязателен. У меня cgi скрипы на си и shell.


Я бы сказал и AJAX не совсем то. Реально с простыми контроллерами использовать AJAH
и то не в чистом виде кодить HTML, а использовать какой-нить Microsoft Expression Blend на базе технологии SilverLight.
PHP тоже по сути как скрипт на микроконтроллерах теряет смысл.
Идея PHP была открыть для процессов на WEB сервере больше возможностей базовой операционки.
Но на микроконтроллерах с RTOS или без нее доступны абсолютно все функции базового фреймворка используя C-и.

Хотя конечно, кто юзает линукс на микроконтроллере тот опять попадает в плен ограничений юзерспейса и не получает ни PHP нормального ни полного доступа на C-и.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.