• Система автоматизации с открытым исходным кодом на базе 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.
Так-же есть задержка на ожидание накопления пакета передачи. Ведь передача по инет пакетная, а не посимвольная :)
В итоге все время-зависимые протоколы надо менять - надстраивать что-то выше уровнем и производить ответную реакцию на месте, в модуле.
АрДурино у меня нет (и не будет) и проверять неначем. :)
 
Последнее редактирование:
Сверху Снизу