| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- -- Simple NodeMCU web server (done is a not so nodeie fashion :-)
- --
- -- Written by Scott Beasley 2015
- -- Open and free to change and use. Enjoy.
- --
- -- Your Wifi connection data
- -- local SSID = "xxxxxxxx"
- -- local SSID_PASSWORD = "xxxxxxxx"
- local function connect (conn)
- conn:on ("receive", function (conn, req_data)
- print("-----------------")
- print(req_data)
- --local query_data
- --query_data = get_http_req (req_data)
- --print (query_data["METHOD"] .. " " .. " " .. query_data["User-Agent"])
- conn:send ("<html><h1>Hello World from ESP8266 and NodeMCU!!</h1></html>")
- end)
- conn:on ("sent", function(conn)
- conn: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.ap.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 reamaining ":" 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)
- -- wifi.sta.autoconnect (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)
- -- Server listening on port 80, call connect function if a request is received
- svr:listen (80, connect)
|