2015/08/21 - [IT / Development/mbed] - [mbed] WIZwiki-W7500으로 SHT15 온/습도센서값을 읽어보자.


지난 글에는 그냥 SHT15의 값만 프린트 해주는 예제를 작성했었다. 이번에는 NTP를 이용하여 네트웍에서 시간정보를 읽어와서 현재의 시간과 온/습도 값을 표시해 보자.

우선 NTP 라이브러리가 mbed에 있는지 확인해 보았다.

NTP로 검색을 해보니 4개가 나왔는데, 과거에 WIZnet에서 근무했던 Raphael 님이 만든 라이브러리가 있어서 이것을 Import해서 사용했다.

코드 적용에는 큰 어려움이 없었고, DHCP 사용해서 공유기에서 IP를 할당 받아서 구현을 했다. 자세한 내용은 코드를 참고해 보길 바란다.

#include "mbed.h"
#include "EthernetInterface.h"
#include "SNTPClient.h"
#include "SHTx/sht15.hpp"

uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x11, 0x22, 0xab};

Serial pc(USBTX,USBRX);
EthernetInterface eth;
datetime ntptime;
DigitalOut busy(LED1);
SHTx::SHT15 sensor(D2, D3);

struct tm timeinfo;

int main()
{
    pc.baud(115200);
    wait(0.5f);
    pc.printf("Hello WIZwiki-W7500!\n\r");
    pc.printf("===========================================\n\r");
    
    
    eth.init(mac_addr); //Use DHCP
    printf("Check Ethernet Link\r\n");
    while(1) //Wait link up
    {
        if(eth.link() == true) 
            break;
    }
    
    printf("Link up\r\n");
    printf("Getting IP address by DHCP...\r\n");
    eth.connect();
    printf("Server IP Address is %s\r\n", eth.getIPAddress());
    
    printf("Getting time information by using NTP...\r\n");
    
    SNTPClient sntp("time.nist.gov", 40);   // timezone: Korea, Republic of
    sntp.connect();
    if(sntp.getTime(&ntptime) == true)
    {
          printf("%d-%d-%d, %02d:%02d:%02d\r\n", ntptime.yy, ntptime.mo, ntptime.dd, ntptime.hh, ntptime.mm, ntptime.ss);
          printf("Completed Get and Set Time\r\n\r\n");
    }
    else
    {
        while(sntp.getTime(&ntptime) == true)
        {
            break;
        }
    }
    
    sensor.setOTPReload(false);
    sensor.setResolution(true);
    while(1)
    {
        busy = true;
        sensor.update();
        busy = false;
        
        //The current time
        sntp.getTime(&ntptime);
        printf("< The current time : %d-%d-%d, %02d:%02d:%02d >\r\n", ntptime.yy, ntptime.mo, ntptime.dd, ntptime.hh, ntptime.mm, ntptime.ss);
        
        // Temperature in celcius
        sensor.setScale(false);
        pc.printf("Temperature [ %3.2f C ]\r\n", sensor.getTemperature());
        
        // Temperature in fahrenheit
        sensor.setScale(true);
        pc.printf("            [ %3.2f F ]\r\n", sensor.getTemperature());
        
        // Relative Humidity
        pc.printf("Humdity     [ %3.2f %% ]\r\n", sensor.getHumidity());
        
        pc.printf("===========================================\n\r");        
        wait(5);
    }
    
}

5초에 한번씩 현재의 시간과 온/습도 값을 읽어서 시리얼로 출력해주는 코드이다.

위 사진을 보면 현재의 시간과 온/습도 값을 출력하는 코드를 볼수 있다.

mbed에서 작성한 코드는 아래 URL에서 확인 할수 있다.

https://developer.mbed.org/users/nanjsk/code/SNTP_SHT15_WIZwizki-W7500/

이상.

+ Recent posts