• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 страницы, а этим лень заниматься - как-бы "не моё".
 
Сверху Снизу