An example demonstrating SSDP Discovery and a companion Web Server.

Dependencies:   mbed mbed-rtos Watchdog SW_HTTPServer SW_String EthernetInterface TimeInterface SSDP

This example program provides a framework -by- example.

It makes itself discoverable to the network using SSDP. From there, it is easy to access the embedded web server to interact with the embedded node.

The example, built on the LPC1768, provides interaction to turn the LEDs on and off via a web page that is discovered using the SSDP protocol.

It also picks up time via an NTP server.

Committer:
WiredHome
Date:
Tue Jul 03 02:10:23 2018 +0000
Revision:
0:de1dfa2ab813
Child:
4:5da66fab599c
An example program demonstrating the SSDP-based discovery and a companion Web Server to interact with the mbed device. Scan the network (e.g. in Windows Explorer) to identify the node. Click to open its web page to interact with it.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
WiredHome 0:de1dfa2ab813 1 //
WiredHome 0:de1dfa2ab813 2 // A simple SSDP example
WiredHome 0:de1dfa2ab813 3 //
WiredHome 0:de1dfa2ab813 4 #include "mbed.h" // ver 120; mbed-rtos ver 111
WiredHome 0:de1dfa2ab813 5 #include "EthernetInterface.h" // ver 55
WiredHome 0:de1dfa2ab813 6 #include "SW_HTTPServer.h" // ver 50
WiredHome 0:de1dfa2ab813 7 #include "TimeInterface.h" // ver 23
WiredHome 0:de1dfa2ab813 8 #include "Watchdog.h" // ver 6
WiredHome 0:de1dfa2ab813 9 #include "SW_String.h" // ver 1
WiredHome 0:de1dfa2ab813 10 #include "SSDP.h" // ver 0
WiredHome 0:de1dfa2ab813 11
WiredHome 0:de1dfa2ab813 12 #include "WebPages.h" // Private handler for web queries
WiredHome 0:de1dfa2ab813 13
WiredHome 0:de1dfa2ab813 14 RawSerial pc(USBTX, USBRX);
WiredHome 0:de1dfa2ab813 15
WiredHome 0:de1dfa2ab813 16 EthernetInterface eth;
WiredHome 0:de1dfa2ab813 17 TimeInterface ntp(&eth);
WiredHome 0:de1dfa2ab813 18 Watchdog wd;
WiredHome 0:de1dfa2ab813 19 time_t lastboottime;
WiredHome 0:de1dfa2ab813 20
WiredHome 0:de1dfa2ab813 21 //FlashFileSystem flash("flash"); // static files here for reliability and speed
WiredHome 0:de1dfa2ab813 22 LocalFileSystem local("local"); // some place to hold settings and maybe the static web pages
WiredHome 0:de1dfa2ab813 23
WiredHome 0:de1dfa2ab813 24 const char * Server_Root = "/local";
WiredHome 0:de1dfa2ab813 25
WiredHome 0:de1dfa2ab813 26 // public for the WebPages handler to see
WiredHome 0:de1dfa2ab813 27 //
WiredHome 0:de1dfa2ab813 28 const char * BUILD_DATE = __DATE__ " " __TIME__;
WiredHome 0:de1dfa2ab813 29 const char * PROG_NAME = "SSDP Server";
WiredHome 0:de1dfa2ab813 30 const char * My_Name = "MBED SSDP Node";
WiredHome 0:de1dfa2ab813 31 const char * My_SerialNum = "0000001";
WiredHome 0:de1dfa2ab813 32 const int Server_Port = 80;
WiredHome 0:de1dfa2ab813 33 // end public information
WiredHome 0:de1dfa2ab813 34
WiredHome 0:de1dfa2ab813 35
WiredHome 0:de1dfa2ab813 36 int main() {
WiredHome 0:de1dfa2ab813 37 pc.baud(460800);
WiredHome 0:de1dfa2ab813 38 pc.printf("\r\n%s Build %s\r\n", PROG_NAME, BUILD_DATE);
WiredHome 0:de1dfa2ab813 39 if (wd.WatchdogCausedReset()) {
WiredHome 0:de1dfa2ab813 40 pc.printf("**** Watchdog Event caused reset at %s ****\r\n", ntp.ctime(&lastboottime));
WiredHome 0:de1dfa2ab813 41 }
WiredHome 0:de1dfa2ab813 42 wd.Configure(45); // very generous, but this is a network appliance, so a bit less deterministic.
WiredHome 0:de1dfa2ab813 43
WiredHome 0:de1dfa2ab813 44 eth.init(); //Use DHCP
WiredHome 0:de1dfa2ab813 45 eth.connect();
WiredHome 0:de1dfa2ab813 46 printf("IP: %s\n", eth.getIPAddress());
WiredHome 0:de1dfa2ab813 47 //Thread thr(SSDPListener, NULL, osPriorityLow);
WiredHome 0:de1dfa2ab813 48 HTTPServer svr(Server_Port, Server_Root, 15, 30, 20, 50, &pc);
WiredHome 0:de1dfa2ab813 49 svr.RegisterHandler("/", RootPage);
WiredHome 0:de1dfa2ab813 50 svr.RegisterHandler("/setup.xml", Setup_xml);
WiredHome 0:de1dfa2ab813 51 SSDP ssdp("Friendly Node", eth.getMACAddress(), eth.getIPAddress(), Server_Port);
WiredHome 0:de1dfa2ab813 52
WiredHome 0:de1dfa2ab813 53 while (1) {
WiredHome 0:de1dfa2ab813 54 wd.Service();
WiredHome 0:de1dfa2ab813 55 svr.Poll(); // non-blocking, but also not deterministic
WiredHome 0:de1dfa2ab813 56 Thread::yield();
WiredHome 0:de1dfa2ab813 57 }
WiredHome 0:de1dfa2ab813 58 }