下記の記事で、みちびき(準天頂衛星システム)の災害・危機管理通報サービスの情報を受ける機器をArduino UNO Q+GPSシールドに変更する案を検討したが、より具体的に変更要領を検討したので紹介する。Arduino UNO Qに変更することで、地名データをUNO Qに保存でき、緯度経度情報から地名表示を行わせることができる。今回は、ソフトウェアとハードウェアの基本構成を決めるところまで行った。
(注)本記事の内容は正確性を保証するものではない。
(2026年2月22日 追記)YouTube動画を追加しました。 https://youtu.be/QlPh7L0p3dE

今後、Claude Codeを用いて、Auduino UNO QのPythonコードとArduinoスケッチを作成する予定なので、まずは、Claude Codeに、現状構成に対応するリポジトリの内容を参照させ概略をまとめさせた。
現状リポジトリ調査結果
Claude Codeの回答
概要
QZSS(準天頂衛星システム「みちびき」)から送信される防災・危機管理情報(DC / DCX メッセージ)を ESP32-C6 で受信・デコードし、Web ブラウザで表示するArduinoファームウェアプロジェクトです。2025年9月30日に初回アップロードされたリポジトリです。
リポジトリ構成
qzss-dcx-esp32c6/
├── README.md (内容はタイトルのみ、まだ記述なし)
└── Projects/
└── 250821-045652-esp32dev/ ← PlatformIOプロジェクト
├── platformio.ini
├── src/
│ └── espr_dev_qzss_drc_drx_decode_20250818.ino ← メインコード
├── include/ (ヘッダファイル用、現在は空)
├── lib/
│ ├── QZQSM/ ← DC(mt=43)デコードライブラリ
│ ├── QZSSDCX/ ← DCX(mt=44)デコードライブラリ
│ └── SparkFun_u-blox_GNSS_Arduino_Library/ ← GNSSモジュール通信ライブラリ
├── boards/
└── test/
開発環境・対象ボード
| 項目 | 内容 |
|---|---|
| フレームワーク | Arduino(PlatformIO使用) |
| 対象ボード | esp32-c6-devkitc-1(Espressif ESP32-C6 DevKit) |
| プラットフォーム | pioarduino / platform-espressif32 |
| GNSSモジュール接続 | UART(RX:GPIO15 / TX:GPIO21)、ボーレート9600(失敗時38400) |
主な機能(ソースコードより)
1. QZSS L1S 信号の受信 u-blox GNSSモジュール(M8Q等)と UART で接続し、SparkFun ライブラリ経由で UBX-RXM-SFRBX メッセージを受信。QZSSの衛星データ(gnssId=5)のみを抽出して処理します。
2. DCメッセージ(mt=43)のデコード メッセージタイプ43(DC Report)をQZQSMライブラリでデコード。Jアラートなど国内防災情報を日本語テキストに変換します。
3. DCXメッセージ(mt=44)のデコード メッセージタイプ44(DCX = DC Report Extended)をQZSSDCXライブラリでデコード。L-Alert等の拡張防災情報に対応。重複・空メッセージはCRC32チェックでフィルタリングする工夫が実装されています。
4. NAV-PVT・NAV-SAT による衛星・時刻情報の取得
- UTC→JST(+9時間)変換を実装
- 総衛星数・QZSS衛星数を集計
5. Wi-Fi接続 & Webサーバー(ポート80) 固定IPアドレスで起動し、ブラウザから http://192.168.0.○/ でリアルタイムのGNSSステータスと受信した防災情報(DC/DCX 各最新10件)を確認できます。画面は10秒ごとに自動リフレッシュします。
Web画面の表示内容
- 現在時刻(JST)
- 総衛星数 / QZSS衛星数
- 測位ステータス(測位中 / 待機中)
- DCX メッセージ受信件数
- DC レポート 最新10件(タイムスタンプ付き)
- DCX メッセージ 最新10件(タイムスタンプ付き)
使用ライブラリ
| ライブラリ | 役割 |
|---|---|
| SparkFun_u-blox_GNSS_Arduino_Library | u-blox GNSSモジュールとのUBXプロトコル通信 |
| QZQSM | QZSS DC Report(mt=43)デコード |
| QZSSDCX | QZSS DCX(mt=44)デコード |
| WiFi / WebServer | Wi-Fi接続とHTTPサーバー(Arduino標準) |
まとめ
「みちびき」衛星から配信される防災情報(Jアラート・L-Alertなど)をESP32-C6+u-bloxモジュールで直接受信し、ローカルネットワーク上のWebブラウザからリアルタイムで確認できる、実用的なIoT防災モニタリングデバイスのファームウェアです。READMEはまだ未記述で、コードのコメントも日本語で書かれており、個人の実験・開発プロジェクトとして公開されたものと見受けられます。
Arduino UNO Q用のリポジトリ及びハードウェア構成
Claude Codeを使って、元のリポジトリを複写して別のリポジトリを作成し、そのリポジトリをArduino UNO Q+ESPr® Developer用GPSシールド(SAM-M8Q搭載)用に作り直した。
ハードウェアは、下図(左)の現状構成から、下図(右)の検討構成に変える予定で検討を進めた。

ESPr® Developer C6+ESPr® Developer用GPSシールド
(SAM-M8Q搭載)

Arduino UNO Q+ESPr® Developer用GPSシールド
(SAM-M8Q搭載)
検討構成に関するClaude Codeの回答
UNO Q + ESPr GPS shield (rewired) で、MCU -> Linux へ Bridge(RPC) でGNSS情報を送る最小構成です。
配線(前提)
SJ1/SJ2は既定(GPS TX->IO4, GPS RX->IO5)のまま利用。
- GPS shield
3V3-> UNO Q3.3V - GPS shield
GND-> UNO QGND - GPS shield
4-> UNO QD0(USART1_RX) - GPS shield
5-> UNO QD1(USART1_TX) - GPS shield
T-PULSE-> UNO QD2(任意)
ファイル
- MCUスケッチ: unoq_bridge/mcu/uno_q_qzss_bridge_minimal.ino
- Linux受信: unoq_bridge/linux/qzss_bridge_receiver.py
MCU側の挙動
Serial1(9600bps) でNMEA (GGA/RMC) を受信- 1秒ごとにJSON化して Linuxへ通知
Bridge.notify("qzss/report", "<json>")- Linuxからの取得用RPCも提供
qzss/get_latest
Linux側の挙動
Bridge.provide("qzss/report", on_qzss_report)で通知受信- 受信JSONを標準出力+
qzss_reports.ndjsonに追記
実行例(UNO Q Linux側)
cd unoq_bridge/linux
python3 qzss_bridge_receiver.py
受信すると1行JSONが連続表示されます。
ESPr® Developer用GPSシールドの電源端子や送受信端子をAudiono UNO Qに接続すれば、検討構成で代替構成を実現できる可能性がある。
Arduino UNO Q用にリポジトリ内容を変更したことにより、MCUスケッチと、MPU側LinuxのPythonコードが作成された。
GPSレシーバー変更検討
現状構成のESPr® Developer用GPSシールド(SAM-M8Q搭載)を流用する予定だったが、下記のGNSS Receiver(SparkFun GNSS Receiver – SAM-M8Q (Qwiic))が使える可能性があり、Qwiic端子でArduino UNO Qに接続できるので、検討構成のリポジトリに別ブランチを作成して、Arduino UNO Q+このGNSS Receiver用の内容をそのブランチに保存した。


検討構成に関するClaude Codeの回答
QZSS(準天頂衛星システム)の DC(災害・危機管理通報サービス)および DCX(拡張)メッセージを受信・デコードするプロジェクトです。
ブランチ構成
| ブランチ | ハードウェア | 接続方式 | レポート出力 |
|---|---|---|---|
| main | ESPr Developer (ESP32C6) + GPSシールド | UART | Wi-Fi + Webサーバー |
| arduino-uno-qwiic | Arduino UNO Q + SparkFun SAM-M8Q (Qwiic) | I2C / Qwiic | Linux Webサーバー (RPC経由) |
arduino-uno-qwiic ブランチ:Arduino UNO Q + Qwiic SAM-M8Q
ハードウェア構成
- ボード: Arduino UNO Q
- Linux側: Qualcomm QRB2210(quad-core Cortex-A53 @ 2.0GHz)+ Debian OS
- Arduino側: STM32U585(Cortex-M33 @ 160MHz)+ Zephyr OS
- GNSS モジュール: SparkFun GNSS Receiver SAM-M8Q (Qwiic) — I2C/Qwiic接続
システム構成図
SparkFun SAM-M8Q (Qwiic)
│
│ I2C / Qwiic
▼
STM32U585(Arduinoスケッチ)
- SparkFun u-blox GNSS Library (I2C)
- QZSS SFRBX コールバック
- DC / DCX デコード(QZQSM / QZSSDCX)
- JSON 整形 → RPC.println() で送信
│
│ RPC(内部バス)
▼
Qualcomm QRB2210(Debian Linux)
- web_server.py
- RPC デバイス(/dev/ttyRPC0)から JSON 受信
- Flask Web サーバー(ポート 80)
│
│ HTTP
▼
ブラウザ(DC / DCX レポート表示)
Qwiic 配線
| SAM-M8Q (Qwiic) | Arduino UNO Q |
|---|---|
| SDA (黄) | SDA |
| SCL (青) | SCL |
| 3.3V (赤) | 3.3V |
| GND (黒) | GND |
Qwiic ケーブルを使用する場合、4ピンを差し込むだけで接続完了です。
プロジェクト構成
Projects/arduino-uno-qwiic/
├── platformio.ini # PlatformIO ビルド設定(STM32U585)
├── src/
│ └── arduino_uno_q_qzss_qwiic.ino # Arduinoスケッチ(RPC送信)
└── linux/
├── web_server.py # Flask Webサーバー(RPC受信)
└── requirements.txt # Python依存ライブラリ
必要なライブラリ
Arduino側(STM32U585)
| ライブラリ | 入手先 |
|---|---|
| RPC | Arduino UNO Q 付属 |
| SparkFun u-blox GNSS Arduino Library v2 | Arduino Library Manager / GitHub |
| QZQSM | プロジェクト内 lib/QZQSM/ |
| QZSSDCX | プロジェクト内 lib/QZSSDCX/ |
Linux側(Debian)
pip3 install -r Projects/arduino-uno-qwiic/linux/requirements.txt
| パッケージ | 用途 |
|---|---|
| flask | Web サーバー |
| pyserial | RPC デバイス(シリアル)読み取り |
セットアップ手順
Arduino側
- PlatformIO または Arduino IDE でスケッチをビルド・書き込み
- Qwiic ケーブルで SAM-M8Q を接続
Linux側
# 依存ライブラリのインストール pip3 install -r Projects/arduino-uno-qwiic/linux/requirements.txt # Webサーバー起動(ポート80使用のためsudo必要) sudo python3 Projects/arduino-uno-qwiic/linux/web_server.py
ブラウザで http://<Arduino UNO Q の IPアドレス>/ にアクセスすると DC/DCX レポートを確認できます。
Note: RPC デバイスパス(デフォルト:
/dev/ttyRPC0)は ボードのドキュメントに従ってweb_server.pyのRPC_DEVICE定数を変更してください。
main ブランチとの主な差分
| 項目 | main (ESP32C6) | arduino-uno-qwiic (UNO Q) |
|---|---|---|
| GNSS接続 | UART (Serial1) | I2C / Qwiic (Wire) |
| GNSS初期化 | myGNSS.begin(Serial1) | myGNSS.begin(Wire) |
| 出力設定 | setUART1Output(COM_TYPE_UBX) | setI2COutput(COM_TYPE_UBX) |
| Arduino→Linux通信 | — (単一チップ) | RPC (RPC.println(JSON)) |
| Web サーバー | ESP32内蔵 WebServer | Python Flask(Debian上) |
| レポート出力 | Wi-Fi + WebServer | Linux Webサーバー(HTTP:80) |
Arduino UNO QのWebサーバー機能はBrickではなく、Flaskで実現された。
ただし、現状の検討構成は最小構成なので、基本的な動作が確認できたら、緯度経度からの地名変換機能などを追加する。
Arduino UNO Qが届いたが、箱の小ささに驚き、本体の小ささに驚いた。最近、ブログ記事やYouTube動画のスライドで、UNO Qの拡大図しか見ていなかったので余計に小さく感じたようだ。小さいから余計に緻密で綺麗に感じる。

