• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Esp8266 ajax webserver

MSW

New member
По мотивам: http://sompi.me/esp8266-webserver-with-ajax-gpio-toggle/

набросал своё безобразие, сделал 2 кнопки - вкл и выкл для управления GPIO4, относительно больших размеров что бы легко попасть по ним со смартфона :)
init.lua
Код:
gpio.mode(4, gpio.OUTPUT);
gpio.write(4,gpio.LOW);
gpio2_state=0;
wifi.setmode(wifi.STATION);
wifi.sta.config("HomeWIFI","");
wifi.sta.autoconnect(1);

tmr.alarm(0, 1000, 1, function()
    ip = wifi.sta.getip();
    if ip~=nil then
        print(ip);
        tmr.stop(0);
        httpserver();
    else
        print("no connect");
    end
end)

sendFileContents = function(conn, filename)
    if file.open(filename, "r") then
        --conn:send(responseHeader("200 OK","text/html"));
        repeat
        local line=file.readline();
        if line then
            conn:send(line);
        end
        until not line
        file.close();
    else
        conn:send(responseHeader("404 Not Found","text/html"));
        conn:send("Page not found");
    end
end
responseHeader = function(code, type)
  return "HTTP/1.1 " .. code .. "\r\nConnection: close\r\nServer: nunu-Luaweb\r\nContent-Type: " .. type .. "\r\n\r\n"; 
end
httpserver = function ()
    srv=net.createServer(net.TCP);
    srv:listen(80, function(conn)
        conn:on("receive", function(conn,request)
            print(request);
            conn:send(responseHeader("200 OK", "text/html"));
            if string.find(request,"load=1") then
                gpio.write(4,gpio.HIGH);
            elseif string.find(request,"load=0") then
                gpio.write(4,gpio.LOW);
            else
                sendFileContents(conn, "page.htm");
                conn:send("ok");
            end
        end)
        conn:on("sent", function(conn)
            conn:close();
            conn = nil;
        end)
    end)
end
page.htm
HTML:
<html>
<head>
<title>Wi-Fi Button</title>
<style>
body {
    font-family: sans-serif;
    color: #555;
    background-color: #eee;
    width:100%;
}
</style>
<script language="javascript">
function loadXMLDoc(stat) {
    var xmlhttp;
    try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
          xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
          xmlhttp = false;
        }
    }
    if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
        xmlhttp = new XMLHttpRequest();
    }
    xmlhttp.open("GET","load=" + stat + ".pht",true);
    xmlhttp.send();
}
</script>
</head>
<body>
<button onclick="loadXMLDoc('1')" style="width:40%; height:150px; background-color:#0f0;">ON</button>
<button onclick="loadXMLDoc('0')" style="width:40%; height:150px; background-color:#f00;">OFF</button>
</body>
</html>
 

chpuh

New member
Странно, тогда не понятно, почему при открытии страницы пусто... даже не знаю куда копать.
Еще, обновляя страницу в браузере, в терминал выводится:
HTML:
GET / HTTP/1.1
Host: 192.168.208.103
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cache-Control: max-age=0
Через файл лист я вижу оба файла.
Может есть какие идеи, почему я не могу запустить его?

---
Тестовый скрипт nodemcu-firmware/lua_examples/webap_toggle_pin.lua где всё в 1 файле, нормально работает, а ваш, как и скрипт по мотивам, показывает чистую страницу.
 

pvvx

Активный участник сообщества
Без указания "Access-Control-Allow-Origin" данные в XML не будут доступны на другом хосте, т.е. будет невозможно отладить текст страниц на компе с запросами к данным XML модуля.
 

chpuh

New member
А вы не могли бы чуть более доступным языком объяснить, что вы написали? И кому?)
 

pvvx

Активный участник сообщества
А вы не могли бы чуть более доступным языком объяснить, что вы написали? И кому?)
Тут пытаются построить работу с ajax и получением-передачей информации с веб-сервера. Если информация запрашивается с другого хоста, то такие запросы эксплореры блокируют в целях безопасности. Остальное найдете в поиске. http://www.google.ru/?q=Access-Control-Allow-Origin :)
"И кому?" - тому кто понимает и хочет сделать это нормально. Но не тем у кого пока проблемы с загрузкой файлов в Lua...
 
Последнее редактирование:

pvvx

Активный участник сообщества
Тому, кто "понимает" писать нет необходимости. А тому, кто "не понимает", писать надо так, чтобы стало понятно, а не в стиле "kroivmhpeshbt".
Вы принуждаете учить дошкольников протоколы прикладного уровня (HTTP) и текущие стандарты эксплореров? Когда они вырастут, таких эксплореров уже не будет.
И во вторых – такое сокращенное повествование дает возможность, таким как вы, “выпучиться” и настряпать очередной блог “для чайников” :).
 
Последнее редактирование:

brig

New member
Вы принуждаете
Никого ни к чему не принуждаю.
Где вы тут обнаружили дошкольников?

Приписывать оппоненту не соответствующее действительности (чтобы затем обрушиваться с критикой на собственные вымыслы) - типичный прием демагога...
 
  • Like
Реакции: pvvx

pvvx

Активный участник сообщества
Никого ни к чему не принуждаю.

Где вы тут обнаружили дошкольников?

Приписывать оппоненту не соответствующее действительности (чтобы затем обрушиваться с критикой на собственные вымыслы) - типичный прием демагога...
На название темы взгляните. :D
 

mcmega

Member
Здрасти всем) вот и я стал счастливчиком поюзать эти модули))
У меня ESP-01.
Прошивку залил nodemcu_latest.bin (402 012). Поигрался с Web сервером.
Очень неудобно получается настраивать модуль со стороны UART, так как он подключен к МК (Mega168).
Я вижу решение примерно такое:
1. МК инициализирует WiFi модуль, включает режим работы как точка доступа без шифрования (открытая сеть) с заранее заданным IP по умолчанию
2. Запускает Web сервер
3. С помощью телефона или планшета (не важно) мы подключаемся к нашей точке доступа. Заходим в браузер и набираем адрес, скажем 192.168.100.1
4. Попадаем на страницу настроек, на которой отображены все доступные сети, выбираем нашу сеть, вводим пароль и соединяемся. В результате модуль должен стать как Station, получить адрес по DHCP. Как то так.
Может кто то уже занимался этим, поделитесь наработками
 

pvvx

Активный участник сообщества
Здрасти всем) вот и я стал счастливчиком поюзать эти модули))
У меня ESP-01.
Прошивку залил nodemcu_latest.bin (402 012). Поигрался с Web сервером.
Очень неудобно получается настраивать модуль со стороны UART, так как он подключен к МК (Mega168).
Я вижу решение примерно такое:
1. МК инициализирует WiFi модуль, включает режим работы как точка доступа без шифрования (открытая сеть) с заранее заданным IP по умолчанию
2. Запускает Web сервер
3. С помощью телефона или планшета (не важно) мы подключаемся к нашей точке доступа. Заходим в браузер и набираем адрес, скажем 192.168.100.1
4. Попадаем на страницу настроек, на которой отображены все доступные сети, выбираем нашу сеть, вводим пароль и соединяемся. В результате модуль должен стать как Station, получить адрес по DHCP. Как то так.
Может кто то уже занимался этим, поделитесь наработками
А зачем это? Все играют в Lua.
Web-сервер с описанными функциями и прочим давно есть, но он на СИ :(```. Там играть не во что - памяти много и никаких ограничений, по тому "не интересно".
 
Последнее редактирование:

mcmega

Member
Да, действительно крутая тема!!! Я даже залил с помощью ESP8266Flasher-а bin-ы по адресам, как в ридми (не получилось с FlashAll)
Очень там всё сложно, к тому же столько наворотов не нужно, перечитал 3 раза всё.... может есть какой то другой вариант или хотя бы с чего начать копаться в этом?
Стыдно задавать глупые вопросы там))
 
Последнее редактирование:

pvvx

Активный участник сообщества
Да, действительно крутая тема!!! Я даже залил с помощью ESP8266Flasher-а bin-ы по адресам, как в ридми (не получилось с FlashAll)
Очень там всё сложно, к тому же столько наворотов не нужно, перечитал 3 раза всё.... может есть какой то другой вариант или хотя бы с чего начать копаться в этом?
Стыдно задавать глупые вопросы там))
Ну то просто как примеры. Готового проекта пока нет - надо рисовать HTML страницы, а этим лень заниматься - как-бы "не моё".
 
Сверху Снизу