ラズパイの時計をGPSモジュールと同期させる 初期設定編:名刺サイズの超小型PC「ラズパイ」で遊ぶ(第60回)
ラズパイとGPSを組み合わせ、さまざまな使い方を試してみます。
ラズパイはリアルタイムクロック(RTC)を持っていませんので、一度電源を落とすと時刻情報はリセットされ、次にネット接続されたときにNTPサーバから時刻情報を得るまで正しい時間を刻めません。
ラズパイが常にネットへ接続できる環境であれば問題ないですが、スタンドアロンで動かす場合で正確な時刻を得たいこともあるでしょう。
そこで登場するのがGPSです。GPSは今やスマホをはじめさまざまなデバイスに搭載されており、身近なのものになっています。GPSは位置情報の他、正確な時刻も得られます。
そこでラズパイとGPSを使っていろいろなことにチャレンジしていきましょう。まずはラズパイからGPSの状態を読むことに挑戦してみます。
GPSユニットはさまざまにありますが、今回使うのは外部アンテナが用意されている「GNSS(GPS・GLONASS・QZSS)受信機キット 1PPS出力 みちびき3機対応 アンテナセット付キット」(以下、GPSユニット)です。秋月電子通商で2680円(税込)で購入できます。外部アンテナがないモデルもありますが、アンテナを使えば本体と離れた場所で受信できるので、本体の設置場所に多少自由度が増します。
GPSはシリアル通信をしますので、ラズパイ側でシリアル通信を行えるように設定する必要があります。コンソール画面であれば「raspi-config」から設定します。
まずはraspi-configを起動しましょう。以下は最新のRaspberry Pi OSである「Bullseye」のものです。
$ sudo raspi-config
すると以下のような画面が表示されますので、「3.Interface Options」を選びます。次に「I6.Seriarl Port」を選びます。
続いて表示される「Would you like a login shell to be……」とあるところでは「いいえ」を、「Would you like the serial port……」では「はい」を選びます。
これでシリアルポートが有効になりました。
デスクトップからの設定は簡単です。左上のラズパイアイコンをクリックして表示させるメニューから「Raspberry Piの設定」を選び、「インタフェース」タブの「シリアルポート」を「有効」にすればOKです。
ではGPSユニットをラズパイに認識させるための準備をしましょう。全てコマンドラインから行います。まずはcmdline.txtを編集します。
$ sudo nano /boot/cmdline.txt
表示された内容の先頭行にコメントアウト「#」を入れて、次の内容に置き換えます。
#dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=2924e30a-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
これがすでに記述されている内容です。先頭に「#」を入れます。そのあと下の内容を入力しましょう。
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
続いて、先ほど1PPS出力をGPIO18に接続したので、その設定をします。「/boot/config.txt」に記述を加えます。
$ sudo nano /boot/config.txt
としてファイルを開いたら、最後の行へ以下のように入力します。
dtoverlay=pps-gpio,gpiopin=18,assert_falling_edge=true
1PPS(Pulse-per-second)出力とは、1秒間に1回だけ出る正確なパルス波のことを言います。GPSユニットからは1000ms(1秒)間隔で100ms(0.1秒)のパルス波が出力されるようになります。今回試用するGPSユニットは0.1秒ごとに立ち下がりのパルスが打たれますので、「assert_falling_edge=true」とする必要があります。
ここまできたらラズパイの電源を落とします。
続いてGPSユニットとラズパイを接続します。GPSユニットにある端子は、端子を右にした場合上から「VDD5V」(電源)、「GND」(GND)、「TXD」(データ出力端子)、「RXD」(データ入力端子)、「1PPS」(1PPS出力端子)と書かれているかと思います。これを順にVDD5Vはラズパイの5V端子(3番ピン)、GNDをGND(6番ピン)、TXDをGPIO15(10番ピン)、1PPSをGPIO18(12番ピン)へと接続します。GPSユニットのRXとラズパイを接続していませんが、ラズパイ側からGPSユニットへ特に指示を出しませんので接続しません。
ラズパイとGPSユニットを接続したら、ラズパイの電源を入れます。GPSユニットにある赤色のLEDが点灯します。GPSユニットの説明書には、点灯して40秒〜数十分すると測位されてLEDが1秒ごとに点滅するようになります。筆者が試したときには1分程度で3個以上のGPSをつかんで3次元測位(3D-Fix)ができるようになりました。
CUIで衛星の位置情報を得る
ではラズパイで衛星の位置情報などを得てみましょう。まずはコマンドラインからの操作方法です。以下のコマンドを入力して、GPS関係のツールをインストールします。
$ sudo apt install gpsd gpsd-clients pps-tools -y
続いて導入した「gpsd」の設定をします。「/etc/default/gpsd」を編集します。
$ sudo nano /etc/default/gpsd/
nanoでファイルを開いたら、最後の行に以下の内容を追記します。
START_DAEMON="true" DEVICES="/dev/ttyS0 /dev/pps0" GPSD_OPTIONS="-n"
続いて「gpsd.socket」を有効化します。
$ sudo systemctl enable gpsd.socket
ここまで設定できたら、ラズパイを再起動します。
再起動したら、信号を受信しているか「ppstest」で確認します。
$ sudo ppstest /dev/pps0
信号を受信していると、以下のように1秒おきに受信している内容を表示します。
trying PPS source "/dev/pps0" found PPS source "/dev/pps0" ok, found 1 source(s), now start fetching data... source 0 - assert 1645670541.000393424, sequence: 190 - clear 0.000000000, sequence: 0 source 0 - assert 1645670542.000385205, sequence: 191 - clear 0.000000000, sequence: 0 source 0 - assert 1645670543.000374884, sequence: 192 - clear 0.000000000, sequence: 0 source 0 - assert 1645670544.000365770, sequence: 193 - clear 0.000000000, sequence: 0 source 0 - assert 1645670545.000355041, sequence: 194 - clear 0.000000000, sequence: 0 ……
衛星からの信号などを表示する
では受信している衛星や時刻、現在の距離を示してくれる「gpsmon」を起動してみましょう。
$ gpsmon
すると以下のような画面が表示されて、衛星の情報を表示してくれます。
上から現在の時刻とGPSが置かれている場所の緯度と経度が表示されており、画面の左下にある「GP」などが衛星の情報です。
同じようにテキストでGPS情報を見ることができるツールに「cgps」があります。以下のコマンドを入力すると、画面のように表示されます。左側が現在地点の情報、右にあるのが衛星の情報です。
$ cgps -s
なお、みちびきのWebサイトには、現在地付近にある衛星の位置を教えてくれる「GNSS VIEW」があります。これも参考にすると、どの衛星の電波を受信しているのか分かります。
上記の2コマンドはCUIのものでしたが、GUIでも表示できます。ラズパイのデスクトップからコンソールを起動し、以下のコマンドを入力します。
$ xgps
するとウィンドウが表示されて、衛星などの情報が分かります。
関連記事
- Nゲージの模型をラズパイで動かす “らずてつ”その1――鉄道模型とラズパイをつなぐ
今回から鉄道模型の運転をラズパイで制御する仕組みに挑戦します。 - 部屋の二酸化炭素濃度を測定しよう ラズパイでCO2センサーを作る
ラズパイを使ってCO2を計測し、部屋の換気をする目安にしてみましょう。 - 550円の「Raspberry Pi Pico」でIoT その1:気温と湿度、気圧を測定する
独自開発のチップ「RP2040」を搭載したマイコンボード「Raspberry Pi Pico」でセンサーデバイスをテスト。 - ラズパイで「Windows 10 on ARM64」を動かす(オーバークロック編)
ラズパイにARMプロセッサ向けの「Windows 10 on ARM64」をインストールしてみた。今回はオーバークロックで快適動作を実現。 - ラズパイで「Windows 10 on ARM64」を動かす(インストール編)
ラズパイにARMプロセッサ向けの「Windows 10 on ARM64」をインストールしてみた。 - ラズパイで「Windows 10 on ARM64」を動かす(事前準備編)
ラズパイにARMプロセッサ向けの「Windows 10 on ARM64」をインストールしてみた。 - ラズパイ一体型キーボード「Raspberry Pi 400」レビュー 特例制度のWeb申請で“技適なし”を回避した
かつての“マイコン”を思わせるラズパイ一体型キーボード「Raspberry Pi 400」のレビューのファーストインプレッションをお届け。海外製品を日本国内で使うために気を付けるべきポイントも紹介。 - ラズパイ一体型キーボード「Raspberry Pi 400」の性能は? ベンチマークテストで従来モデルと比べた
かつての“マイコン”を思わせるラズパイ一体型キーボード「Raspberry Pi 400」でベンチマークテストを実施。その実力とは? - ラズパイで気温と湿度を測定、LINEで通知を受け取る 〜前編〜
今回は温湿度センサーモジュールとラズパイを組み合わせ、LINEと連携させる方法を紹介します。 - ラズパイを無線LANルーター化する 〜アクセスポイント編〜
家庭内で無線LANルータを使っている人は多いかと思います。今回はそのルーター機能をラズパイに持たせて、ラズパイを使った無線LANルーターの構築方法についてご紹介します。 - 本格的な撮影が楽しめる公式カメラモジュール「Raspberry Pi High Quality Camera」を試す
小さなマイクロコンピュータ「Raspberry Pi」(通称ラズパイ)で作る、自分だけのガジェット。Raspberry Pi公式のカメラとして本格的な撮影が楽しめる「Raspberry Pi High Quality Camera」を紹介します。 - ラズパイで新型コロナウイルス解析に参加する 〜Ubuntu Serverの構築編〜
小さなマイクロコンピュータ「Raspberry Pi」(通称ラズパイ)で作る、自分だけのガジェット。今回はラズパイで。
Copyright © ITmedia, Inc. All Rights Reserved.