• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Разработка ‘библиотеки’ малого webсервера на esp8266.

aloika

Active member
mcmega, в исходнике менять надо, конечно.
Тут зависит от того, что вы хотите сделать. Если хотите строку символов передать в UART - тут тогда думать надо, как это лучше и удобнее сделать. Тут будут вопросы с кодировкой (наверное) и со всякими непечатаемыми символами. Можете вот здесь посмотреть: http://esp8266.ru/forum/threads/proshivka-tcp2uart-perexodnika-s-nastrojkoj-po-web.146/page-4

В моем случае проще - мне надо передать не строку символов, а команду. Формат команды заранее известен. Например, вот:

Код:
//===============================================================================
// set_enable(enable) включение/отключение устройства качания
// Формат команды:
//
// A5                                            0
// B2                                            1
// enable - включено/выключено                    2
// checksum 1..2                                3
//-------------------------------------------------------------------------------
То есть я передаю что-то типа A5 B2 01 B3 (это hex-коды символов, байты по сути, всего 4 байта).

Т.е. если вы напишите newAJAXCommand('cgi.bin?swbd_enable=1') то в UART уйдет A5 B2 01 B3, если напишите newAJAXCommand('cgi.bin?swbd_enable=5') то уйдет A5 B2 05 B7 и т.д.
 

mcmega

Member
aloika, Так мне нужно тоже команду передать. Она состоит их 4 Байт и имеет такой вид @1A0, меняться будут только 3 и 4 символы. А кнопок нужно 14 штук, поэтому я и смотрел на что то универсальное, чтоб прямо в Web передаваемые символы вписать.
pvvx, aloika
подскажите, а как это сделано в оригинальной сборке от pvvx? (я помню, что в демонстрации было что то такое, но сейчас не могу найти странички samples)
 
Последнее редактирование:

aloika

Active member
такой вид @1A0, меняться будут только 3 и 4 символы
т.е. вам по сути надо передать из веб-странички два символа. У pvvx как раз параметр (значение переменной) - 32 битное, т.е. аж 4 символа (байта). Можно написать универсальную функцию... Да собственно, она и так написана - в моем примере set_setting_time(val) - как раз два байта.
 

mcmega

Member
pvvx, я так понял в Web прописаны коды символов для вывода
~sys_ram0x60000000=0x40~
~sys_ram0x60000000=0x31~
~sys_ram0x60000000=0x41~
~sys_ram0x60000000=0x30~
~sys_ram0x60000000=0x30~
~sys_ram0x60000000=0x30~
~sys_ram0x60000000=0x0d~
~sys_ram0x60000000=0x0a~
А как привязать это всё к кнопке, чтоб при нажатии выдавался этот массив?
 

aloika

Active member
А как привязать это всё к кнопке, чтоб при нажатии выдавался этот массив?
Код:
function onON() {
          newAJAXCommand('cgi.bin?sys_ram0x60000000=0x40');
          newAJAXCommand('cgi.bin?sys_ram0x60000000=0x31');
          newAJAXCommand('cgi.bin?sys_ram0x60000000=0x41');
.......
          newAJAXCommand('cgi.bin?sys_ram0x60000000=0x40');
          }
Наверное, как-то так. Но как-то это все некрасиво. А потом возникнет вопрос - как наоборот байты из UARTа принимать... Проще все же, мне кажется, сделать как в моем примере.
 

mcmega

Member
В Web сделал кнопку:
<input type="button" onclick="onON()" value="Кнопка 1"/>

В скрипте:
function onON()
{
newAJAXCommand('cgi.bin?sys_ram0x60000000=0x40');
newAJAXCommand('cgi.bin?sys_ram0x60000000=0x31');
newAJAXCommand('cgi.bin?sys_ram0x60000000=0x41');
newAJAXCommand('cgi.bin?sys_ram0x60000000=0x30');
newAJAXCommand('cgi.bin?sys_ram0x60000000=0x30');
newAJAXCommand('cgi.bin?sys_ram0x60000000=0x30');
newAJAXCommand('cgi.bin?sys_ram0x60000000=0x0d');
newAJAXCommand('cgi.bin?sys_ram0x60000000=0x0a');
}
Выскакивает всплывающее окно в котором написано что неверная команда, соединение с девайсом потеряно.
 

mcmega

Member
mcmega, Вы на Java скрипте это прописали в HTML?
ну да, в htm
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Control</title>
<link rel="stylesheet" href="style.css">
<script src="/site.js"></script>
<script src="/scripts.js"></script>
</head>
<body>
~inc:menu.inc~
<div class="content">
<input type="button" onclick="onON()" value="Кнопка 1"/>
</div>
~inc:footer.inc~

<script type="text/javascript">
function onON()
{
newAJAXCommand('cgi.bin?sys_ram0x60000000=0x40');
newAJAXCommand('cgi.bin?sys_ram0x60000000=0x31');
newAJAXCommand('cgi.bin?sys_ram0x60000000=0x41');
newAJAXCommand('cgi.bin?sys_ram0x60000000=0x30');
newAJAXCommand('cgi.bin?sys_ram0x60000000=0x30');
newAJAXCommand('cgi.bin?sys_ram0x60000000=0x30');
newAJAXCommand('cgi.bin?sys_ram0x60000000=0x0d');
newAJAXCommand('cgi.bin?sys_ram0x60000000=0x0a');
}
</script>
</body>
</html>
 
mcmega,Вы хорошо все сделали?Дело в том что,я хоть и не очень спец по Java,но что то у вас не хватает.И не понятно что Вы хотите сделать с помощью кнопки))
<input type="button" onclick="onON()" value="Кнопка 1"/>
по событию вызывать onclick="onON()",я правильно понимаю?
 

mcmega

Member
Да, при нажатии кнопки хочу вызвать onON(), а он в свою очередь должен отправить в UART символы
 
Последнее редактирование:

pvvx

Активный участник сообщества
Да, при нажатии кнопки хочу вызвать onON(), а он в свою очередь должен отправить в UART символы
newAJAXCommand('cgi.bin?sys_ram0x60000000=0x40'&sys_ram0x60000000=0x31&sys_ram0x60000000=0x41&sys_ram0x60000000=0x30&sys_ram0x60000000=0x30sys_ram0x60000000=0x30&sys_ram0x60000000=0x0d&sys_ram0x60000000=0x0a'); :):rolleyes:
Пишется прямо в FiFo UART посимвольно :)
Можно и так поиздеваться uart_0_reg0=0x40&uart_0_reg0=0x31....
Потом проверить занятость FIFO и другие регистры UART в исполняемом/вызываемом на Web скрипте java :
if((~uart_0_reg7~ >> 16) & 0xFF) > 126) то писать пока нельзя :)
Результат можно записать в память, а потом считать... :oops:
 
Последнее редактирование:

mcmega

Member
Странно, я написал:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Control</title>
<link rel="stylesheet" href="style.css">
<script src="/site.js"></script>
<script src="/scripts.js"></script>
</head>
<body>
~inc:menu.inc~
<div class="content">
<input type="button" onclick="Key1()" value="Кнопка 1"/>
</div>
~inc:footer.inc~

<script type="text/javascript">

function Key1()
{
newAJAXCommand('cgi.bin?sys_ram0x60000000=0x40&sys_ram0x60000000=0x31&sys_ram0x60000000=0x41&sys_ram0x60000000=0x30&sys_ram0x60000000=0x30sys_ram0x60000000=0x30&sys_ram0x60000000=0x0d&sys_ram0x60000000=0x0a');
}
</script>
</body>
</html>
Всё равно при нажатии кнопки ошибка во всплывающем окне: Command Failed. Connection to device was lost.
 

mcmega

Member
Такого файла нет. web.cgi - запрос есть. В порт выводит "@1A00"
Да, действительно. Поменял на web.cgi и всё заработало. Спасибо :):)
Скажите, а можно ли сделать так, чтобы превратить WiFi модуль в переходник WiFi-UART с управлением потоком XON XOFF? Сделать так сказать WiFi программатор, чтоб прошивку МК можно было бы менять по воздуху?:rolleyes:
 

pvvx

Активный участник сообщества
Да, действительно. Поменял на web.cgi и всё заработало. Спасибо :):)
Скажите, а можно ли сделать так, чтобы превратить WiFi модуль в переходник WiFi-UART с управлением потоком XON XOFF? Сделать так сказать WiFi программатор, чтоб прошивку МК можно было бы менять по воздуху?:rolleyes:
Практически не встречал устройств работающих с XON XOFF. Наверно они вымерли как мамонты...
Обновление прошивки самого модуля по WiFi не предусмотрено, т.к. надо хранить полный дубль и иметь спец внешний сервер, а полный апгрейд бинарника прошивки не лезет в малую flash без удаления web-диска. На модуле с большой flash можно очень просто добавить обновление из файла web-диска.
Внешний МК, подключенный к модулю, может обновляться, если использует простое RS обновление через TCP2UART. Если требуется спец. протокол - дописывайте сами.
Да и тут в основном библитека-свалка, а не готовый проект. В случае готового проекта тем более не требуется обновлений :)
 

mcmega

Member
Практически не встречал устройств работающих с XON XOFF. Наверно они вымерли как мамонты...
Обновление прошивки самого модуля по WiFi не предусмотрено, т.к. надо хранить полный дубль и иметь спец внешний сервер, а полный апгрейд бинарника прошивки не лезет в малую flash без удаления web-диска. На модуле с большой flash можно очень просто добавить обновление из файла web-диска.
Внешний МК, подключенный к модулю, может обновляться, если использует простое RS обновление через TCP2UART. Если требуется спец. протокол - дописывайте сами.
Да и тут в основном библитека-свалка, а не готовый проект. В случае готового проекта тем более не требуется обновлений :)
Вы немного меня не поняли. Я имел ввиду обновление прошивки именно контроллера. Определиться с загрузчиком для МК (можно как в ардуино, или chip45boot2) и сделать такой вот беспроводной программатор. Для последнего например используется XON XOFF, потому что скорость программирования не высокая.
 

pvvx

Активный участник сообщества
Вы немного меня не поняли. Я имел ввиду обновление прошивки именно контроллера. Определиться с загрузчиком для МК (можно как в ардуино, или chip45boot2) и сделать такой вот беспроводной программатор. Для последнего например используется XON XOFF, потому что скорость программирования не высокая.
Дубль: "Внешний МК, подключенный к модулю, может обновляться, если использует простое RS обновление через TCP2UART. Если требуется спец. протокол - дописывайте сами."
Прежде всего это связано с тем, что при передаче имеется задержка между ответом-приемом-реакцией и она доходит до 5 сек, если канал инета идет через GSM.
Так-же есть задержка на ожидание накопления пакета передачи. Ведь передача по инет пакетная, а не посимвольная :)
В итоге все время-зависимые протоколы надо менять - надстраивать что-то выше уровнем и производить ответную реакцию на месте, в модуле.
АрДурино у меня нет (и не будет) и проверять неначем. :)
 
Последнее редактирование:
Сверху Снизу