Webserver example for Nuvoton NuMaker boards and mbed OS 5.15 - HTTP 1.1 and multi-threaded.
For Mbed OS 6, please use the NuMaker-simple-httpd example.
This application demonstrates how to run an HTTP server on an mbed OS 5 device. It is derived from http-webserver-example Request parsing is done through nodejs/http-parser.
Fixed for Mbed OS 5.15 or later
Tested on
NuMaker IoT-M487 with Ethernet NuMaker PFM-M487 with Ethernet
Diff: source/main.cpp
- Revision:
- 0:41f820ea137a
- Child:
- 2:ff1a293c4df3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/source/main.cpp Mon Jul 31 15:41:22 2017 +0200
@@ -0,0 +1,63 @@
+#include "mbed.h"
+#include "easy-connect.h"
+#include "http_server.h"
+#include "http_response_builder.h"
+
+Serial pc(USBTX, USBRX);
+DigitalOut led(LED1);
+
+// Requests come in here
+void request_handler(ParsedHttpRequest* request, TCPSocket* socket) {
+
+ printf("Request came in: %s %s\n", http_method_str(request->get_method()), request->get_url().c_str());
+
+ if (request->get_method() == HTTP_GET && request->get_url() == "/") {
+ HttpResponseBuilder builder(200);
+ builder.set_header("Content-Type", "text/html; charset=utf-8");
+
+ char response[] = "<html><head><title>Hello from mbed</title></head>"
+ "<body>"
+ "<h1>mbed webserver</h1>"
+ "<button id=\"toggle\">Toggle LED</button>"
+ "<script>document.querySelector('#toggle').onclick = function() {"
+ "var x = new XMLHttpRequest(); x.open('POST', '/toggle'); x.send();"
+ "}</script>"
+ "</body></html>";
+
+ builder.send(socket, response, sizeof(response) - 1);
+ }
+ else if (request->get_method() == HTTP_POST && request->get_url() == "/toggle") {
+ printf("toggle LED called\n");
+ led = !led;
+
+ HttpResponseBuilder builder(200);
+ builder.send(socket, NULL, 0);
+ }
+ else {
+ HttpResponseBuilder builder(404);
+ builder.send(socket, NULL, 0);
+ }
+}
+
+int main() {
+ pc.baud(115200);
+
+ // Connect to the network (see mbed_app.json for the connectivity method used)
+ NetworkInterface* network = easy_connect(true);
+ if (!network) {
+ printf("Cannot connect to the network, see serial output\n");
+ return 1;
+ }
+
+ HttpServer server(network);
+ nsapi_error_t res = server.start(8080, &request_handler);
+
+ if (res == NSAPI_ERROR_OK) {
+ printf("Server is listening at http://%s:8080\n", network->get_ip_address());
+ }
+ else {
+ printf("Server could not be started... %d\n", res);
+ }
+
+ wait(osWaitForever);
+}