2026-8/24
都市部ではNW経由のNTP利用の方が圧倒的に簡単便利、天文学とか物理学、はたまた発変電設備制御とか「需要」が無かったが、遅ばせながら最近の状況なんかAI検索・検討。
---
(AI (Gemini)検索検討)
“(よく使われる)Raspberry Pi よりも発熱が少ない、小規模RTOSや、NTPd などを動かせられる程度、放熱配慮がいらない現行品の市販基板の候補は何が有るかな ?
小規模RTOS(FreeRTOSやZephyrなど)が動作し、NTPd(またはSNTP)による時刻同期ができるレベルで、完全に放熱対策(ファンや巨大なヒートシンク)が不要な省電力デバイスであれば、「有線LAN(Ethernet)付きの高性能マイコン」または「超小型の省電力SBC(シングルボードコンピュータ)」が最適な候補になります。
NTPサーバー(またはクライアント)としての時間精度や運用スタイルに合わせて、以下の3つの選択肢がおすすめです。
1. Raspberry Pi Pico 2 + 有線LAN拡張(最有力候補)
ラズパイ4/5のような発熱は一切なく、放熱対策を完全に無視できる最も手軽な構成です。
2. M5Stack PoE系 / ESP32 有線LANボード
Wi-FiやBluetoothで有名なESP32マイコンですが、有線LAN(Ethernet)を搭載したモデルが多数存在します。
- 特徴: 「M5Stack」シリーズのPoE対応モデルや、汎用の「ESP32-Ethernet-Kit」などがあります。PoE対応であれば、LANケーブル1本で給電と通信が完結するため、配線も非常にスマートです。
- OS: FreeRTOS(ESP-IDFのベースOSとして標準組み込み)
- 発熱/消費電力: 数W以下。ケースに閉じ込めても全く問題ありません。
- NTPの運用: 起動してすぐにNTPサーバーから時刻を取得するコードが数行で書けます。簡易的なNTPサーバー(ストラタス2以下)として他デバイスに時刻を配るプログラムの作例も豊富です。
3. Raspberry Pi Zero 2 W(Linuxでフル機能のNTPdを動かす場合)
「RTOS自作ではなく、使い慣れたLinux(Raspberry Pi OS)上の本物の
ntpd や chrony をそのまま動かしたい」という場合はこちらになります。- 特徴: ラズパイ4/5とは異なり、CPUが控えめなためファンレス運用が前提の設計です。 microUSB-Ethernet変換アダプタを使えば有線LAN化できます。
- OS: Linux(軽量なRaspberry Pi OS Lite)
- 発熱/消費電力: アイドル時で零点数W、負荷時でも1〜2W程度。金属ケースに入れるだけで十分で、熱暴走の心配はありません。
- NTPの運用: Linux標準の高度な時間同期(JitterやWanderの補正、高精度な時刻保持)がそのまま利用可能です。
選定のポイント(時間精度について)
NTPを運用するにあたり、1点だけ注意が必要です。
- 電源オフ時の時刻保持: マイコンボードやRaspberry Pi Zeroには、標準で「RTC(リアルタイムクロック)用のバックアップ電池」がありません。電源を切ると時刻がリセットされます。 [2]
- 対策: 電源遮断後も正しい時刻を維持させたい場合、またはGPS(GNSS)等から正確な1PPS信号を受けて高精度な「ストラタス1」のNTPサーバーを作りたい場合は、数百円の「外付けRTCモジュール(DS3231など)」や「GPSモジュール」をGPIOピンにつなぐ構成が定番です。 [3]
もし構築したいのが「外部のNTPから時刻を同期する端末(クライアント)」か、あるいは「ローカル環境内で他デバイスに時刻を配る(簡易サーバー)」かによっても難易度が変わります。どちらの用途を想定されていますか?
“最初からRTCとRJ45を積んでいるので最小構成の製品には何が有るかな ?
最初から「内部RTC」と「有線LAN(RJ45コネクタ)」を1枚の基板に全て統合しており、放熱配慮を全く気にせずにNTPdや小規模RTOSを動かせる、最小構成の製品としては以下の選択肢が代表的です。
多くのマイコン(RP2040/RP2350やESP32など)には、チップ自体にカレンダー機能付きのRTCが最初から内蔵されています。そのため、RJ45コネクタをオンボード搭載したマイコン一体型ボードを選べば、外付け部品(ドーターボードやシールド)を一切追加せず、ボード単体で目的の「最小構成」を構築できます。 [1]
1. WIZnet W5100S-EVB-Pico / Pico2 (最も手軽な最小構成)
Raspberry Piの公式マイコンチップと、WIZnetのハードウェアTCP/IPスタック付きイーサネット(RJ45)を1枚に凝縮したメーカー純正の評価ボードです。
- 仕様: 最新の高性能マイコン RP2350(150MHz デュアルコアM33)に、最初から有線LAN(RJ45)コントローラを搭載しています。
- RTC: チップ内部にRTC(1基)を標準内蔵しており、時刻管理が可能です。
- メリット: 前世代の「W5100S-EVB-Pico」 に比べ、SRAMが520KBに大幅増量されました。FreeRTOSやZephyrといった小規模RTOSにTCP/IPスタック(lwIPなど)を載せて動かすのにも、メモリの余裕が十分にあります。
- 価格感: スイッチサイエンス などの国内正規代理店で、約2,400〜2,500円前後と非常に安価です。 [1]
2. Waveshare RP2040-ETH (超小型・省スペース構成)
Picoサイズよりもさらにフットプリントを削り、RJ45コネクタと最小限の周辺回路だけで構成された超小型ボードです。
- 仕様: RP2040にイーサネット・シリアル変換IC(CH9120)とRJ45を直載せしたミニマル仕様です。
- RTC: もちろんRP2040に内蔵されているRTCがそのまま使えます。
- メリット: フットプリントが非常に小さいため、ちょっとした隙間ケースに放り込んで、ファンレスの自作NTPアプライアンスを作るのに向いています。
- 価格感: Amazon等で約2,300円〜4,500円程度で流通しています。
3. ESP32搭載 有線LAN開発ボード (FreeRTOS標準ビルド)
ESP32シリーズは、メーカー(Espressif)の標準開発環境である「ESP-IDF」が最初からFreeRTOSをベースとして動作するため、RTOSアプリやNTP同期コードの親和性が極めて高いのが特徴です。
- 仕様: 最新のRISC-Vデュアルコア(360MHz)である「ESP32-P4」を採用した有線LAN(10/100M)ボードです。
- RTC/電源: チップ内蔵RTCに加え、PoE(Power over Ethernet)給電に対応しています。LANケーブル1本挿すだけで電源供給と通信が同時にまかなえるため、ACアダプタすら不要の真の最小構成(ファンレス・常時稼働)が作れます。
- 価格感: Banggood 等で5,000円台前半で購入可能です。 [2]
- 仕様: 昔からオープンハードウェアの定番として評価の高い、LAN9512等のPHYチップとRJ45、PoE回路をワンボードにした信頼性の高いESP32基板です。こちらも内部RTCがそのまま利用できます。
- 価格感: DigiKey やMouserで約4,700円〜6,000円程度です。 [2]
💡 運用上のワンポイント(バックアップ電池について)
これらのボードはすべて「最初からRTCとRJ45がある最小構成」を満たしますが、ボード単体では「電源が完全に落ちたときのバックアップ電池(CR1220など)」を保持する専用ソケットがないものがほとんどです。
- 完全スタンドアロンで運用する場合: 停電や再起動に備えて電源オフ時も正確な秒数を刻み続けたい(=完全にネットワークから隔離された環境でも一発目の時刻を正しく出したい)場合は、コイン電池ホルダーのついた格安のRTCモジュール(DS3231など)をI2Cピンに1本這わせるか、あるいは「起動時に一回だけ外部の親NTP(インターネット側等)から時刻を引っ張ってきて内部RTCを校正する」というソフトウェア側の運用でカバーするのが一般的です。 [3]
今回は、C言語等でゴリゴリ軽量なファームウェアを書く(RP2350やESP32-IDF)方向性と、用意されているサンプルコード(Arduino/MicroPython等)を使ってサクッと立ち上げる方向性のどちらをイメージされていますか?好みの開発環境があればそれに合わせてさらに絞り込めます。
「ありきたりのARM-Linux環境で、設定はWebページから、10~20台のクライアントに時刻を配る簡易NTPサーバーを構築したい。できればWi-Fi拡張(ドーターボード)の選択肢も欲しい」という要件であれば、「OpenWrt(Linux)があらかじめ導入されている、または簡単に導入できる超小型ルーター(SBC)基板」が最も簡単で確実な選択肢になります。
ファームウェアを一からコンパイルしたり、Linuxの複雑なネットワークコマンドを叩いたりすることなく、最初からブラウザの管理画面(WebUI)を使ってDHCPクライアントの設定やネットワーク管理ができるため、最もハードルが低くなります。
おすすめの具体的な候補は以下の通りです。
💡 最もおすすめ:FriendlyELEC「NanoPi R1」または「NanoPi R2S」シリーズ
FriendlyELEC社(旧FriendlyARM)の「NanoPi」シリーズは、Linuxベースのルーター向けOSである「OpenWrt」が公式に広くサポートされており、今回の用途に最も合致しています。
- NanoPi R1(オンボードWi-Fi構成):
- 特徴: チップ(Allwinner H3/ARMアーキテクチャ)自体が低消費電力で、ラズパイのような巨大ファンは不要です。最初から有線LAN(RJ45)ポートを2つ搭載し、さらに基板上にWi-Fiアンテナ端子と無線モジュールが直載せされています。
- Web設定画面: 「OpenWrt(FriendlyWrt)」イメージをmicroSDカードに書き込んで起動するだけで、おなじみのWeb管理画面(LuCI)が立ち上がります。DHCPクライアントの設定や、ポートの割り振りがすべてブラウザから行えます。
- 簡易NTPサーバー機能: OpenWrtには標準で軽量なNTPサーバー機能(
sysntpdまたはchrony)が内蔵されており、設定画面のチェックボックスをオンにするだけで、ローカル環境内の10〜20台のクライアントへの時刻配信サーバーとして動作します。 - RTC: 基本構成として内蔵されていますが、電源を完全に切った時のためのバックアップ電池(コイン電池)用ピンヘッダも用意されています。 [1, 2]
- NanoPi R2S + Wi-Fiドーター(ドーターボード構成):
- 特徴: R1よりもCPU性能が少し上がったモデルで、こちらは標準では有線LANのみです。しかし、メーカー純正オプションやサードパーティから「専用のWi-Fiドーター(シールド基板、またはUSBドーター)」が提供されており、文字通り「必要に応じてWi-Fiを追加する」拡張ラインナップが形成されています。
⚙️ 実装と運用イメージ(なぜこれが「技術力いらず簡単」なのか)
- 初期セットアップ: SDカードに公式のOpenWrtイメージを焼き、有線LANでPCと繋ぎます。
- ブラウザでアクセス: PCから
http://192.168.2.1などの管理画面にアクセスします。 - DHCPクライアント化: 「Network」設定から、上位のルーターからIPを自動取得(DHCPクライアント)するようにポチポチと設定を切り替えるだけです。
- NTPサーバー有効化: 「System」メニュー内にある「Time Synchronization」で、外部の親NTP(
ntp.nict.jpなど)と同期させつつ、「Provide NTP server(NTPサーバーとして動作する)」にチェックを入れるだけで簡易サーバーが完成します。10~20クライアント程度なら負荷は数%にも達しません。
⚠️ 注意点:電源オフ時の完全スタンドアロン運用
上位のネットワーク(インターネット)がつながっている環境であれば、起動時に自動でDHCPでIPを取り、外部の正確なNTPから時刻を引っ張ってきて内部RTCを校正して配るので、何も周辺部品は必要ありません。
もし「完全にインターネットから遮断された隔離ローカル環境」で、かつ「このボードの電源を何度もON/OFFする」という運用の場合は、前述の通りコイン電池(CR1220など)を基板のRTCピンに繋ぐか、安価な外付けRTCモジュールをI2Cに挿す小加工が必要になります(インターネットに常時繋がっているか、電源を入れっぱなしにするなら不要です)。
まずはこの「NanoPi + OpenWrtによるブラウザ設定」の方向性で進めてみるのはいかがでしょうか?もしよろしければ、このボードを「インターネットに繋がっているルーターの下にぶら下げる」予定か、それとも「完全にネット無しの閉じたローカル空間に置く」予定かを教えていただければ、起動時の時刻補正の挙動についてより具体的にお答えできます。
“それは良いと思うけど、消費電力は大きそう。前出の、Waveshare RP2040-ETH 、WIZnet W5100S-EVB-Pico 2 辺りだと、どんな感じの構成が出来る ?
“Z3805A内部のFPGAには、コネクタなどへ配線されているのに使用されていない入出力が結構有り、解析中。ファームウェアの内容が問題なんだがまず解っているのは、RS232Cのタイムコード出力端子+1PPS信号が利用出来(5V_TTL、又は、RS232Cレベル)、更にどうも、IRIG-B出力(5V_TTL互換)、タイムトリガ入力(5V_TTL互換)、などが使える可能性が出て来た。NMEAについては、バッファを入れて、GPSモジュール(Furuno GT8031B, 3.3Vロジック)と本体のCPU(5Vロジック)間の信号がタップ可能。
「ありきたりのARM-Linux」をベースにして、ネットワークの設定やNTPサーバーの管理をすべてWebの管理画面(ブラウザ)からマウス操作で完結させたいということであれば、Linuxのコマンド操作や複雑なプログラム開発はほぼ不要になります。
10〜20台のクライアントへの時刻配信(NTPサーバー機能)、DHCPクライアント、Web設定ページ、そして低発熱・省電力という条件を満たし、さらに将来的なWi-Fi拡張(ドーターボード等)の選択肢が用意されている実用的なハードウェア候補を厳選しました。
➡️ おすすめのARM-Linuxボード候補
1. FriendlyElec NanoPi R2S Plus(最有力候補)
手のひらにすっぽり収まるメタルケース付きの、極小・省電力なARM-Linuxルーターボードです。
- 仕様: Rockchip RK3328(ARM Cortex-A53 4コア)を搭載。最初から有線LAN(RJ45)と、システム維持用のRTC(バックアップ電池基板接続用ピン)を備えています。
- Wi-Fiドーター/拡張: 「Plus」モデルは基板上に最初からWi-Fi/Bluetoothチップをオンボード搭載、もしくは専用の小型M.2 Wi-FiモジュールやUSBドーターをシームレスに追加できるラインナップ展開になっています。
- Web設定ページ: 標準で「FriendlyWrt(OpenWrtベース)」という、ルーター・サーバー管理に特化したLinux OSが公式提供されています。SDカードに書き込んで起動するだけで、洗練されたWeb設定画面(LuCI)が立ち上がります。
- 管理の手軽さ: ブラウザの画面上から「DHCPクライアントの設定」や「NTPサーバー(chrony / ntpd)の有効化」のチェックを入れるだけで、一切コマンドを打たずに10〜20台規模の簡易NTPサーバーを構築できます。ファンレスの金属ケース(標準付属)に入っているため、放熱対策も完璧です。
2. Raspberry Pi Zero 2 W + イーサネット・RTCドーターボード
使い慣れたラズパイのエコシステムを使いつつ、ドーターボード(拡張シールド)を「重ねる」ことで最小構成を作るアプローチです。
- 仕様: 4コアの省電力ARMプロセッサを搭載。Zero 2 W単体ではWi-Fiのみですが、「RJ45有線LAN + RTC(電池ソケット付き)」が1枚になったサードパーティ製の拡張ドーターボード(Waveshare製など)が多数市販されており、ピンヘッダにカチッと重ねるだけで目的のハードウェアが完成します。
- Web設定ページ: 通常のRaspberry Pi OS(Linux)を入れた後、オープンソースの軽量Web管理ツールである「Cockpit」や「Webmin」をパッケージ感覚で導入します。
- 管理の手軽さ: 導入後はブラウザからシステムの稼働状況、ネットワーク設定(DHCP)、NTPサービスの死活監視や時刻校正がグラフィカルに行えます。フル負荷をかけなければ発熱は非常に小さく、ファンレスで常時稼働可能です。
3. Radxa Rock Pi 4 シリーズ(または 3A / 3C)
Raspberry Pi 4とほぼ同形状ながら、より産業・組み込み向けに最適化されたARM-Linuxボードです。
- 仕様: 基板上に最初から独立したRTC(電池コネクタ付き)とRJ45を標準装備しています。
- Wi-Fiドーター/拡張: Wi-Fi非搭載モデルを選んだ場合でも、基板上の専用スロットに公式の「Wireless Module(Wi-Fi/BTドーターボード)」を後から差し込んでネジ留めできる設計になっています。
- Web設定ページ: Debian Linuxなどをインストールし、上記の「Webmin」などを組み合わせることで、Webブラウザからのネットワーク・NTP一元管理環境が作れます。
💡 技術的に楽をするためのシステム構成案
最も技術的なハードルが低く、今回の要件に合致するのは「NanoPi R2S Plus + FriendlyWrt(OpenWrt)」の組み合わせです。
- なぜOpenWrt系が良いか: 一般的なLinux(Ubuntuなど)でWeb設定ページやNTP/DHCPを動かそうとすると、内部でWebサーバー(ApacheやNginx)を立てて、設定用スクリプトを連動させるセットアップが必要になり、やや難易度が上がります。
- OpenWrtのメリット: 最初から「ルーターやネットワークアプライアンス(NTPサーバー等)」として動かすために作られた専用Linuxなので、最初から軽量なWeb画面が裏方のシステムと完全に連動しています。
もし、さらに具体的な製品の入手性や、設定ツールの導入手順など、より深く掘り下げたい部分があればいつでもおっしゃってください。
“それは良いと思うけど、消費電力は大きそう。前出の、Waveshare RP2040-ETH 、WIZnet W5100S-EVB-Pico 2 辺りだと、どんな感じの構成が出来る ?
NanoPiなどのLinux(SBC)ボードは、アイドル時でも通常 1W〜3W(約200mA〜600mA) ほど消費するため、常時稼働の超低消費電力システムとしては少し重く感じられるかもしれません。一方で、Waveshare RP2040-ETH や WIZnet W5100S-EVB-Pico 2 などのマイコンボードであれば、有線LAN通信時でも全体で 0.3W〜0.5W(約60mA〜100mA / 5V) 程度と、消費電力を1/5〜1/10以下に抑えられます。発熱も皆無です。
「これらのマイコンで『Linuxっぽく』Web設定やNTPサーバー、DHCPクライアントを動かしたい」という場合、以下のような構成が可能です。
🛠️ マイコンで実現する「Web設定付きNTPサーバー」のシステム構成例
「マイコンだとC言語で1からネットワークコードを書かないといけないのでは?」と思われるかもしれませんが、現在はArduino IDEやMicroPython/CircuitPythonの開発環境が非常に充実しています。
特にWIZnet W5100S-EVB-Pico 2(RP2350搭載)をベースにする場合、以下のようなステップで「Linuxのルーター」に近い動きをコンパクトに実装できます。
1. DHCPクライアントとNTPサーバー(時刻配信)
- 仕組み: 起動すると、基板の有線LAN(W5100S)を通じて上位のルーターから自動的にIPアドレスを取得します(DHCPクライアント)。その後、インターネット上の公開NTPサーバー(NICTなど)に一度アクセスし、取得した正確な時刻をRP2350の「内蔵RTC」に書き込みます。
- 10〜20台への配信: マイコンのメモリ(RP2350は520KB)であれば、10〜20台のクライアントから同時に時刻問い合わせ(UDP ポート123)が来ても、数KBのバッファで余裕を持って捌けます。
2. Web設定ページの作り方
- 仕組み: マイコン内部で軽量な「Webサーバー(HTTPサーバー)ライブラリ」を動かします。
- 操作: PCやスマホのブラウザからマイコンのIPアドレス(例:
http://192.168.1.50)を叩くと、マイコンが保存している簡易的なHTMLページが表示されます。 - 設定変更: そのWeb画面上に「同期先の親NTPアドレス」や「タイムゾーン」を入力するフォームを作っておけば、ブラウザから設定を書き換えてマイコンのフラッシュメモリ(保存領域)に保存する、というルーターのような運用が可能です。
3. Wi-Fiドーター(拡張)のラインナップについて
- WIZnet公式の拡張: WIZnetからは、Picoのピン互換でWi-Fiをアドオンできるシールドや、最初からWi-Fiをセットにしたバリエーション(W5100S-EVB-Pico-Wirelessなど)が展開されています。
- Waveshareの選択肢: Waveshare製ボードの場合、ESP32(Wi-Fi用コプロセッサ)をオンボードで組み合わせたネットワーク中継用のミニボードなどもラインナップされているため、必要に応じて無線入出力を持たせる設計が選びやすい環境が整っています。
💻 開発を「簡単」にするための具体的なソフトウェア構成
1からソケット通信を書く必要はありません。以下のような既存の資産をそのまま流用するのが最も近道です。
- Arduino環境の「Ethernetライブラリ」を使う場合:
- WIZnetのチップ(W5100S)はArduino標準の
Ethernet.hライブラリでそのまま動きます。 - ライブラリのサンプルコードに最初から「WebServer」と「UdpNtpClient」が用意されているため、この2つのコードをガッチャンコするだけで、「Webページが見られて、NTPで時刻を合わせる」という土台が数時間で完成します。
- WIZnetのチップ(W5100S)はArduino標準の
- MicroPython環境を使う場合:
- Pythonの構文でネットワーク制御が可能です。
ntptimeモジュールで時刻を合わせ、socketで簡易Webページを開くだけなので、コード全体の行数も非常に短く済みます。
- Pythonの構文でネットワーク制御が可能です。
どちらのボードが今回の用途に有利か?
- 確実性と将来性なら:WIZnet W5100S-EVB-Pico 2
最新のRP2350を積んでいるためメモリ(SRAM)が非常に潤沢です。Webサーバーを立ち上げつつ、10〜20台のNTPパケットを処理してもメモリ不足によるハングアップの心配がありません。 - コンパクトさ重視なら:Waveshare RP2040-ETH
前世代のRP2040ですが、今回の「NTP+Web設定」程度ならパワーは十分です。RJ45コネクタと一体化した極小サイズなので、設置場所に困りません。
消費電力を極限まで削りつつ、Linuxルーターのような「DHCPクライアント+Web設定+NTP配信」を手のひらサイズで静かに常時稼働させる構成として、この「Pico有線LANボード+Arduino/MicroPythonの標準ライブラリ流用」は非常に現実的で面白いプロジェクトになると思います。
もし進める場合、Arduino(C++ベース)とMicroPython(Pythonベース)、どちらの言語のほうが少しでも馴染みがありそうですか?あるいは、過去に触ったことのある開発環境などがあれば教えてください。
---
“GPS(1pps と NMEA)、又は、IRIG-B信号を利用出来る場合は ?
通常、WIZnet W5100S-EVB-Pico2 でNTP(時刻同期)を利用するには、公式のMicroPythonサンプルやC/C++ SDK(ioLibrary_Driver)のUDP機能を利用してNTPサーバー(例:
pool.ntp.org)へパケットを送信し、時刻データを受信して内蔵RTCに反映させます。 [1]実装方法の選択肢
- MicroPython
- WIZnetが提供する WIZnet-ioNIC-micropython-examples リポジトリの
sntp.pyがそのまま利用可能です。 - ネットワーク設定(IPアドレスやMACアドレス)を記述し、Thonnyなどのエディタで実行・転送します。 [1]
- WIZnetが提供する WIZnet-ioNIC-micropython-examples リポジトリの
- C / C++ SDK
- WIZnet-PICO-C リポジトリをベースに、UDPソケットを使ってNTPリクエスト(ポート123)を送信するコードを実装します。 [2]
基本的な流れ (SNTP/NTP)
- ハードウェアSPI(GPIO 16〜21)を経由してW5100Sコントローラを初期化します。
- DHCPまたは静的IPでネットワークを接続状態にします。
- UDPソケットを開き、NTPパケット(48バイト、LI-VN-Modeを初期化、送信タイムスタンプ等)をNTPサーバーへ送信します。
- サーバーからの応答を受け取り、受信データから協定世界時(UTC)のタイムスタンプを抽出してマイコンの内部時計(RTC)を更新します。 [1]
GPS(1pps + NMEA)や IRIG-B 信号を外部ソースとして利用できる場合、W5100S-EVB-Pico2単体で「超高精度なローカルNTPサーバー(Stratum 1)」を構築することが可能になります。 [1, 2, 3]
W5100S-EVB-Pico 2に搭載されている RP2350 マイコンは、高性能なタイマーや PIO(Programmable I/O) を備えているため、これらの高精度な同期信号をハードウェアレベルで正確に処理できます。
1. GPS (1pps + NMEA) を利用する場合
GPSをソースにするのが最も一般的かつ実装が容易です。ネットワーク(NTP)経由の同期に比べ、マイクロ秒〜ナノ秒単位の圧倒的な精度が得られます。 [1, 2, 4]
- 役割の分担:
- NMEA(UART接続): 1秒に1回、シリアル通信(例:
$GPRMCなどの文字列)で「現在の正確な年月日・時分秒」を取得します。 - 1pps(GPIO接続): 1秒の「ジャストの瞬間」に立ち上がるパルス信号です。これをトリガーにして、RP2350の内部タイマーやRTCをナノ秒単位で較正します。 [4]
- NMEA(UART接続): 1秒に1回、シリアル通信(例:
- 実装方法:
- GPSモジュール(例: みちびき対応モジュールなど)のTXピンを、空いているUART(GPIO 0/1 など)に接続します。
- 1pps 出力ピンを、任意のGPIOピン(例: GPIO 2)に接続します。
- RP2350側で、1ppsを接続したピンに 「ピン割り込み(GPIO中断 / Interrupt)」 を設定します。
- 割り込みハンドラが実行された瞬間を「00ミリ秒 000マイクロ秒」の基準とし、UARTから流れてくるNMEAの時刻データと合体させて内部時計(RTC)を完全に同期させます。 [2]
- NTPサーバーへの展開:
- 同期された正確な時間をもとに、W5100SのUDPソケット(ポート123)を開いて待ち受けます。
- クライアントからNTPリクエストが来たら、GPS同期された超高精度なタイムスタンプを返信することで、LAN内の他の機器へ正確な時間を配ることができます(Stratum 1 サーバー化)。 [1, 5]
2. IRIG-B 信号を利用する場合
産業用や電力システム、計測分野で使われるタイムコード形式(IRIG-B)も処理可能です。IRIG-Bには「変調(AM)方式」と「無変調(TTL/DC)方式」がありますが、マイコンで直接扱う場合は無変調(IRIG-B00Xなど)が適しています。
- 実装方法:
- IRIG-Bのフレーム(1秒間に100ビットのパルス、パルス幅で0/1/識別子を表現)をデコードする必要があります。
- RP2350の強みである 「PIO(プログラマブル I/O)」 を使用して、パルスの高(High)レベルの時間をサンプリングするハードウェア・デコーダを組むのが最適です。
- PIOでデコードされた時刻データをDMA(Direct Memory Access)経由でメインCPUに渡し、1秒の基準点(フレームの先頭パルス)で内部クロックを同期させます。
ピン配置の注意点
W5100S-EVB-Pico 2は以下のピンをオンボードのEthernet(W5100S)通信で占有しています。これら以外のピンにGPSやIRIG-Bの信号線を接続してください。
- 占有ピン: GPIO 16, 17, 18, 19, 20, 21
- おすすめの割り当て例:
- UART RX (NMEA用): GPIO 1 または GPIO 5
- 1pps 入力 / IRIG-B 入力: GPIO 2 または GPIO 3(割り込みやPIOが自由に使えるピン)
実際にGPSモジュールを接続してNTPサーバーの構築コード(C/C++ または MicroPython)を書き始めたい場合、どちらの言語ベースで進めるか指定していただければ、より詳細な初期化や割り込みのロジックをご案内できます。
もしよろしければ、以下について教えてください:
- 開発環境は MicroPython と C/C++ SDK のどちらをお使いですか?
- 具体的なサンプルコード や 手順 を確認したいですか?
“Z3805A内部のFPGAには、コネクタなどへ配線されているのに使用されていない入出力が結構有り、解析中。ファームウェアの内容が問題なんだがまず解っているのは、RS232Cのタイムコード出力端子+1PPS信号が利用出来(5V_TTL、又は、RS232Cレベル)、更にどうも、IRIG-B出力(5V_TTL互換)、タイムトリガ入力(5V_TTL互換)、などが使える可能性が出て来た。NMEAについては、バッファを入れて、GPSモジュール(Furuno GT8031B, 3.3Vロジック)と本体のCPU(5Vロジック)間の信号がタップ可能。
HP/Symmetricomの「Z3805A」内部のFPGAの未使用ピンの解析、ハードウェア構成と、今後の拡張性についてポイントを整理しました。
1. Z3805Aから引き出せる信号のポテンシャル
判明している仕様と解析内容から、W5100S-EVB-Pico 2と組み合わせるための理想的なインターフェースがすでに見えています。
- 1PPS信号: これが最も重要です。Z3805Aの1PPSは、GPSにロックしている状態(軌道上の原子時計と同期している状態)であれば、数十ナノ秒レベルの精度を持っています。
- RS-232C(タイムコード): 通常のNMEAとは異なり、HP独自の「SCPIコマンド」や、特定のタイムコードフォーマット(TSIPや独自のバイナリ/ASCIIなど)が出力されている可能性が高いです。時刻の「何時何分何秒」という確定情報を得るために使えます。
- NMEAのタップ(3.3Vレベル): 内部のGPSモジュール(Motorola Oncore(モトローラバイナリ), Furuno GT-8031B (TSIP又はNMEA)等)とメインCPU間の通信をタップできるのは非常に大きいです。ここから標準的なNMEA($GPRMC等)を直接3.3VロジックでPico 2のUARTに流し込める場合、レベル変換ICすら不要になります。
- IRIG-B出力 / タイムトリガ入力: これらが本当に生きている(またはFPGAの設定等で有効化できる)場合、産業用ネットワーク機器の同期テストや、外部イベントの超高精度なタイムスタンプ記録(タイムトリガ)への応用へと可能性が広がります。
2. 今後のPico 2との接続イメージ
まずは「ハードウェア的にどう繋がるか」のイメージだけ共有します。Z3805A側のタップポイントが3.3V系であれば、Pico 2(RP2350)に直結できます。
※もしZ3805A側の1PPSやIRIG-Bが5Vロジック、またはRS-232Cレベル(±12V)で出ている場合は、Pico 2を壊さないために抵抗分圧やレベル変換IC(MAX3232等)を挟む必要があります。
3. 今後の進め方のヒント
プログラミングの段階になったら、まずは一番簡単な「MicroPython」から始めるのをおすすめします。
プログラムがシンプルで分かりやすく、パソコンとUSBで繋いで、動かしながらその場でコードを書き換えられるため、初心者でも挫折しにくいです。
プログラムがシンプルで分かりやすく、パソコンとUSBで繋いで、動かしながらその場でコードを書き換えられるため、初心者でも挫折しにくいです。
- 第1段階: Pico 2でNMEA(シリアルデータ)を受信して、画面に現在の時刻を表示させてみる。
- 第2段階: 1PPSのピン割り込みを検知して、1秒のジャストの瞬間をLEDの点滅などで確認する。
- 第3段階: 上記2つを組み合わせて内部時計を合わせ、W5100SからLANへNTPとして配信する。
まずはZ3805Aハードウェアの素性が判明するのを楽しみにしています。何か電気的な仕様(電圧レベルや波形など)や、ピンの扱いで気になることが出てきたら、いつでもお気軽に教えてください。どのような方針で解析を進めたいですか?