Marcos Kirsch 4ff7b2b78d Trivial placeholder print statement, useful for debugging. | 8 年之前 | |
---|---|---|
http | 9 年之前 | |
.gitignore | 9 年之前 | |
LICENSE | 9 年之前 | |
Makefile | 8 年之前 | |
README.md | 8 年之前 | |
httpserver-b64decode.lua | 9 年之前 | |
httpserver-basicauth.lua | 8 年之前 | |
httpserver-conf.lua | 9 年之前 | |
httpserver-error.lua | 8 年之前 | |
httpserver-header.lua | 8 年之前 | |
httpserver-request.lua | 8 年之前 | |
httpserver-static.lua | 8 年之前 | |
httpserver.lua | 9 年之前 | |
init.lua | 8 年之前 |
A (very) simple web server written in Lua for the ESP8266 running the NodeMCU firmware.
Upload server files using nodemcu-uploader. The easiest is to use GNU Make with the bundled Makefile. Open the Makefile and modify the user configuration to point to your nodemcu-uploader script and your serial port. Type the following to upload the server code, init.lua (which you may want to modify), and some example files:
make upload_all
If you only want to upload the server code, then type:
make upload_server
And if you only want to upload the server files:
make upload_http
Restart the server. This will execute init.lua which will compile the server code. Then, assuming init.lua doesn’t have it, start the server yourself by typing:
dofile("httpserver.lc")(80)
In this example, 80 is the port your server is listening at, but you can change it.
All the files you upload must be prefixed with «http/». Wait, what?
Yes: NodeMCU’s filesystem does not support folders, but filenames can contain slashes. Only files that begin with «http/» will be accessible through the server.
Example: Say the IP for your ESP8266 is 2.2.2.2 and the server is running in the default port 80. Go to (http://2.2.2.2/index.html)[http://2.2.2.2/index.html] using your web browser. The ESP8266 will serve you with the contents of the file «http/index.html» (if it exists). If you visit the root (/) then index.html is served. By the way, unlike most HTTP servers, nodemcu_httpserver treats the URLs in a case-sensitive manner.
Enable and configure HTTP Basic Authentication by editing «httpserver-conf.lua» file.
When enabled, HTTP Basic Authentication is global to every file served by the server.
Remember that HTTP Basic Authentication is a very basic authentication protocol, and should not be considered secure if the server is not using encryption, as your username and password travel in plain text.
Similar to static files, upload a Lua script called «http/[name].lua where you replace [name] with your script’s name. The script should return a function that takes two parameters:
return function (connection, args)
-- code goes here
end
Use the connection parameter to send the response back to the client. Note that you are in charge of sending the HTTP header, but you can use the bundled httpserver-header.lua script for that. See how other examples do it. The args parameter is a Lua table that contains any arguments sent by the client in the GET request.
For example, if the client requests http://2.2.2.2/foo.lua?color=red then the server will execute the function in your Lua script foo.lua and pass in connection and args, where args.color = «red».
nodemcu-firmware does not support queueing multiple send operations. So in order to get things to work, nodemcu-httsperver uses Lua coroutines. In your script, after every
connection.send(foo)
you must ensure that you call
coroutine.yield()
except on the very last one. This is because the server will resume your script after the send operation finished. Memory is tight so it’s likely that you will need multiple sends. Be careful. Also be careful not to send too much data in a single operation or you risk overflowing the chip’s send buffer.
Look at the included example scripts for plenty of ideas.
This is a bundled example that shows how to use nodemcu-httpserver together with server-side scripting to control something with the ESP8266. In this example, we will pretend to open one of two garage doors.
Your typical garage door opener has a wired remote with a single button. The button simply connects to two terminals on the electric motor and when pushed, the terminals are shorted. This causes the motor to open or close.
This example assumes that GPIO1 and GPIO2 on the ESP8266 are connected each to a relay that can be controlled. How to wire such thing is outside of the scope of this document but information is easily found online. The relays are controlled by the microcontroller and act as the push button, and can actually be connected in parallel with the existing mechanical button.
This example consists of the following files:
Be careful permanently installing something like this in your home. The server provides no encryption. Your only layers of security are the WiFi network’s password and simple HTTP authentication which sends your password unencrypted.
This script is provided simply as an educational example. You’ve been warned.
The chip is very, very memory constrained.
Use a recent nodemcu-firmware with as few optional modules as possible.
Use a firmware build without floating point support. This takes up a good chunk of RAM as well.
Any help reducing the memory needs of the server without crippling its functionality is appreciated!
Compile your Lua scripts in order to reduce their memory usage. The server knows to serve and treat both .lua and .lc files as scripts.