The Smart Watch using SSD1306 and I2C. The Time obtain using SNTP protocol from NTP Server.

Dependencies:   WIZnetInterface SNTPClinet mbed-dev

Prerequisite

This example is to obtain a time from NTP server using SNTP protocol.

To implement this function, you need a Platform board and OLED.

Below are what we used.

  • WIZwiki-W7500 from WIZnet (Platform board)
  • OLED from WIZnet

Hardware Configuration

WIZwiki-W7500 Pin map

pin map

OLED (from WIZnet)

/media/uploads/stkim92/oled.png

Wiring Table

OLEDW7500
SCLPA_9
SDAPA_10
GNDGND
VCCVCC

Software

Define Pins

SSD1306.h

#if defined(TARGET_WIZwiki_W7500)
#define SDA                  PA_10
#define SCL                  PA_9
#endif

Connect to NTP server

main.cpp

SNTPClient sntp("time.nist.gov", 40);   // timezone: Korea, Republic of
sntp.connect();

Get Time

main.cpp

if(sntp.getTime(&ntptime) == true)
    {
        pc.printf("%d-%d-%d, %d:%d:%d\r\n", ntptime.yy, ntptime.mo, ntptime.dd, ntptime.hh, ntptime.mm, ntptime.ss);
        wait(1.0);
    }
    else
    {
        while(sntp.getTime(&ntptime) != true)
        {
            //break;
        }
    }

Caution

watchout pins setting

Committer:
stkim92
Date:
Thu Apr 13 01:50:52 2017 +0000
Revision:
2:25b14c11c06c
Parent:
1:f0c1fe04502c
added WIZwiki-W7500ECHO

Who changed what in which revision?

UserRevisionLine numberNew contents of line
eunkyoungkim 0:6e799e373101 1 #include "mbed.h"
eunkyoungkim 0:6e799e373101 2 #include "EthernetInterface.h"
eunkyoungkim 0:6e799e373101 3 #include "SNTPClient.h"
eunkyoungkim 0:6e799e373101 4 #include "SSD1306.h"
eunkyoungkim 0:6e799e373101 5
eunkyoungkim 0:6e799e373101 6 #if defined(TARGET_WIZwiki_W7500)
eunkyoungkim 0:6e799e373101 7 EthernetInterface eth;
eunkyoungkim 0:6e799e373101 8 DigitalIn sw(PC_0);
stkim92 2:25b14c11c06c 9 #endif
eunkyoungkim 0:6e799e373101 10
stkim92 2:25b14c11c06c 11 #if defined(TARGET_WIZwiki_W7500ECO)
stkim92 2:25b14c11c06c 12 EthernetInterface eth;
stkim92 2:25b14c11c06c 13 DigitalIn sw(PC_0);
eunkyoungkim 0:6e799e373101 14 #endif
stkim92 2:25b14c11c06c 15
eunkyoungkim 0:6e799e373101 16 TCPSocketConnection sock;
eunkyoungkim 0:6e799e373101 17
eunkyoungkim 0:6e799e373101 18 DigitalOut myled(PA_6);
eunkyoungkim 0:6e799e373101 19
eunkyoungkim 0:6e799e373101 20 Serial pc(USBTX, USBRX); // tx, rx
eunkyoungkim 0:6e799e373101 21
eunkyoungkim 0:6e799e373101 22 datetime ntptime;
eunkyoungkim 0:6e799e373101 23 struct tm timeinfo;
eunkyoungkim 0:6e799e373101 24
eunkyoungkim 0:6e799e373101 25
eunkyoungkim 0:6e799e373101 26 int main()
eunkyoungkim 0:6e799e373101 27 {
stkim92 1:f0c1fe04502c 28 uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x00, 0x01, 0x02};
stkim92 1:f0c1fe04502c 29 uint8_t count=0;
stkim92 1:f0c1fe04502c 30 uint8_t time_x_offset =0;
stkim92 1:f0c1fe04502c 31 uint8_t old_offset =0;
stkim92 1:f0c1fe04502c 32 char buffer[32];
stkim92 1:f0c1fe04502c 33
stkim92 1:f0c1fe04502c 34 pc.baud(9600);
eunkyoungkim 0:6e799e373101 35 init();
eunkyoungkim 0:6e799e373101 36 cls();
eunkyoungkim 0:6e799e373101 37 OLED_DrawBMP(0,0,128,8,(unsigned char *)wiznet);
eunkyoungkim 0:6e799e373101 38 wait(1);
stkim92 1:f0c1fe04502c 39 cls();
eunkyoungkim 0:6e799e373101 40 eth.init(mac_addr); //Use DHCP
eunkyoungkim 0:6e799e373101 41 eth.connect();
stkim92 1:f0c1fe04502c 42
stkim92 1:f0c1fe04502c 43 pc.printf("IP Address is %s\n\r", eth.getIPAddress());
eunkyoungkim 0:6e799e373101 44 SNTPClient sntp("time.nist.gov", 40); // timezone: Korea, Republic of
eunkyoungkim 0:6e799e373101 45 sntp.connect();
eunkyoungkim 0:6e799e373101 46 if(sntp.getTime(&ntptime) == true)
eunkyoungkim 0:6e799e373101 47 {
stkim92 1:f0c1fe04502c 48 pc.printf("%d-%d-%d, %d:%d:%d\r\n", ntptime.yy, ntptime.mo, ntptime.dd, ntptime.hh, ntptime.mm, ntptime.ss);
stkim92 1:f0c1fe04502c 49 wait(1.0);
eunkyoungkim 0:6e799e373101 50 }
eunkyoungkim 0:6e799e373101 51 else
eunkyoungkim 0:6e799e373101 52 {
stkim92 1:f0c1fe04502c 53 while(sntp.getTime(&ntptime) != true)
eunkyoungkim 0:6e799e373101 54 {
stkim92 1:f0c1fe04502c 55 //break;
eunkyoungkim 0:6e799e373101 56 }
eunkyoungkim 0:6e799e373101 57 }
eunkyoungkim 0:6e799e373101 58
stkim92 1:f0c1fe04502c 59 timeinfo.tm_mon = ntptime.mo-1;
stkim92 1:f0c1fe04502c 60 timeinfo.tm_mday = ntptime.dd;
stkim92 1:f0c1fe04502c 61 timeinfo.tm_hour = ntptime.hh;
stkim92 1:f0c1fe04502c 62 timeinfo.tm_min = ntptime.mm;
stkim92 1:f0c1fe04502c 63 timeinfo.tm_sec = ntptime.ss;
stkim92 1:f0c1fe04502c 64 timeinfo.tm_year = ntptime.yy-1900;
stkim92 1:f0c1fe04502c 65 // printf("%d-%d, %d:%d:%d\r\n", timeinfo.tm_mon, timeinfo.tm_mday, timeinfo.tm_hour, timeinfo.tm_min, timeinfo.tm_sec);
stkim92 1:f0c1fe04502c 66 time_t t =mktime(&timeinfo);
eunkyoungkim 0:6e799e373101 67
stkim92 1:f0c1fe04502c 68 set_time(t);
stkim92 1:f0c1fe04502c 69 t = time(NULL);
eunkyoungkim 0:6e799e373101 70
eunkyoungkim 0:6e799e373101 71 while (1) {
eunkyoungkim 0:6e799e373101 72 time_t seconds = time(NULL);
eunkyoungkim 0:6e799e373101 73
eunkyoungkim 0:6e799e373101 74 // printf("Time as a basic string = %s\r\n", ctime(&seconds));
eunkyoungkim 0:6e799e373101 75 if(count == 50)
eunkyoungkim 0:6e799e373101 76 {
eunkyoungkim 0:6e799e373101 77 cls();
eunkyoungkim 0:6e799e373101 78 count++;
eunkyoungkim 0:6e799e373101 79 }
eunkyoungkim 0:6e799e373101 80 if(count > 50)
eunkyoungkim 0:6e799e373101 81 {
eunkyoungkim 0:6e799e373101 82 time_x_offset =0;
eunkyoungkim 0:6e799e373101 83 if(old_offset != time_x_offset){
eunkyoungkim 0:6e799e373101 84 old_offset = time_x_offset;
stkim92 1:f0c1fe04502c 85 }
eunkyoungkim 0:6e799e373101 86 //strftime (buffer,32,"%I:%M:%S ",localtime(&seconds));
eunkyoungkim 0:6e799e373101 87 strftime (buffer,32,"%I:%M",localtime(&seconds));
eunkyoungkim 0:6e799e373101 88 LED_P23x32Str(time_x_offset,3,buffer);
eunkyoungkim 0:6e799e373101 89
eunkyoungkim 0:6e799e373101 90 //intBigTime(buffer);
eunkyoungkim 0:6e799e373101 91 if(sw == 0)
eunkyoungkim 0:6e799e373101 92 {
eunkyoungkim 0:6e799e373101 93 count = 0;
stkim92 1:f0c1fe04502c 94 cls();
eunkyoungkim 0:6e799e373101 95 }
eunkyoungkim 0:6e799e373101 96
eunkyoungkim 0:6e799e373101 97 }
eunkyoungkim 0:6e799e373101 98 else
stkim92 1:f0c1fe04502c 99 {
stkim92 1:f0c1fe04502c 100 strftime(buffer, 32,"%a %d %b %Y", localtime(&seconds));
stkim92 1:f0c1fe04502c 101 OLED_ShowStr(10, 3, buffer,1 );
stkim92 1:f0c1fe04502c 102 strftime(buffer, 32, "%I:%M:%S %p", localtime(&seconds));
stkim92 1:f0c1fe04502c 103 OLED_ShowStr(10, 4, buffer,2 );
stkim92 1:f0c1fe04502c 104 count ++;
eunkyoungkim 0:6e799e373101 105 }
eunkyoungkim 0:6e799e373101 106 }
eunkyoungkim 0:6e799e373101 107 }