Raspberry Pi Zero WでGPSビーコンを自作

TOYOTAのコネクテッドカーには「カーファインダー」という機能があります。車両の位置情報を常時サーバーに送信して、ユーザはスマホアプリから今車両がどこにあるかを確認できるというものです。

地図&GPS好きな私はこれにはかなり期待していました。例えば同居人と待ち合わせをする時に迎えに接近するクルマの位置がリアルタイムにわかれば迎えられる側もいい場所に移動したりできます。例えばどちらの方向から接近してくるかで道路のどっち側で待つべきか判断できます。雨が降っている時に無駄に早くから路肩で待たず、どこかで雨宿りをして待つこともできます。

従来、スマホアプリで「友達を探す(現「探す」)」だったりFacebook MessengerやGoogle Mapsなどあらゆる位置情報共有機能を試してきましたが、どれも更新頻度が低すぎてそういうリアルタイムなモニタリングには不足でした。調子がいい時悪い時のムラがあったり。特に金属の箱の中である車内ではスマホのGPSが充分な精度を出せないということも関係してるのでしょう。試した中ではGlympseががまずまずの更新頻度と精度ですがマイナーな上に共有開始までの手数がやや多く、めんどくさがりの同居人にはなかなか使ってもらえず。

そこでもう車両の搭載機能ならば、運転する側はなんの操作もいらずに少なくとも車両->迎えを待つ側の共有はできるだろう!と期待したわけです。ところがいざ納車されていてガッカリ。リアルタイムで動く様子が見えないどころか、目的地についてもまだ出発地にいることになっているとか、何十分というレベルで更新が途絶えることもしばし。また地図表示までの操作の手数も多い。トヨタのアプリは最初にTOYOTA/LEXUS IDというのでログインして使うのですが、さらにこのカーファインダーを使う際にはT-CONNECT IDというのでログインが必要です。しかも後者はセッションが数分しか保持されないので、基本毎回パスコードを入れなければなりません(IDは記憶してくれる)。そしてやっと表示が出たと思ったらスクロールもズームもできない地図画面だし、自分(アプリを起動してる人)の位置も出ません。「マップで開く」的なボタンで標準地図アプリに遷移してようやく自分の位置とあわせてスクロール/ズーム可能な地図閲覧ができる、という体たらくです。TOYOTAのコネクテッド周りのアプリは総じて残念なところが多すぎます。しかも事前に試せないので百万単位の買い物をしたあとで判明してもどうしようもありません。せっかく力を入れるのならもう少し本気で取り組んで欲しいものです。

■なら自分で作っちゃえと

代替品として最近何社かから発売されている子どもの見守り端末なんかも検討しましたが数百円とはいえ月額費用がかかる上、バッテリー優先で更新頻度が分単位なので上記のような用途には不足します。

そこで目に付いたのが以前別件で使用したRaspberry Pi Zero Wです。これにGPSモジュールを取り付ければ緯度経度時刻は取得できますし、車内なら電源もUSB 5Vならいくらでもとれるのでバッテリーの心配も不要。しかも我が車にはWi-Fiまでとんでますから、LTEモジュールも追加の維持費も不要。取得した緯度経度情報をWebサーバーに投げるスクリプトさえ作ってしまえば、あとはWebサーバー側でそれを保存して表示するこれまた簡単なページを作れば良いということになります。

ということで作って見たハードウェアがこちら。

SDカードはサイズ比較用です。いい感じのケースが見つかりました。フットプリントはZeroサイズで上に少し高くなっている造り。右に出ているのはGPSアンテナ。電波が遮断されやすい車内で使うので外付けアンテナにしました。奥に見えるのがmicroUSB端子の電源線です。このサイズなら車内のどこにでも設置できます。アンテナ側(SDカードスロット側)は少し大きく口があいているので、少しホコリなどが入りやすいかも知れません。テープかなにかで目張りしておこうかな。


こちらが中身。使っているGPSモジュールは秋月のみちびき/1PPS対応のものです。

Raspberry Pi Zero Wはヘッダーピンが半田付けされてないWをもともともっていたので、それにハンマーヘッダーソケットを追加。GPSモジュールにヘッダーピンを半田付けすれば直接刺さるんじゃないかという思惑があったんですが、実際には接続する5ピンのうちシリアルのTxとRxが反転した並びになっていたので断念。結局直接半田付けしました。今買える(買いやすい)Zero Wは正確にはZero WHというヘッダーピン(オス)がついているものなので、また別の固定方法が必要かもです。ちなみにGPSモジュールの裏にはバックアップ用のコイン電池がついているのであまりZeroと密着はできないです。

こちらの六角ネジで高さをあわせてGPSモジュールを固定しまいた。自作PCケースにマザーボードを固定するのによく使うアレですね。アレの少し細いヤツ(M2)が長さも色々でセットになっており、複数継ぎ足して望みに近い長さにできるというものです。

ちなみにケースのネジ穴はあいてなかったので、別途ねじ切りタップも買って自分で開けました。ちょい斜めになってしまったのが残念…

というわけでハード的にはZero W、GPS、SDカード、ケースに細々とした配線部材で6~7千円くらいでしょうか。部材はかなりたっぷり買えてしまったので、仮に追加で作ろうとすれば5千円くらいで作れるのかも知れません。

■ソフト面の工夫

ソフト面はOSとしてはRaspberry Piの基本OSであるRaspbianの最新リリースBusterを使用。GUI環境などはいらないのでLite版です。GPSモジュールはシリアル接続で、1PPS信号という精度を上げるための信号はGPIO経由で入ってきますが、いずれにせよgpsdというデーモンを動かしておけばいい感じに管理してくれます。他のツールからはソケット通信でアクセスする感じ(なので複数のGPSクライアントからの同時接続も可能)。

Pythonでgpsdから取得してWebに投げるサンプルが落ちていたので、それを改良して使っています。当初、一旦ローカルにSQLiteなどで保存して送信なども考えてたんですが、そもそもリアルタイム測位データに用があるのと、システムをROM化することで電源管理を簡略化できると気付いたのでローカルには基本的にデータを保存しない仕様にしました。ROM化というのは起動時にSDカードからソフトを読み込んだ後は、その後のディスク書き換えをRAMディスクに行うように仕向けるというもので、SDカードをメインストレージにして劣化が懸念されるRaspberry Pi界隈ではよく使われる手法のようです。RAMディスク上のデータは電源をブチ切りした場合は当然失われます。図書館やネットカフェのPCのように、次回電源投入時はすべてが元通りに起動するというわけです。これも簡単な切り替えスクリプトで実現できました。諸々多くの先人の資産のお陰で、かなり短い期間で目論み通りの仕組みを実現することができました。この場を借りてお礼申し上げます。

逆にサーバー側のPHP+MySQLな部分はほぼゼロから自作中。Google Maps API v3を使って地図表示をしています。個人で使う分にはまず課金対象量には達しないだろうと。こちらはまだ調整中ですが、追々見られるものができたらスクショくらいは晒したいなと。

2023.04.26追記

クルマを乗り換えたので移設作業をしました。当初、時刻のみで緯度経度がn/aのままで測位ができずに悩みましたが、なんのことはない、GPS基板からアンテナのコネクタが外れてましたw。移設の際に引っ張られてしまったのかも知れません。気休めにホットボンドで固定をしておきました。

初号機は設置して3年半ほど経っているようですが、普段はROM化してあるせいかSDカードも普通に読み書きできて劣化の兆候はなさそうです。

ただ衛星位置情報(almanac)を保持するコイン電池の出力が2.7Vまで落ちていたので、新品に交換しておきました。ググるとクルマのスマートキーなどだと2.8Vを切ったら交換、ということだったので充分危険域。新品は3.3Vでした。これでまたしばらく大丈夫でしょう。実害を感じなかったので気にしてませんでしたが、弐号機の方もそろそろ替え時きてるかも知れません…

AirPods Proはサイボーグの夢を見るか?

AirPods Pro買いました。WF-1000XM3(以下XM3)を買ったばかりだし見送るつもりだったんですが、発売日の絶賛コメントがすごくて試してみたくなり、近場の家電店を探し回ってなんとか当日ゲット。

Apple AirPods Pro

Apple AirPods Pro

Amazonの情報を掲載しています

■音楽を聴くためというよりノイズの少ない生活をするデバイス

AirPods ProとSONYのWF-1000XM3はノイズキャンセルの優れた完全ワイヤレスイヤフォンとしてガチ競合する製品で、比較レビューも数多くあります。ノイキャンは互角、音質はXM3という評価が多い印象です。自分もそんな印象ですがこれには優劣というより設計思想の違いが出ている気がします。

SONYはあくまで音楽を楽しみデバイスとして音質を追求しています。ノイキャンについてもそのための静寂を目指している感じ。外音を取り込むクイックアテンションもタッチしている間だけ機能し、通常は無音が基本。スマホアプリと組み合わせれば安全のために歩行中にはノイキャンをオフにすることもできる、という感じ。

他方AirPods Proは音楽もノイズ低減も快適な生活のための手段という感じがします。むしろ電子耳栓として音楽を聴いていなくても常時使用を目指したような使用感。例えば料理とかちょっとした手作業をしている時、完全にその音が消えてしまうと感触がわからず作業しづらかったりします。AirPods Proのノイキャンはそういった自身の出す生活音は比較的自然に残る感じ。これをノイキャン性能が劣ると捉えるかどうかはまさに目的次第。

まさにAppleWatchのように常に身につけさせるにはどうすればいいか?という問いから生まれたデバイスという感じです。身につけていれば音楽も聴け、不快なノイズも消せて、Siriが様々なサポートをしますし電話機もたずに通話もできます。生身の身体より便利ですよと。そのために優先したのがコンパクトさと外音取込みモードなのでしょう。外音取込みモードはイヤホンを装着していない状態に近い聞こえ方をかなり再現したモードです。従来のノイキャンイヤホン/ヘッドホンの思想からしたら、なんでわざわざ未装着状態を再現するんだ?と思いがちですが、ノイキャンの圧迫感、閉塞感を嫌って音楽聴く時以外は外してしまうんではなく、外音取込みモードに切り替えてそのまま装着していてね、ということなんじゃないでしょうか。音楽、動画、ゲームとサブスクリプションサービスを次々にリリースして人間の可処分時間を全て奪い取ろうとする強欲なAppleですから「いずれ人の耳に入る音はすべて牛耳る!」くらいのビジョンはもってても不思議はないんじゃないかなと(笑)。

■勝手に期待する未来のAirPods像

常時身につけるスマートデバイス、もっとカッコ良く言えばサイボーグ/身体拡張デバイスとして見た時に個人的に期待したいのは、Appleデバイスとの接続のスマート化です。もちろん従来のペアリング切り替えに比べてAirPodsのAppleIDをベースとした切り替え方法は便利で手軽です。AirPods側の操作なしにiPhoneやiPad、Macの側でサウンド出力先として指定するだけで切り替わります。でももう一歩未来へ進んで、身体にサウンドインターフェイスを常時装備しているユーザ体験を実現しようとするならば、出力デバイス側の操作すらなしに、それこそiPhone11から搭載されたUWPなどを活用して、近くにあるデバイス、正面にあるデバイスの音声出力を勝手に接続してくれるといいなと。Macの前に座ればMacの音が、iPhoneを手に持って動画を再生したらその音が、みたいなことができたらワクワクしますね。もちろん排他ではなく適切にミキシングされて両方の音が聞こえればなお良し。

あとはノイキャンモードと外音取込みモードのシームレス化ですかね。これはSONYが少し先取りしてスマホのモーションセンサーを使って取り組んでいます。ただまぁ不意にノイキャンがOFFになって雑音が飛び込んできたりと不快感が大きく購入初日に速攻で無効化してしまいました。AirPods Proでは現状そこは完全手動切り替え式です。長押しなのもちょっと面倒。むしろ音楽用途は二の次でいいから1クリックをモード切替えにアサインできたらいいのにと思います。左単押しでモード切替、右単押しでSiri、というアサインができたらより身体拡張デバイスっぽいですね(現在は1クリックは再生/一時停止専用で、まだ音楽デバイス感があります)。

あとは終日稼働できるだけのバッテリーライフと更なる軽さ、小ささですね。XM3と比べればかなり小さく快適ですが例えば寝ホンとしてはまだ突き出し部分が大きすぎます。

■寝ホンとしての使い勝手

私はSAS(睡眠時無呼吸症候群)でCPAPという呼吸補助機をつけて寝るのですが最近機種変更したTeijinの機器がやや空気排出の音が大きく寝づらさを感じています。そこでBoseのSleepBudsを導入してみましたが充電不良問題が改善できずに回収返金対応となってしまいました。またXM3は寝ホンとして使うには大きすぎます。

それらの代替としての期待もあってAirPods Proを買ってみたんですがその結果としては、

  • 羽毛など柔らかい枕であれば横向きに寝ても痛みは最小限(反発力のある枕は無理)
  • ただし起きると外れていることもしばしば
  • 電池が朝までは保たない

という感じで70点というところでしょうか。朝イチに充電が切れているということは、そのまま持って出かけることもできないわけなのでちょい不便ですね。SleepBudsを回収に出して返金を受ければちょうどAirPods Proが買える金額になるわけですが、うーんどうしようかなというところです。

■音声通話用としては今ひとつ

またいくら外音取込みモードが優秀といっても、気になる時はあります。自分の声と食べ物を食べる咀嚼音の反響です。これはさすがにカナル型イヤホンの宿命から逃れられるレベルには達していません。いちど電話会議に使ってみたんですが自分の声がモゴモゴ響いてしまって無理めでした。外での騒がしい場所での通話ではノイキャンのメリットの比重が高まるかも知れませんが、それなりに静かでノイキャンなくても通話できるような場所での電話会議ならやはり自然に外音が取りこめるXperia Ear Duo最強!って感じです。

まとめると、

  • 音楽をしっかり聞くならXM3(というかハイレゾ対応でより音質の良いWH-1000XM3使うかな)
  • 電話会議にはXperia Ear Duo
  • 寝る時はSleepBuds
  • それ以外はAirPods Pro

という感じですかね。うーん、どれも手放し難い…

子ども用書籍が読み放題のKindle キッズモデル レビュー

離れたところに住む姪姉妹にいいかもと思いKinldeキッズモデルを買ってみました。ハードウェアとしてはベーシックモデルのKindle(10th?)と同等で、特徴としては、

  • U12向けの読み放題サービスKindle FreeTime Unlimited 1年分利用権付き
    • 4人分の進捗管理、実績バッジ機能
    • 大人アカウントで買った書籍も許可すれば読ませられる
  • ピンクまたはブルーのカバーが付属
  • 落下や濡れ破損に対し2年の交換保証
  • スリープ時の壁紙が絵本的で可愛い絵柄に

といったところ。

ちなみにカラー液晶で本以外にも学習アプリやゲームも使えるFireタブレットのキッズモデルも各サイズ存在します。

Fireと違いeペーパーなので当然カラー表示はできませんし画面サイズも解像度もショボいですが、「どうせ買い与えてもゲームやったりYoutubeみたりにしか使われないし…」という懸念がある場合は物理制約として「本しか読めない!」というのは一種のメリットかと。

「実家の蔵書量と生涯賃金に比例する」なんて調査が少し前に話題になりました。例によって相関であって因果かどうかもわからないですが、確かに妹宅にはほとんど本がなく子ども達もゲームやYoutube漬けなので(おもに叔父である私がスマホやタブレットやPC環境を揃えすぎているのが原因なのですが…)、こういうのもあっていいかなと。乱読でもいいので興味をもった本をちらっとでも紐解いてみるきっかけになればなと。とはいえ上の子はもう中2なのであまり読めるものはないかもなので、実質下の子用。上の子はすでにiPhoneもってるし。

■久々にみるベーシックモデルの解像度ェ…

個人的には日本導入前からKindle端末を使ってきており、ここ何年かはVoyageやOasisといった高解像度モデルを使っているので、6インチで167ppiの画面は「ちっさ!ジャギジャギ!」って感じが否めません。

Fireは非キッズモデルに後からアプリを入れてFreetime Unlimited契約すれば(ケースや故障サービスの付帯しない)キッズモデルとして使えました。買い換えて不要になった端末をおさがりで使えるのはとても合理的です。なので、Kindle端末も同じように、サービス開始されたらメニューに「Freetime Unlimited」という項目が出現して、使わなくなったVoyageを転用できないかと心待ちにしていました。まさにサービス開始の直前に更新が来たので、「これは!」と思ったのですが残念ながら転用メニューは出現せず。仕方ないので本人にカバーの色の希望を聞いてピンクを注文しました。

ということで解像度は残念ですがついにフロントライトはついたのは幸い。充電ポートはあいかわらずMicro USBですが、こと妹宅に限ればSwitchくらいしかCデバイスがないのでむしろアリかな。

■ユーザ切り替えが…

中学生の上の子にはあまり利用機会がないかなと思いつつ、せっかくユーザ切り替え機能があるので二人それぞれのアカウントを作成。

普段の操作画面をみてみます。基本は通常のKindle 10thとかわりませんが、右上の3点メニューの中に通常モデルには存在しない「Amazon FreeTime」というメニューがあります。

これを選択するとFreeTimeモードに遷移したり設定をしたりする画面が出ます。

ここでは「もも」と「はな」という二人の子どもアカウントが作成済みで、どちらかの「本を読む」リンクをタップすることで、子ども用ホームに遷移します。

ご丁寧に左上に「ももさんのKindle」と表示されるところがニクいですね。さて、ここでまた3点メニューボタンを押すと、

こういうメニューです。大人モードでしかできない設定をしたり大人ライブラリを見るには「ペアレンタルコントロール」か「Amazon FreeTimeを終了」ですがどちらもパスコードを入れないと進めないという具合です。

親のKindleアカウントに紐付いているのでうっかりするとライブラリが丸見えになってしまいますが、まぁ一応暗証番号をしっかり管理していればOKということです。

さて、ここまで来てふと問題に気付きました。

あれ、じゃぁ”もも”アカウントから”はな”アカウントに切り替えたい時は??

もちろん、一旦抜けて2番目の画面から選び直せばOKです。ただしそれでは姉妹でアカウントを切り替える度に親が暗証番号を入れて承認しなければならないことになります。いやいやそんなわけないっしょ!?WindowsだってMacだってNetflixだって最初にアカウント選択画面が出ます。じゃぁKindleを一度スリープにして起こし直してみたら?→ダメ。端末を再起動したら?→ダメ。それ自体(アカウントスイッチ)を有効にする設定項目がどこかにある?→発見できず

あちこちいじりたおして見ましたが現時点では発見できていません。ちなみにKindle 10thとしての電子マニュアルは大人ライブラリに入っているもののFreetime Unlimitedに関する説明はなし。

もちろん、妹が姉のアカウントにスイッチして設定年齢以上のコンテンツにアクセスできたり、他の兄弟姉妹のアカウントでうっかり本を読んで実績やしおりに干渉したりといったことは望ましくないですが、それはぞれぞれのアカウントにパスコードをつけて管理するのが正しい気がします。Netflixのようにそこまでは厳密に管理しない使い勝手、わかりやすさ優先のアカウント管理も選べても良いでしょう。だけど、親を通さないと兄弟間で受け渡しすらできない、というのはちょっとおかしいんじゃないのと思います。これを書いている今でも「いやいやそんなバカな仕様なわけがない。私がバカで見落としているだけで、だれか早くツッコんでくれ、オマエの目は節穴かと罵ってくれ!」と思っています。真っ当にユースケースを想定して作ってればこんなことあるわかけがない。是非コメントでご指摘ください。

そしてもし、もしも本当に現状でそれができないというのであればAmazonには猛省して神速でファームウェア更新してほしいものです(あと従来端末のファームにもFreetime Unlimitedメニューを!)。

2019.11.08追記:

Amazonのカスタマーサービスから上記問い合わせについて返信いただきました。「現状はPINを入れなければ変更ができない件についてはお子様が自分でプロフィールを更新するのを防ぐための仕様でございます。」とのことです。「プロフィールの更新を防ぐ」??なんだか壁を建てる場所を間違えてる気がしますね…