-3
이 코드는, NTP 연결 코드를 Arduino이 원하는 UTC 계산 (DD-MM-YYYY)아두 이노 NTP, 나는 데이터를 인쇄하려면 (DD-MM-YYYY)
지원 LIB 및 헤더 :
#include "WiFiEsp.h"
#include "WiFiEspUdp.h"
//kor UTC time + 9
// Emulate Serial1 on pins 6/7 if not present
#ifndef HAVE_HWSERIAL1
#include "SoftwareSerial.h"
#include "TimeLib.h"
SoftwareSerial Serial1(8, 9); // RX, TX
#endif
전역 변수 :
char ssid[] = "xxxxxxx"; // your network SSID (name)
char pass[] = "xxxxxxx"; // your network password
int status = WL_IDLE_STATUS; // the Wifi radio's status
char timeServer[] = "0.asia.pool.ntp.org"; // NTP server
unsigned int localPort = 2390; // local port to listen for UDP packets
const int NTP_PACKET_SIZE = 48; // NTP timestamp is in the first 48 bytes of the message
const int UDP_TIMEOUT = 2000; // timeout in miliseconds to wait for an UDP packet to arrive
byte packetBuffer[NTP_PACKET_SIZE]; // buffer to hold incoming and outgoing packets
// A UDP instance to let us send and receive packets over UDP
WiFiEspUDP Udp;
모든-코드 :
void setup()
{
// initialize serial for debugging
Serial.begin(9600);
// initialize serial for ESP module
Serial1.begin(9600);
// initialize ESP module
WiFi.init(&Serial1);
// check for the presence of the shield
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
// don't continue
while (true);
}
// attempt to connect to WiFi network
while (status != WL_CONNECTED) {
Serial.print("Attempting to connect to WPA SSID: ");
Serial.println(ssid);
// Connect to WPA/WPA2 network
status = WiFi.begin(ssid, pass);
}
Serial.println("You're connected to the network");
Udp.begin(localPort);
}
void loop()
{
sendNTPpacket(timeServer); // send an NTP packet to a time server
// wait for a reply for UDP_TIMEOUT miliseconds
unsigned long startMs = millis();
while (!Udp.available() && (millis() - startMs) < UDP_TIMEOUT) {}
Serial.println(Udp.parsePacket());
if (Udp.parsePacket()) {
Serial.println("packet received");
// We've received a packet, read the data from it into the buffer
Udp.read(packetBuffer, NTP_PACKET_SIZE);
// the timestamp starts at byte 40 of the received packet and is four bytes,
// or two words, long. First, esxtract the two words:
unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
// combine the four bytes (two words) into a long integer
// this is NTP time (seconds since Jan 1 1900):
unsigned long secsSince1900 = highWord << 16 | lowWord;
Serial.print("Seconds since Jan 1 1900 = ");
Serial.println(secsSince1900);
// now convert NTP time into everyday time:
Serial.print("Unix time = ");
// Unix time starts on Jan 1 1970. In seconds, that's 2208988800:
const unsigned long seventyYears = 2208988800UL;
// subtract seventy years:
unsigned long epoch = (secsSince1900 - seventyYears)+32400;
// unsigned long epoch = (secsSince1900 - seventyYears);
// print Unix time:
Serial.println(epoch);
// print the hour, minute and second:
Serial.println("The UTC time is "); // UTC is the time at Greenwich Meridian (GMT)
Serial.println((epoch/31556926)+1970);
// Serial.println((epoch/86400L)%7);
//0=Thursday,1=Friday,2=Saturday,3=Sunday,4=Monday,5=Tuesday,6=Wednesday
Serial.print((epoch % 86400L)/3600); // print the hour (86400 equals secs per day)
Serial.print(':');
if (((epoch % 3600)/60) < 10) {
// In the first 10 minutes of each hour, we'll want a leading '0'
Serial.print('0');
}
Serial.print((epoch % 3600)/60); // print the minute (3600 equals secs per minute)
Serial.print(':');
if ((epoch % 60) < 10) {
// In the first 10 seconds of each minute, we'll want a leading '0'
Serial.print('0');
}
Serial.println(epoch % 60); // print the second
}
// wait ten seconds before asking for the time again
delay(1000);
}
// send an NTP request to the time server at the given address
void sendNTPpacket(char *ntpSrv)
{
// set all bytes in the buffer to 0
memset(packetBuffer, 0, NTP_PACKET_SIZE);
// Initialize values needed to form NTP request
// (see URL above for details on the packets)
packetBuffer[0] = 0b11100011; // LI, Version, Mode
packetBuffer[1] = 0; // Stratum, or type of clock
packetBuffer[2] = 6; // Polling Interval
packetBuffer[3] = 0xEC; // Peer Clock Precision
// 8 bytes of zero for Root Delay & Root Dispersion
packetBuffer[12] = 49;
packetBuffer[13] = 0x4E;
packetBuffer[14] = 49;
packetBuffer[15] = 52;
// all NTP fields have been given values, now
// you can send a packet requesting a timestamp:
Udp.beginPacket(ntpSrv, 123); //NTP requests are to port 123
Serial.println();
Udp.write(packetBuffer, NTP_PACKET_SIZE);
Udp.endPacket();
}
시리얼 모니터 인쇄 :
packet received
Seconds since Jan 1 1900 = 3699648843
Unix time = 1490692443
The UTC time is
2017
9:14:03
시대는 UTC의 값은 UTC 값 계산 DD-MM-YYYY를 원한다.