개요

디바이스가 직접 네트워크를 사용할 수 있는 환경인 경우, 제공되는 NTP 라이브러리를 사용하여 시간 정보를 원활하게 얻어올 수 있다.

NTP(Network Time Protocol)에 대한 내용은 Wiki 페이지 참조: Network Time Protocol

이 글에서는 네트워크에 직접 연결하지 못하는 디바이스를 가정하여, S2E(Serial to ethernet) 디바이스를 사용해 NTP 서버에서 시간 정보를 받아오는 내용에 대해 정리한다.

S2E 디바이스는 Serial to ethernet 디바이스로, 이름에서 예상할 수 있듯 시리얼과 이더넷 간 데이터를 변환해주는 역할을 하는 장치이다.

테스트 구성은 간단하다.

시리얼 인터페이스로 요청 데이터를 전송하면 이더넷으로 패킷이 변환되어 설정된 Remote Host(여기에서는 NTP 서버)로 전송되고, 서버에서 응답이 오면 이더넷으로 수신하고 다시 시리얼 데이터로 변환되어 정보를 받는 구조이다.

(구성도 업데이트 예정)

제품은 WIZnet의 WIZ750SR-TTL과 EVB를 결합한 형태로 사용했다.

WIZ750SR은 W7500P MCU가 탑재된 S2E 제품으로 핀 헤더와 RJ-45 커넥터를 포함한 형태로 디자인 된 제품이다.

자세한 내용은 아래 링크에서 참조할 수 있다.

준비물

  • WIZ750SR-TTL with EVB
  • Ethernet cable
  • USB to RS-232 cable
  • Micro 5 pin USB cable
    • 전원 공급 및 debug 메시지 모니터링

WIZ750SR 설정

WIZnet에서 WIZ750SR 제품을 설정할 수 있는 GUI 기반 Configuration Tool(이하 Config Tool)을 지원하고 있다.

Serial Command mode를 통한 설정도 지원하므로 자신에게 맞는 방법으로 진행하면 된다.

먼저 Config tool을 사용하여 아래와 같이 동작 모드 및 연결 정보를 설정했다.

  • Remote host / port
    • Remote host: pool.ntp.org
    • Remote port: 123
  • Opertaion mode: UDP
  • Local port: 123

설정값을 입력하고 상단의 Setting 버튼을 누르면 디바이스 설정이 변경 및 저장되고 디바이스가 자동 Reset 된다.

Device configuration complete 라는 메시지와 함께 팝업이 나타났다면 설정이 잘 된것이다.

설정이 잘 되지 않는다면 Config Tool의 FAQ 페이지를 참조한다.

디버그 메시지 확인 (옵션)

디버그 포트를 통해 동작상태를 모니터링 할 수 있다.

EVB를 사용하는 경우 FTDI 칩이 포함되어 있어서 Micor 5pin USB 케이블을 통해 연결하면 전원 공급 및 디버그 메시지 확인을 할 수 있다.

Python Code

WIZ750SR의 시리얼 인터페이스로 데이터 송신 및 수신 데이터를 변환하는 부분은 Python 코드를 사용했다.

NTP 관련 코드는 아래 링크에서 참조했으며, 원 코드에서 socket 통신으로 되어있는 부분을 serial 통신으로 변경하여 사용했다.

  • https://stackoverflow.com/a/56613595/8515109

인식되는 COM 포트는 달라질 수 있으므로, 장치관리자에서 확인 후 진행한다.

패키지 설치

시리얼로 데이터를 전송하기 위해 pyserial 패키지를 설치한다.

pip install pyserial

또는,
python -m pip install pyserial

실행

python requestTimefromNtp.py 

NTP 서버로부터 시간 정보를 받아 Timestamp 값을 얻고, %Y-%m-%d %H:%M:%S 형태로 출력하는 예제 코드이다.

현재 시간이 출력된다면 시간 정보를 잘 가져온 것이다.

Reference