Using Arduino+W5100 to Access to the Network Time

This is a design using arduino and W5100 model to get the network time and display on the LCD screen.
ORIGINAL POST
By Unknown
components
Hardware Components
Arduino uno (ATmega328)
X 1
W5100
X 1
LCD 12864
X 1
details

This is a design using arduino and W5100 model to get the network time and display on the LCD screen.

Hardware Needed:Arduino uno (ATmega328)

Network Model:W5100

Monitor:LCD 12864

Order of connection:

1、PIN1–>GND;

2、PIN2–>5V;

3、RS(CS)–>8;

4、RW(SID)–>9;

5、EN(CLK)–>3;

6、PIN15 PSB–>GND;

7、W5100 Network Model inserts to the Arduino directly.

Wire Map:

45151825333516

 

Connection State:

 

45151835394590

 

Program Code like follows:

#include "LCD12864RSPI.h"
#define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )
LCD12864RSPI LCDA(8,9,3);   
int second,minute,hour; 
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
unsigned int localPort = 8888;     
IPAddress timeServer(132, 163, 4, 101); 
const int NTP_PACKET_SIZE= 48; 
byte packetBuffer[ NTP_PACKET_SIZE]; 
EthernetUDP Udp;
unsigned char xitong[]={
0xCF, 0xB5,
0xCD, 0xB3,
0xB3, 0xF5,
0xCA, 0xBC,
0xBB, 0xAF
};                  

unsigned char shijian[]={
0xB1, 0xB1,
0xBE, 0xA9,
0xCA, 0xB1,
0xBC, 0xE4
};                

void setup() 
{  
  kaiji();
  delay(3000);
  Serial.begin(9600);
  while (!Serial) {;}
                    
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    for(;;);
  }

  Udp.begin(localPort);
}

void loop()
{
  sendNTPpacket(timeServer); 
  delay(1000);  
  if ( Udp.parsePacket() ) {  
    Udp.read(packetBuffer,NTP_PACKET_SIZE);  
    unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
    unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);  
    unsigned long secsSince1900 = highWord << 16 | lowWord;  
    Serial.print("Seconds since Jan 1 1900 = " );
    Serial.println(secsSince1900);               
    Serial.print("Unix time = ");
    const unsigned long seventyYears = 2208988800UL;     
    unsigned long epoch = secsSince1900 - seventyYears;  
    Serial.println(epoch);      
    Serial.print("beijing time is "); 

    if((epoch % 86400L) / 3600+8>=24) 
    {
      Serial.print((epoch % 86400L) / 3600+8-24);
    }

    if((epoch % 86400L) / 3600+8<24)
    {                   
       Serial.print((epoch % 86400L) / 3600+8); 
       hour=(epoch % 86400L) / 3600+8;
    }
    Serial.print(':');  

    if ( ((epoch % 3600) / 60) < 10 ) {
      Serial.print('0');
    }

    Serial.print((epoch  % 3600) / 60); 
    minute=(epoch  % 3600) / 60;
    Serial.print(':'); 

    if ( (epoch % 60) < 10 )
    {
      Serial.print('0');
    }

    Serial.println(epoch `); 
    second=epoch `;

 }
 shijianx();
}

unsigned long sendNTPpacket(IPAddress& address)
{
  memset(packetBuffer, 0, NTP_PACKET_SIZE); 
  packetBuffer[0] = 0b11100011;   
  packetBuffer[1] = 0;     
  packetBuffer[2] = 6;     
  packetBuffer[3] = 0xEC;  
  packetBuffer[12]  = 49; 
  packetBuffer[13]  = 0x4E;
  packetBuffer[14]  = 49;
  packetBuffer[15]  = 52;
                       
  Udp.beginPacket(address, 123); 
  Udp.write(packetBuffer,NTP_PACKET_SIZE);
  Udp.endPacket(); 
}

void kaiji()
{
  LCDA.clear();
  LCDA.setCursor(1,0);
  LCDA.chinese(xitong,AR_SIZE(xitong));
  LCDA.print("......");
}

void shijianx()
{
  LCDA.clear();
  LCDA.setCursor(1,0);
  LCDA.chinese(shijian,AR_SIZE(shijian));
  LCDA.print(":");
  LCDA.setCursor(2,3);
  LCDA.print(hour);
  LCDA.print(":");
  LCDA.print(minute);
  LCDA.print(":");
  LCDA.print(second);
}

 

Testing result:

45151845342961

Source:http://blog.sina.com.cn/s/blog_678113930101hrqt.html (in Chinese)

 

This is a design using arduino and W5100 model to get the network time and display on the LCD screen.

Hardware Needed:Arduino uno (ATmega328)

Network Model:W5100

Monitor:LCD 12864

Order of connection:

1、PIN1–>GND;

2、PIN2–>5V;

3、RS(CS)–>8;

4、RW(SID)–>9;

5、EN(CLK)–>3;

6、PIN15 PSB–>GND;

7、W5100 Network Model inserts to the Arduino directly.

Wire Map:

45151825333516

 

Connection State:

 

45151835394590

 

Program Code like follows:

#include "LCD12864RSPI.h"
#define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )
LCD12864RSPI LCDA(8,9,3);   
int second,minute,hour; 
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
unsigned int localPort = 8888;     
IPAddress timeServer(132, 163, 4, 101); 
const int NTP_PACKET_SIZE= 48; 
byte packetBuffer[ NTP_PACKET_SIZE]; 
EthernetUDP Udp;
unsigned char xitong[]={
0xCF, 0xB5,
0xCD, 0xB3,
0xB3, 0xF5,
0xCA, 0xBC,
0xBB, 0xAF
};                  

unsigned char shijian[]={
0xB1, 0xB1,
0xBE, 0xA9,
0xCA, 0xB1,
0xBC, 0xE4
};                

void setup() 
{  
  kaiji();
  delay(3000);
  Serial.begin(9600);
  while (!Serial) {;}
                    
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    for(;;);
  }

  Udp.begin(localPort);
}

void loop()
{
  sendNTPpacket(timeServer); 
  delay(1000);  
  if ( Udp.parsePacket() ) {  
    Udp.read(packetBuffer,NTP_PACKET_SIZE);  
    unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
    unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);  
    unsigned long secsSince1900 = highWord << 16 | lowWord;  
    Serial.print("Seconds since Jan 1 1900 = " );
    Serial.println(secsSince1900);               
    Serial.print("Unix time = ");
    const unsigned long seventyYears = 2208988800UL;     
    unsigned long epoch = secsSince1900 - seventyYears;  
    Serial.println(epoch);      
    Serial.print("beijing time is "); 

    if((epoch % 86400L) / 3600+8>=24) 
    {
      Serial.print((epoch % 86400L) / 3600+8-24);
    }

    if((epoch % 86400L) / 3600+8<24)
    {                   
       Serial.print((epoch % 86400L) / 3600+8); 
       hour=(epoch % 86400L) / 3600+8;
    }
    Serial.print(':');  

    if ( ((epoch % 3600) / 60) < 10 ) {
      Serial.print('0');
    }

    Serial.print((epoch  % 3600) / 60); 
    minute=(epoch  % 3600) / 60;
    Serial.print(':'); 

    if ( (epoch % 60) < 10 )
    {
      Serial.print('0');
    }

    Serial.println(epoch `); 
    second=epoch `;

 }
 shijianx();
}

unsigned long sendNTPpacket(IPAddress& address)
{
  memset(packetBuffer, 0, NTP_PACKET_SIZE); 
  packetBuffer[0] = 0b11100011;   
  packetBuffer[1] = 0;     
  packetBuffer[2] = 6;     
  packetBuffer[3] = 0xEC;  
  packetBuffer[12]  = 49; 
  packetBuffer[13]  = 0x4E;
  packetBuffer[14]  = 49;
  packetBuffer[15]  = 52;
                       
  Udp.beginPacket(address, 123); 
  Udp.write(packetBuffer,NTP_PACKET_SIZE);
  Udp.endPacket(); 
}

void kaiji()
{
  LCDA.clear();
  LCDA.setCursor(1,0);
  LCDA.chinese(xitong,AR_SIZE(xitong));
  LCDA.print("......");
}

void shijianx()
{
  LCDA.clear();
  LCDA.setCursor(1,0);
  LCDA.chinese(shijian,AR_SIZE(shijian));
  LCDA.print(":");
  LCDA.setCursor(2,3);
  LCDA.print(hour);
  LCDA.print(":");
  LCDA.print(minute);
  LCDA.print(":");
  LCDA.print(second);
}

 

Testing result:

45151845342961

Source:http://blog.sina.com.cn/s/blog_678113930101hrqt.html (in Chinese)

 

COMMENTS

Please Login to comment
  Subscribe  
Notify of