first
Dependencies: SHTx SNTPClient WIZnetInterface mbed
https://developer.mbed.org/users/nanjsk/code/SHT15_WIZwiki-W7500/
지난 글에는 그냥 SHT15의 값만 프린트 해주는 예제를 작성했었다. 이번에는 NTP를 이용하여 네트웍에서 시간정보를 읽어와서 현재의 시간과 온/습도 값을 표시해 보자.
우선 NTP 라이브러리가 mbed에 있는지 확인해 보았다.
NTP로 검색을 해보니 4개가 나왔는데, 과거에 WIZnet에서 근무했던 Raphael 님이 만든 라이브러리가 있어서 이것을 Import해서 사용했다.
코드 적용에는 큰 어려움이 없었고, DHCP 사용해서 공유기에서 IP를 할당 받아서 구현을 했다. 자세한 내용은 코드를 참고해 보길 바란다.
5초에 한번씩 현재의 시간과 온/습도 값을 읽어서 시리얼로 출력해주는 코드이다.
위 사진을 보면 현재의 시간과 온/습도 값을 출력하는 코드를 볼수 있다.
mbed에서 작성한 코드는 아래 URL에서 확인 할수 있다.
이상.
main.cpp@0:73a312631ec9, 2015-08-26 (annotated)
- Committer:
- nanjsk
- Date:
- Wed Aug 26 23:21:42 2015 +0000
- Revision:
- 0:73a312631ec9
This code is an example of the SHT-15 & SNTP using WIZwiki-W7500.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| nanjsk | 0:73a312631ec9 | 1 | #include "mbed.h" |
| nanjsk | 0:73a312631ec9 | 2 | #include "EthernetInterface.h" |
| nanjsk | 0:73a312631ec9 | 3 | #include "SNTPClient.h" |
| nanjsk | 0:73a312631ec9 | 4 | #include "SHTx/sht15.hpp" |
| nanjsk | 0:73a312631ec9 | 5 | |
| nanjsk | 0:73a312631ec9 | 6 | uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x11, 0x22, 0xab}; |
| nanjsk | 0:73a312631ec9 | 7 | |
| nanjsk | 0:73a312631ec9 | 8 | Serial pc(USBTX,USBRX); |
| nanjsk | 0:73a312631ec9 | 9 | EthernetInterface eth; |
| nanjsk | 0:73a312631ec9 | 10 | datetime ntptime; |
| nanjsk | 0:73a312631ec9 | 11 | DigitalOut busy(LED1); |
| nanjsk | 0:73a312631ec9 | 12 | SHTx::SHT15 sensor(D2, D3); |
| nanjsk | 0:73a312631ec9 | 13 | |
| nanjsk | 0:73a312631ec9 | 14 | struct tm timeinfo; |
| nanjsk | 0:73a312631ec9 | 15 | |
| nanjsk | 0:73a312631ec9 | 16 | int main() |
| nanjsk | 0:73a312631ec9 | 17 | { |
| nanjsk | 0:73a312631ec9 | 18 | pc.baud(115200); |
| nanjsk | 0:73a312631ec9 | 19 | wait(0.5f); |
| nanjsk | 0:73a312631ec9 | 20 | pc.printf("Hello WIZwiki-W7500!\n\r"); |
| nanjsk | 0:73a312631ec9 | 21 | pc.printf("===========================================\n\r"); |
| nanjsk | 0:73a312631ec9 | 22 | |
| nanjsk | 0:73a312631ec9 | 23 | |
| nanjsk | 0:73a312631ec9 | 24 | eth.init(mac_addr); //Use DHCP |
| nanjsk | 0:73a312631ec9 | 25 | printf("Check Ethernet Link\r\n"); |
| nanjsk | 0:73a312631ec9 | 26 | while(1) //Wait link up |
| nanjsk | 0:73a312631ec9 | 27 | { |
| nanjsk | 0:73a312631ec9 | 28 | if(eth.link() == true) |
| nanjsk | 0:73a312631ec9 | 29 | break; |
| nanjsk | 0:73a312631ec9 | 30 | } |
| nanjsk | 0:73a312631ec9 | 31 | |
| nanjsk | 0:73a312631ec9 | 32 | printf("Link up\r\n"); |
| nanjsk | 0:73a312631ec9 | 33 | printf("Getting IP address by DHCP...\r\n"); |
| nanjsk | 0:73a312631ec9 | 34 | eth.connect(); |
| nanjsk | 0:73a312631ec9 | 35 | printf("Server IP Address is %s\r\n", eth.getIPAddress()); |
| nanjsk | 0:73a312631ec9 | 36 | |
| nanjsk | 0:73a312631ec9 | 37 | printf("Getting time information by using NTP...\r\n"); |
| nanjsk | 0:73a312631ec9 | 38 | |
| nanjsk | 0:73a312631ec9 | 39 | SNTPClient sntp("time.nist.gov", 40); // timezone: Korea, Republic of |
| nanjsk | 0:73a312631ec9 | 40 | sntp.connect(); |
| nanjsk | 0:73a312631ec9 | 41 | if(sntp.getTime(&ntptime) == true) |
| nanjsk | 0:73a312631ec9 | 42 | { |
| nanjsk | 0:73a312631ec9 | 43 | printf("%d-%d-%d, %02d:%02d:%02d\r\n", ntptime.yy, ntptime.mo, ntptime.dd, ntptime.hh, ntptime.mm, ntptime.ss); |
| nanjsk | 0:73a312631ec9 | 44 | printf("Completed Get and Set Time\r\n\r\n"); |
| nanjsk | 0:73a312631ec9 | 45 | } |
| nanjsk | 0:73a312631ec9 | 46 | else |
| nanjsk | 0:73a312631ec9 | 47 | { |
| nanjsk | 0:73a312631ec9 | 48 | while(sntp.getTime(&ntptime) == true) |
| nanjsk | 0:73a312631ec9 | 49 | { |
| nanjsk | 0:73a312631ec9 | 50 | break; |
| nanjsk | 0:73a312631ec9 | 51 | } |
| nanjsk | 0:73a312631ec9 | 52 | } |
| nanjsk | 0:73a312631ec9 | 53 | |
| nanjsk | 0:73a312631ec9 | 54 | sensor.setOTPReload(false); |
| nanjsk | 0:73a312631ec9 | 55 | sensor.setResolution(true); |
| nanjsk | 0:73a312631ec9 | 56 | while(1) |
| nanjsk | 0:73a312631ec9 | 57 | { |
| nanjsk | 0:73a312631ec9 | 58 | busy = true; |
| nanjsk | 0:73a312631ec9 | 59 | sensor.update(); |
| nanjsk | 0:73a312631ec9 | 60 | busy = false; |
| nanjsk | 0:73a312631ec9 | 61 | |
| nanjsk | 0:73a312631ec9 | 62 | sntp.getTime(&ntptime); |
| nanjsk | 0:73a312631ec9 | 63 | printf("< The current time : %d-%d-%d, %02d:%02d:%02d >\r\n", ntptime.yy, ntptime.mo, ntptime.dd, ntptime.hh, ntptime.mm, ntptime.ss); |
| nanjsk | 0:73a312631ec9 | 64 | |
| nanjsk | 0:73a312631ec9 | 65 | // Temperature in celcius |
| nanjsk | 0:73a312631ec9 | 66 | sensor.setScale(false); |
| nanjsk | 0:73a312631ec9 | 67 | pc.printf("Temperature [ %3.2f C ]\r\n", sensor.getTemperature()); |
| nanjsk | 0:73a312631ec9 | 68 | |
| nanjsk | 0:73a312631ec9 | 69 | // Temperature in fahrenheit |
| nanjsk | 0:73a312631ec9 | 70 | sensor.setScale(true); |
| nanjsk | 0:73a312631ec9 | 71 | pc.printf(" [ %3.2f F ]\r\n", sensor.getTemperature()); |
| nanjsk | 0:73a312631ec9 | 72 | |
| nanjsk | 0:73a312631ec9 | 73 | // Relative Humidity |
| nanjsk | 0:73a312631ec9 | 74 | pc.printf("Humdity [ %3.2f %% ]\r\n", sensor.getHumidity()); |
| nanjsk | 0:73a312631ec9 | 75 | |
| nanjsk | 0:73a312631ec9 | 76 | pc.printf("===========================================\n\r"); |
| nanjsk | 0:73a312631ec9 | 77 | wait(5); |
| nanjsk | 0:73a312631ec9 | 78 | |
| nanjsk | 0:73a312631ec9 | 79 | } |
| nanjsk | 0:73a312631ec9 | 80 | |
| nanjsk | 0:73a312631ec9 | 81 | } |