I’ve modified and updated this source:
local SSID = "my_wifi_ssid"
local SSID_PASSWORD = "my_wifi_password"
local function http_header(conn)
conn:send('HTTP/1.1 200 OK\n\n')
conn:send('<!DOCTYPE HTML>\n')
conn:send('<html>\n')
conn:send('<head><meta content="text/html; charset=utf-8">\n')
conn:send('<title>ESP8266 znouza test</title></head>\n')
end
local function connect (conn, data)
local query_data
conn:on ("receive",
function (cn, req_data)
query_data = get_http_req (req_data)
print (query_data["METHOD"] .. " " .. " " .. query_data["User-Agent"])
http_header(cn)
cn:send ("<body>")
cn:send ("<h1>Hello World from ESP8266 and NodeMCU!!</h1>")
cn:send ("</body></html>")
-- Close the connection for the request
cn:close ( )
end)
end
function wait_for_wifi_conn ( )
tmr.alarm (1, 1000, 1, function ( )
if wifi.sta.getip ( ) == nil then
print ("Waiting for Wifi connection")
else
tmr.stop (1)
print ("ESP8266 mode is: " .. wifi.getmode ( ))
print ("The module MAC address is: " .. wifi.sta.getmac ( ))
print ("Config done, IP is " .. wifi.sta.getip ( ))
end
end)
end
-- Build and return a table of the http request data
function get_http_req (instr)
local t = {}
local first = nil
local key, v, strt_ndx, end_ndx
for str in string.gmatch (instr, "([^\n]+)") do
-- First line in the method and path
if (first == nil) then
first = 1
strt_ndx, end_ndx = string.find (str, "([^ ]+)")
v = trim (string.sub (str, end_ndx + 2))
key = trim (string.sub (str, strt_ndx, end_ndx))
t["METHOD"] = key
t["REQUEST"] = v
else -- Process and remaining ":" fields
strt_ndx, end_ndx = string.find (str, "([^:]+)")
if (end_ndx ~= nil) then
v = trim (string.sub (str, end_ndx + 2))
key = trim (string.sub (str, strt_ndx, end_ndx))
t[key] = v
end
end
end
return t
end
-- String trim left and right
function trim (s)
return (s:gsub ("^%s*(.-)%s*$", "%1"))
end
-- Configure the ESP as a station (client)
wifi.setmode (wifi.STATION)
wifi.sta.config (SSID, SSID_PASSWORD,1)
-- Hang out until we get a wifi connection before the httpd server is started.
wait_for_wifi_conn ( )
-- Create the httpd server
svr = net.createServer (net.TCP, 30)
-- Server listening on port 80, call connect function if a request is received
svr:listen (80, connect)