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
OLED (from WIZnet)
Wiring Table
OLED | W7500 |
SCL | PA_9 |
SDA | PA_10 |
GND | GND |
VCC | VCC |
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
main.cpp@2:25b14c11c06c, 2017-04-13 (annotated)
- 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?
User | Revision | Line number | New 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 | } |