ここで、このコードを使用して NTP サーバーに接続するように Arduino をコーディングしました。
http://www.instructables.com/id/Arduino-Internet-Time-Client/step2/Code/
getTimeAndDate と呼ばれるメソッドと sendNTPpacket を見てください。
それが送信されるパケットです。これはバッファを設定しており、48 文字のバッファに設定されている 2 進数 (0b) と 16 進数 (0x) を示しています。アドレスは NTP タイム サーバーです。
memset(packetBuffer, 0, NTP_PACKET_SIZE);
packetBuffer[0] = 0b11100011;
packetBuffer[1] = 0;
packetBuffer[2] = 6;
packetBuffer[3] = 0xEC;
packetBuffer[12] = 49;
packetBuffer[13] = 0x4E;
packetBuffer[14] = 49;
packetBuffer[15] = 52;
Udp.beginPacket(address, 123);
Udp.write(packetBuffer,NTP_PACKET_SIZE);
Udp.endPacket();
受信したパケットは次のようになります。
Udp.read(packetBuffer,NTP_PACKET_SIZE); // read the packet into the buffer
unsigned long highWord, lowWord, epoch;
highWord = word(packetBuffer[40], packetBuffer[41]);
lowWord = word(packetBuffer[42], packetBuffer[43]);
epoch = highWord << 16 | lowWord;
epoch = epoch - 2208988800 + timeZoneOffset;
flag=1;
setTime(epoch);
setTime は arduino 時間ライブラリの一部であるため、エポックはここで提案されているように 1900 年 1 月 1 日からの秒数である必要があります (エポックを検索)。
https://en.wikipedia.org/wiki/Network_Time_Protocol
ただし、C#バージョンが必要な場合は、ここで見つけ、例外の回答の下でコードをコンパイルすると機能します。これはおそらくあなたにとってより意味のあるものであり、エポック 1/1/1900 の使用を示しています。
C# を使用して NTP サーバーにクエリを実行する方法は?
類似性を簡単に確認できます。