TCP, NTP and server Ethernet and WI-FI example working on OS5.15

Dependencies:   NTPclient

main.cpp

Committer:
star297
Date:
2020-02-28
Revision:
2:06cbf3f53592
Parent:
0:d2e1b817924d
Child:
3:91523db40ebd

File content as of revision 2:06cbf3f53592:

#include "mbed.h"
#include "EthernetInterface.h"
#include "NTPclient.h"

#define IP         "192.168.1.180"
#define GATEWAY    "192.168.1.1"
#define NETMASK    "255.255.255.0" 
#define PORT        80

// set required stdio buad rate in mbed_app.json. eg,"platform.stdio-baud-rate": 115200
 
EthernetInterface   net;
NTPclient           ntp(net);

DigitalOut led(LED1);

char    *sendbuffer = new char[512];    // create data send buffer space

int main()
{
    led=0;
    
    printf("\033[0m\033[2J\033[HTCP NTP client and server example\r\n\n\n"); // Tera Term clear screen
    
    time_t seconds = time(NULL);     
    printf("Initial RTC time: %s\r\n", ctime(&seconds));
    
    EthernetInterface eth;
    
    eth.set_network (IP, NETMASK, GATEWAY);  // include to set network connection with static parameters.
    
    eth.connect();
      
    const char *ip = eth.get_ip_address();
    if(ip){ 
        printf("Connected\n\nGet NTP time...\n");
        if(ntp.setTime("0.pool.ntp.org",123,3000)==0){
            time_t seconds = time(NULL);
            printf("System time set by NTP: %s\n\n", ctime(&seconds));
            }
            else{printf("No NTP could not set RTC !!\n\n");}
    }else{
        printf("No IP!!\n");
        while(1);
    }         
 
    TCPSocket srv;
    TCPSocket *client_sock;  // srv.accept() will return pointer to socket
    SocketAddress client_addr;
    
        // Open the server on ethernet stack
    srv.open(&eth);   
        // Bind the HTTP port (TCP 80) to the server
    srv.bind(eth.get_ip_address(), PORT);    
        //Can handle x simultaneous connections
    srv.listen(1);
    
    printf("The Server IP address: '%s'\n", ip);
    printf("Waiting for connection....\r\n\n"); 
       
    
    led=1;
    
    while(1){        
        client_sock = srv.accept();  //return pointer of a client socket
        char    *recevbuffer = new char[256];   // create 'clean' http receive buffer space   
        client_sock->recv(recevbuffer, 256);     // set size of required receive data length
        client_sock->getpeername(&client_addr);  //this will fill address of client to the SocketAddress object
        printf("Accepted %s:%d\n\n", client_addr.get_ip_address(), client_addr.get_port());     
        printf("Received Msg:\n%s\n\n", recevbuffer); 
        time_t seconds = time(NULL);    //get current mcu rtc time
        sprintf(sendbuffer,"HTTP/1.1 200 OK\n Content-type: text/plain\r\n\r\n <h1> Hello !!</h1>\r\n\n <h1>Time is: %s</h1>\r\n", ctime(&seconds));
        client_sock->send(sendbuffer, strlen(sendbuffer));  // send data in buffer to http port.        
        client_sock->close();
        delete[] recevbuffer;   // delete http buffer
    }

}