Нет вывода клиенту с HTTP-сервера NodeMCU/LUA

Я не могу получить какие-либо выходные данные для беспроводного клиента с веб-сервера. точные сценарии (дословно) Я использование работает более изящно и стабильно, чем любые другие, которые я пробовал.

Как только 3 скрипта из приведенной выше ссылки загружены в NodeMCU Dev (ESP8266-12E) и я нажимаю сброс, скрипт выводит статус через последовательный порт, как и ожидалось:

Communication with MCU...
Got answer! AutoDetect firmware...

NodeMCU firmware detected.
=node.hStatus = 0 (Idle)
eap()
36936
> Status = 0 (Idle)
Status = 0 (Idle)
Status = 0 (Idle)

  { repeats for 30 seconds ... }

Status = 0 (Idle)
Status = 0 (Idle)
network not found, switching to AP mode
Starting up AP with SSID: Unconfigured-2c:36
GET received

Приведенный выше вывод показывает, что я подключаюсь к этой точке доступа с другим клиентом (получен GET), но на клиенте никогда нет вывода. Страница браузера пуста.

Функция, вызываемая для вывода HTML-страницы, находится в configServer.lua:

function sendPage(conn)
  conn:send('HTTP/1.1 200 OK\n\n')
  ...

Ни один из операторов conn:send() не генерирует вывод на клиенте. Я пробовал с несколькими клиентами и несколькими браузерами. Я также установил некоторые операторы print() в этой подпрограмме и вижу, что она выполняется полностью.

Кто-нибудь знает, какие типы проблем могут вызвать это или как его устранить? Кажется, что эти скрипты хорошо сработали для других, которые их пробовали.

Я запускаю NodeMCU, созданный с использованием http://nodemcu-build.com. Он основан на SDK v1.4.0. Кажется, работает хорошо:

NodeMCU custom build by frightanic.com
    branch: master
    commit: c8037568571edb5c568c2f8231e4f8ce0683b883
    SSL: false
    modules: adc,bit,cjson,coap,crypto,dht,enduser_setup,file,gpio,i2c,mqtt,net,node,pwm,rtctime,spi,tmr,u8g,uart,wifi
 build  built on: 2016-02-03 23:59
 powered by Lua 5.1.4 on SDK 1.4.0

person rwkiii    schedule 04.02.2016    source источник
comment
В дополнение к правильному ответу @gre_gor вот официальная документация: nodemcu.readthedocs .org/en/dev/en/modules/net/#netsocketsend. Кроме того, вы должны отметить, что текущая ветка dev имеет модуль HTTP, который упрощает вашу жизнь: http://nodemcu.readthedocs.org/en/dev/en/modules/http/   -  person Marcel Stör    schedule 04.02.2016


Ответы (1)


Это работало для других, потому что работало на NodeMCU 0.9.6.

В NodeMCU 1.4.0 многократные вызовы conn:send() не будут работать.

Вам нужно объединить все данные вместе и отправить их за один раз.

conn:send('HTTP/1.1 200 OK\n\n<!DOCTYPE HTML>\n<html>\n<head><meta content="text/html; charset=utf-8">\n<title>Device Configuration</title></head>\n<body>\n<form action="/" method="POST">\n')

Или вы можете отправить еще один фрагмент данных после того, как текущий фрагмент был отправлен, на основе conn:on("sent", send_callback)

local response = {
    'HTTP/1.1 200 OK\n\n',
    '<!DOCTYPE HTML>\n<html>\n<head><meta content="text/html; charset=utf-8">\n<title>Device Configuration</title></head>\n<body>\n<form action="/" method="POST">\n'
}
local function sender(conn)
    if #response>0 then conn:send(table.remove(response,1))
        else conn:close()
    end
end
conn:on("sent", sender)
sender(conn)
person gre_gor    schedule 04.02.2016