■前回までのあらすじ
私は車でお迎え来てもらう時とかにドンピシャで飛び乗る為に、車両位置のリアルタイムトラッキング手段を色々模索してきました。クルマには同居人がスマホもって運転してるので、Appleの「友達を探す」とか色々試してきましたが、どれもバッテリーとの兼ね合いで更新頻度が遅くてイマイチ。またカローラスポーツはT-Connectナビを装着していれば専用アプリで追跡できるんですが、これも移動中の更新は行われず駐車場所がわかるだけという残念仕様。
ならもう自作したるわい!ということでRaspberry Pi Zero Wベースの自作ロガーと自作サーバーを作ったのが2019年のこちらの記事。
コロナで電車で仕事に出向くことも減り、駅まで迎えに来てもらうこともほぼなくなってしまった昨今ですが、とりあえずシステム自体はしっかり動いています。SDカードをReadOnlyにしてるので劣化も抑えられてるのかも。
■クルマが増えたからもう一台作らないとね
で、2020年の夏に30プリウスが増えて、そちらにも搭載したいなーと思いつつ実行には踏み切っていませんでした。まぁ同居人が乗って迎えにくるのは大抵(安全装備が充実している)カロスポの方だしとか。でもまぁプリウスにはPioneerの車載モバイルルーターDCT-WR100Dを設置済みなので、Wi-Fi常時接続環境も整っているし、こないだプリウス盗まれて「あーロガー積んでなかったー!」ってなる夢を見たので(笑)、ようやく実行することにしました。あと最近Youtubeでジャンク修理動画とか某半田付けライブとか見ていて、電子工作熱が高まったというのも。
■材料集め
ということで必要な部材集め。今回はあらかじめ必要な部材もわかってますし、めんどくさがらずコスパにこだわって最安を攻めることにしました。記録のためこの記事にきっちり残しておこうと思います。
(注:以下のパーツを揃えて組み立ててもそれだけでGPSロガーとして機能するわけではありません。Linuxをインストールして設定する必要がありますし、サーバー側にも自作システムが必要です。いずれGithubにでも公開しようと思いますが、現時点ではまだ準備が整っていません。今回の追加に際して複数のクルマのログを扱えるようアップグレードも必要ですね)
パーツ | 価格(送料) | 購入店 |
---|---|---|
Raspberry Pi Zero W | \1,320(+\200) | スイッチサイエンス |
microSDカード | \599 | Amazon |
ケース | \650(+\200) | ソリノベ研究所(Yahoo!) |
GPSユニット | \2,680(+\600) | 秋月電子通商 |
[参考] ジャンパワイヤ | \100 | 秋月電子通商 |
12V USB電源アダプタ エーモン 2881 | \800 | Amazon |
ちなみにAmazonで揃えるとこちら。
VBESTLIFE ラズベリーパイゼロ用ケース 高耐久 耐衝撃 ABSプラスチック製エンクロージャ保護ケース Raspber...
結構差が出ました。特にZERO W本体とケースが大きく違いました。ずっとAmazonのウィッシュリストに入れててその相場を信じてた。ZERO Wは現在はピンヘッダが装着されたWHというモデルが主流で余計に価格差があったのかも。ピンヘッダーは初号機ではついてないのを買って、ハンマーソケットというメスのソケットを取り付けたのをベースにしました。どっちでも良かったんですが、4ピンしか使わないのに他のピンが全部でてるのもショートとかしそうでイヤだなーと思い、今回もピンのないWを指名買い。
ケースもAliExpressとかで取り寄せるならともかく、国内で同じケースがこんなに安く買えるとは…
GPSモジュールは秋月でしか買えませんでした。秋月以外のモジュールもありますが、前回のセッテイングがそのまま使えるようにと同一品を注文。
ジャンパーワイヤーは今回はありもので済ませます。GPS基板に4ピンで接続しますが、配列がPi Zeroのそのままとはいかず4ピンヘッダー付きフラットケーブルを使ってもGPS基板側は割いて半田付けになります。もし買うならリンク先のがよさげ。Pi Zeroのソケットがオスメスどっちでも対応できます。GPSモジュールと一緒に買えば実質送料無料でしょう。
microSDカードは8GBで充分でしたがKIOXIAの綺麗なブルーの16GBを見つけたので購入。エーモンのUSB電源アダプタ(12VをUSB 5Vに変換)も自宅に1つ余ったので使用。
トータルで6,000円くらいで済みました。
■組立て
ラズパイの初期不良があるといけないので、配線を半田付けをする前に一応ブートしてモニタにログインプロンプトが出るところまではチェックしました。GPSはアンテナをつないで外にしばらく置かないとテストできないので省略。
色々忘れてるのでカロスポに壱号機を取り外してきて真似していきます。
GPSモジュールにはバックアップ用のコイン電池CR2032が入っています。ラズパイ本体の電池が切れていても軌道情報を保持して、毎回コールドブートで測位に時間がかかってしまうのを回避できます(コールドブートでよければ電池不要)。今回改めてマニュアルを見ると、電圧が2.4Vを下回ったら交換するか、半年~1年程度で定期交換すべし、となっていました。念のため電圧測ってみましたがまだ3V超でした。1年半くらい使っているので替えてもいいかなと思ったんですが、まぁ不具合出てからでもいいかなとか、自分の使い方なら測位が多少遅くても実害はないので体感でおかしいと感じた時でいいやと保留に。
前述の通りピンヘッダーがない状態だったので半田付けの方法を多少アレンジしたものの、特に問題なく組立完了。細かいことを言えばネジやスペーサーなど上記以外の既有パーツを適当に駆使しました。
失敗したのはスペーサーとケース付属のラズパイ固定用ネジは径が違っていて、ケースにはネジが切られていないので、付属ネジを電動ドライバーでまわしてネジを切ったんですが、スペーサーがゆるゆるで固定できなくなりました。プラリペアなどで固定しようかとも思ったんですが、ケーブルの固さでいいかんじに固定できたので横着してそのままに。外から力が加わることもないので、基板同士が接触することもないかなと。
■ソフト面
色々忘れてたので改めてメモ。
まず当時Raspberry Piの公式というか標準OSはRaspbianと呼ばれていましたが、時は流れRaspberry Pi OSに呼び方がかわったみたいです。でもまぁNAT内にいてリスクも低いので、改めてOSをセットアップしたり、アップグレードするなどはせず、当時のバックアップイメージを復元し、設定だけ変更しました。Win32DiskImagerを使ってバックアップの.imgファイルを新しいSDカードにリストアします。
通常SDカードの劣化を抑えるためにRead Onlyでマウントしているので、以前にもリンクしたシェルスクリプトを実行してR&Wで再起動。ログ送信用Pythonスクリプトを改変して、送信するjsonデータに車の識別IDを含めるように修正。またカロスポとプリウスではWi-Fiの設定が違うので、/etc/wpa_supplicant/wpa_supplicant.confを修正。これでまたRead Onlyに戻して再起動しても変更内容が巻き戻っていないことを確認。
サーバー側もMySQLのテーブルに車IDのカラムを追加し、受信データを反映するようにPHPスクリプトを修正。また閲覧用ページにも車を切り替えるプルダウンメニューを追加しました。この辺り、コード内に直書きしていて、将来的にコード一式を公開する時にちょっと工夫しないとなって思います。ラズパイのMACアドレスとかを取得して識別子にするようにすれば、イメージ複製時に書き換えるのがWi-Fi設定のみにできるのでスマートかなとも思ったんですが、サーバー側のレコードに毎回MACアドレスが書き込まれるのも無駄だなと思い、結局INT型でカロスポが0、プリウスが1としました。今考えると、送信はMACアドレスを使い、サーバー側でDBに書き込む時に0/1に置き換えれば良かったなとも。
ともあれこれで2台の車を切り替えて追跡できるようになりました。これで雨の日のお迎えにどちらの車で来られても、ギリギリまで雨宿りをしつつ接近を捉えて飛び乗ることができます。折りしもこれを書いている日にAppleのAirTagが予約開始になり、当然発注済みですが、あれはこうした用途には使えなさそうです。電池が1年もつのは魅力ですが、徹底したプライバシー保護がなされていて、所有者のiPhoneが近くにない状態で移動を検知すると音がなってしまったりしますし、そもそも近くのiOS機器を経由してしか位置を検知したり送信したりできないので、走行する車両をトラッキングするには不足でしょう。やはり車のトラッキングには自力でGPS計測をし、自力でインターネットにつながるデバイスであるRaspberry Piが有効といえるでしょう。電源も永続的にとれますし。