Goal
- GPSで位置情報が取れること
使ったもの
- GPS受信機キット 1PPS出力付き 「みちびき」3機受信対応
- ラズパイ3B
- あとは抵抗とスイッチングダイオードくらい。
接続
手元に部品がそろっていたので秋月さまサイトに掲載されているマニュアルの回路図のまま組みました。スイッチングダイオードは実際は不要みたいですが、壊さないよう保険にもなるので繋ぎました。
初期設定でGPSのアンテナが真上を向く必要があったので、ブレッドボードが縦になっています。
ちなみに初期動作テストでLEDが点滅するまで30分くらいかかりました。窓際に置いたのですが置いた場所が悪かったのかも。
ソース
下記ソースを実行するにはラズパイでUART接続関連の設定をする必要があります。そこはググってください
それさえすめばあとは特に大したことはやっていません。
なお、NMEAフォーマット解析用にnmea_plusを使いました。 SourceDecoder
まぢ便利
require 'serialport'
require 'nmea_plus'
sp = SerialPort.new('/dev/serial0', 9600, 8, 1, 0) # see: https://rubydoc.info/gems/serialport/SerialPort#set_modem_params-instance_method
trap 'SIGINT' do
sp.close if sp
exit
end
source_decorder = NMEAPlus::SourceDecoder.new(sp)
source_decorder.each_complete_message do |message|
# see: https://github.com/ianfixes/nmea_plus/blob/master/lib/nmea_plus/message/nmea/rmc.rb
if 'GPRMC' == message.data_type
puts message.utc_time
puts message.active? # false: データ無効
puts message.latitude
puts message.longitude
#puts message.speed_over_ground_knots
#puts message.track_made_good_degrees_true
#puts message.magnetic_variation_degrees
puts message.faa_mode # A: 単独測位(精度3m程度), D: 相対測位(精度0.4m程度)
puts
end
end
# sp.close <= ここには到達しないですね…
結果
以下実行結果です。
2020-07-15 12:35:37 +0000
true
33.725575
131.64382333333333
A
2020-07-15 12:35:38 +0000
true
33.72558166666666
131.64381833333334
A
ちなみにGoogleだと、検索キーワードに緯度経度を入れるとその地点でGooleMapが表示されますよー。
姫島村のオフィスです
感想
- GPS受信キットのピンの並びがラズパイのピンに合わせてある(と思われる)ので繋ぐとき迷わなかった。
- 探せばたいてい便利なGemが見つかりますねー。意地でもRubyを使おう。
- あ、1PPS端子繋いだのに遊ぶの忘れてた。