Simple Webserver example for wiznet W5500 (SPI Ethernet chip) mbed OS 5 - HTTP 1.1 and multi-threaded
Dependencies: W5500Interface easy-connect mbed-http
Fork of http-webserver-example by
mbed-os-example-http-server
This application demonstrates how to run an HTTP server on an mbed OS 5 device & WIZnet W5500 Ethernet components.
Request parsing is done through [nodejs/http-parser](https://github.com/nodejs/http-parser).
To build
- Open ``mbed_app.json`` and change the `network-interface` option to your connectivity method ([more info](https://github.com/ARMmbed/easy-connect)).
- Build the project in the online compiler or using mbed CLI.
- Flash the project to your development board.
- Attach a serial monitor to your board to see the debug messages.
Tested on
- NUCLEO_F411RE with W5500 Ethernet shield.
- For W5500, you need the following libraries.
Import libraryW5500Interface
W5500 driver for mbed OS 5
Import libraryeasy-connect
Modified version of easy-connect for W5500 Ethernet components
But every networking stack that supports the [mbed OS 5 NetworkInterface API](https://docs.mbed.com/docs/mbed-os-api-reference/en/latest/APIs/communication/network_sockets/) should work.
Test Result
Diff: source/main.cpp
- Revision:
- 2:c8eff436549f
- Parent:
- 0:41f820ea137a
- Child:
- 5:ac9aebd61a31
--- a/source/main.cpp Mon Jul 31 17:12:21 2017 +0200 +++ b/source/main.cpp Thu Aug 09 08:24:06 2018 +0000 @@ -3,8 +3,8 @@ #include "http_server.h" #include "http_response_builder.h" -Serial pc(USBTX, USBRX); -DigitalOut led(LED1); +//Serial pc(USBTX, USBRX); +//DigitalOut led(D1); // Requests come in here void request_handler(ParsedHttpRequest* request, TCPSocket* socket) { @@ -28,8 +28,7 @@ } else if (request->get_method() == HTTP_POST && request->get_url() == "/toggle") { printf("toggle LED called\n"); - led = !led; - + //led = !led; HttpResponseBuilder builder(200); builder.send(socket, NULL, 0); } @@ -40,15 +39,17 @@ } int main() { - pc.baud(115200); +// pc.baud(115200); - // Connect to the network (see mbed_app.json for the connectivity method used) - NetworkInterface* network = easy_connect(true); + printf("Easy connect...\n"); + NetworkInterface *network = easy_connect(true); if (!network) { - printf("Cannot connect to the network, see serial output\n"); + printf("Cannot connect to the network, see serial output"); return 1; } + printf("Connected to the network. Opening a socket...\n"); + HttpServer server(network); nsapi_error_t res = server.start(8080, &request_handler); @@ -60,4 +61,25 @@ } wait(osWaitForever); + +/* + // 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); +*/ }