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)
Hi Tom – I’m playing around with ESP8266 flashed with NodeMCU so this Lua program was a boon to me! However, it isn’t working as it should. The first error is line 76. Apparently, this command has now been deprecated (see https://github.com/nodemcu/nodemcu-firmware/issues/2082) and so I replaced it with the recommended . I save the file as init.lua using ESPlorer, and, sure enough the systems starts and connects to my WLAN. However, when I open a web browser (say Firefox), I see the information about the browser ‘printed’ “GET Mozilla/5.0 (Windows NT 6.1; Win64; x64 rv:57.0) etc” but the webpage refuses to connect with a comment “The connection to the server was reset while the page was loading.”. I’m really getting frustrated as I have tried numerous programs – and I must say, yours is by far the easiest to understand!! – but they all exhibit this problem, even though they will connect to my wireless AP (I can always ping the ESP device with no problems) My device is powered by Lua 5.1.4 on SDK 2.1.0(116b762). Any comments you might have would be gratefully received! Thanks so much – Mike
hi Mike,
can you send the program to my e-mail? tom at meinlschmidt dot org.