Spresenseを使って、準天頂衛星の災危通報を受信

#はじめに

Aloha
　日本の準天頂衛星システム（みちびき、QZSS）は、GPSの補完だけでなく、サブメーター級やセンチメーター級測位補強などができることが知られています。一方、この人工衛星は、もともと通信衛星という位置付けで始まったこともあったらしく、<a href="https://qzss.go.jp/overview/services/sv08_dc-report.html">災害・危機管理通報サービス「災危通報」</a>（災害情報をテレビやラジオ、インターネットを使わずに人工衛星経由で配信するサービス）や<a href ="https://qzss.go.jp/overview/services/sv09_q-anpi.html">衛星安否確認サービス「Q-ANPI」</a>（避難所の安否情報）などの機能があります。
そこで今回は、「災危通報」を受信してみようと思います。ただ、まったく目新しいことはできていないので、備忘録ということで。

#条件
災危通報は、QZSSが発信する「L1S」（中心周波数：1575.42MHz）という信号を使っています。これに対応した機器で、かつ入手しやすいものを探したところSonyの「<a href="https://developer.sony.com/develop/spresense/docs/introduction_ja.html">Spresense</a>」というボードがあり、メインボードのみで利用できることがわかりました。
※GPSの測位信号は、「L1C/A」というものなので、「L1S」とはちょっと違います。一般的なスマホなどでは対応していません。

#準備物
・Spresenseメインボード
・USBケーブル（micro USB Type-B）
・Arduino IDE
・MacBook等

#手順
（１）パソコンとSpresenseボードをUSBケーブルで接続し、<a href="https://www.arduino.cc/en/software">Arduino IDE</a>を起動します。
（２）ツールメニューのシリアルポートを選択し、Spresenseボードと接続します。「/dev/cu.usbserial-****」などを選びます。
（３）公式サイトのチュートリアルに従って、「<a href="https://developer.sony.com/develop/spresense/docs/arduino_tutorials_ja.html#_qzss_災危通報を出力する">2.6. QZSS 災危通報を出力する</a>」 のコードを<a href="https://www.arduino.cc/en/software">Arduino IDE</a>でSpresenseボードに書き込みます。（マイコンボードに書き込むボタンを押下）
スケッチ（プログラム）がボードに書き込まれると「reboot」と表示されます。

（４）QZSSの衛星が見えそうな屋外に移動します。

（５）Arduino IDEシリアルモニタを開きます。数十秒待っていると以下のような文字列が表示されます。

```

$QZQSM,55,C6ADF0FD1900054C3AA98895403AA811553880000000000000000013A93CD78*71
$QZQSM,55,53ADF0FD11800283F2507F8A101942082841A508ACA1181423500013E0BF478*0D
$QZQSM,55,9AADF0FD1180054460A88D5511D2A23F547DAA8FC95309AA61800010005CC0C*02
$QZQSM,55,C6ADF0FD190002847E587F8B1069623F2CC265A01CB408969C4000105A25BE8*0F
$QZQSM,55,53ADF0FD190002D3F65A80140FF2820350BC2A192943EAA87DA00010B905EF4*08
$QZQSM,55,9AADF0FD1900051018A27ED450028A05543F2A88215106AA22B00010F4FE204*70
$QZQSM,55,C6ADF0FD1900054C3AA98895403AA81155388000000000000000001123E9DA8*70
$QZQSM,55,53ADF0FD11800283F2507F8A101942082841A508ACA11814235000116A6A4A8*08
```
一行目の場合、
「$QZQSM」というのは、Message Headerだそうです。
「55」というのは、今回受信できたSatellite ID(衛星番号）だそうで、55、56、５７、６１が存在するようです。
「C6ADF0FD1900054C3AA98895403AA811553880000000000000000013A93CD78」というのは、DC Report Message（メッセージの本文）だそうです。
*の後の「71」はチェックサムです。

このDC Report Messageを読むべきなのですが、仕様書を見ないと全くわかりません。
そこで検索したところ、DC Report Messageのデコーダーを作られている方がいらっしゃいました。
<a href ="https://github.com/baggio63446333/QZQSM">https://github.com/baggio63446333/QZQSM</a>
このプロジェクトをダウンロードし、examples/DcReportTestをArduino IDEで実行します。
するとシリアルモニタにテキスト入力フィールドが表示されます。
ここに上記のうち、例えば、「$QZQSM,55,53ADF0FD11800283F2507F8A101942082841A508ACA11814235000116A6A4A8*08」を入力し、「送信」ボタンを押下します。

すると以下のような文字列が表示されました。

```
$QZQSM,55,53ADF0FD11800283F2507F8A101942082841A508ACA11814235000116A6A4A8*08
================================
災危通報(海上)(発表)

発表時刻：1月31日17時35分

海上着氷警報：サハリン東方海上
海上着氷警報：サハリン西方海上
海上着氷警報：網走沖
海上着氷警報：宗谷海峡
海上着氷警報：北海道西方海上
海上着氷警報：北海道東方海上
海上着氷警報：釧路沖
海上着氷警報：日高沖
```

季節柄、海上着氷警報が出ていました。見ているだけで寒くなりますね。
警報地域の近隣の方はくれぐれもご注意ください。

#参考文献
・<a href ="https://qzss.go.jp/overview/services/index.html">みちびき「サービスの概要」一覧</a>
・<a href="https://qiita.com/baggio/items/497b654cd4ec1bfd74fc">みちびき災危通報をデコードしてみる</a>

#おわり
　QZSSのL1S信号を受信することで、テレビやラジオ、インターネットが使えない場合でも「災危通報」情報を入手できることがわかりました。ハードウェアがあれば使えるようです。これが活躍するようなことが起きないことを祈るばかりですが、備えあれば憂いなしということで。

Mahalo