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
Revision 2:c8eff436549f, committed 2018-08-09
- Comitter:
- Bongjun
- Date:
- Thu Aug 09 08:24:06 2018 +0000
- Parent:
- 1:fe3df398bdf5
- Child:
- 3:954c7d381623
- Commit message:
- http webserver example for W5500 Ethernet components
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/W5500Interface.lib Thu Aug 09 08:24:06 2018 +0000 @@ -0,0 +1,1 @@ +http://os.mbed.com/users/Bongjun/code/W5500Interface/#e2ab76b2be07
--- a/easy-connect.lib Mon Jul 31 17:12:21 2017 +0200 +++ b/easy-connect.lib Thu Aug 09 08:24:06 2018 +0000 @@ -1,1 +1,1 @@ -https://github.com/ARMmbed/easy-connect/#e7629734c9846617dd6a55e181a851d7ae7a62b9 +http://os.mbed.com/users/Bongjun/code/easy-connect/#10bfec05d9f9
--- a/mbed-http.lib Mon Jul 31 17:12:21 2017 +0200 +++ b/mbed-http.lib Thu Aug 09 08:24:06 2018 +0000 @@ -1,1 +1,1 @@ -https://developer.mbed.org/teams/sandbox/code/mbed-http/#6e0025e01b98 +https://developer.mbed.org/teams/sandbox/code/mbed-http/#9a04ed79d67e
--- a/mbed_app.json Mon Jul 31 17:12:21 2017 +0200
+++ b/mbed_app.json Thu Aug 09 08:24:06 2018 +0000
@@ -1,8 +1,8 @@
{
"config": {
- "network-interface": {
- "help": "options are ETHERNET, WIFI_ESP8266, WIFI_ODIN, WIFI_RTW, MESH_LOWPAN_ND, MESH_THREAD",
- "value": "ETHERNET"
+ "network-interface":{
+ "help": "options are ETHERNET, ETHERNET_W5500, WIFI_ESP8266, WIFI_ODIN, MESH_LOWPAN_ND, MESH_THREAD",
+ "value": "ETHERNET_W5500"
},
"mesh_radio_type": {
"help": "options are ATMEL, MCR20, SPIRIT1, EFR32",
@@ -29,10 +29,11 @@
"target_overrides": {
"*": {
"target.features_add": ["NANOSTACK", "LOWPAN_ROUTER", "COMMON_PAL"],
+ "platform.stdio-baud-rate": 115200,
+ "platform.stdio-convert-newlines": true,
"mbed-mesh-api.6lowpan-nd-channel-page": 0,
"mbed-mesh-api.6lowpan-nd-channel": 12,
- "mbed-trace.enable": 0,
- "mbed-http.http-buffer-size": 2048
+ "mbed-trace.enable": 0
},
"HEXIWEAR": {
"esp8266-tx": "PTD3",
--- 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);
+*/
}
Bongjun Hur

