TCP, NTP and server Ethernet and WI-FI example working on OS5.15
main.cpp
- Committer:
- star297
- Date:
- 2020-02-28
- Revision:
- 0:d2e1b817924d
- Child:
- 2:06cbf3f53592
File content as of revision 0:d2e1b817924d:
#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(ð);
// 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
}
}
/*
int main(void) {
printf("\033[0m\033[2J\033[HInitialise!\r\n\n\n"); // Tera Term clear screen
time_t seconds = time(NULL);
printf("Starting time: %s\r\n", ctime(&seconds));
printf("EthernetInterface connecting...\n\n");
net.set_network (IP, NETMASK, GATEWAY); // include to set network connection with static parameters.
net.connect();
const char *ip = net.get_ip_address();
if(ip){
printf("Connected\nIP: %s\nGet NTP...\n", ip);
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);
}
// Show the network address
printf("Server IP: %s:\n", net.get_ip_address());
printf("Netmask: %s\n", net.get_netmask());
printf("Gateway: %s\n\n", net.get_gateway());
printf("Starting Server...\r\n\n");
// Open the server on ethernet stack
server.open(&net);
// Bind the HTTP port to the server
server.bind(ip, PORT);
// Can handle 5 simultaneous connections
server.listen(5);
//listening for http GET request
printf("Ready \r\nWaiting for connection....\r\n\n");
led=1;
while(1){
led=1;
server.accept(&client, &clientAddress);
led=0;
client.recv(receiveBuf, 1024);
//printf("\033[0m\033[2J\033[HClient IP: %s\r\n\n%s\r\n",clientAddress.get_ip_address(),receiveBuf);
printf("Client IP: %s\r\n\n%s\r\n",clientAddress.get_ip_address(),receiveBuf);
time_t seconds = time(NULL);
sprintf(buffer,"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.send(buffer, strlen(buffer));
client.close();
}
}
*/