Androidスマホを現実的な車載OBDメーターにするための工夫

PC・スマホ・ガジェット

以前、YZF-R7のOBDⅡとAndroidスマホを連動させ、速度/回転数などを表示させる記事を書きました。
本記事はこれの発展形です。

環境

車両:ヤマハ YZF-R7
スマホ:arrows We2 F-52E(ドコモ版)
OBDⅡドングル:

車載にあたっての課題

スマホOBDメーターを実際に車載(※)するには課題があります。
※乗り降りの都度取り外しせず、バイクに付けっぱなしにする想定。

  • 起動がめんどくさい

現状では、バイクのキーオンとは別にスマホを電源オンし、Car Scannerアプリを起動し、ダッシュボードを表示する必要があります。

  • 停止がめんどくさい

同じく、バイクのキーオフとは別にスマホを電源オフする必要があります。
週末ライダーなので、電源オフし忘れた場合はスマホのバッテリーが枯渇し、次回乗車時にはある程度充電されるまで起動できなくなります。

私はマメな人間ではないので、これではスマホOBDメーターを使わなくなることは目に見えています。

理想の動作

こういう動作をしてくれたらいいのになぁ、という理想形です。

  1. バイクのキーオンと連動(=USB充電と連動)して、スマホが起動する。
  2. スマホ起動後、自動的にCar Scannerのダッシュボードが起動する。
  3. バイクのキーオフと連動(=USB充電終了と連動)して、スマホがシャットダウンする。

これを実現できるか?考えてみる

1. USB充電と連動してスマホを起動

これは以前にWeb検索して以下の記事を見つけていました。
スマホNexus5を「電源を繋いだら自動で起動」になるようandroidの設定を書き換えてみた : 明日は晴れますか ~総合Blog ~
しかし「fastboot oem off-mode-charge 0」コマンドは全ての機種で利用できる訳ではなく、私自身が過去に設定できなかった経験があります。(DoogeeかBlackviewのスマホだったと思います)
arrows We2で設定可能なのか、やってみるまで分かりません。

2. スマホ起動後Car Scannerアプリを起動

これはTaskerアプリで実現できそうです。

Tasker - Apps on Google Play
Automate everything from settings to photos, SMS to speech. ADC2 prize winner.

ただし、スマホ起動後にロック画面が出てしまうとCar Scannerアプリを表示できないため、画面ロックを設定できません。
ノーガードになってしまうので、盗難・拾得された場合に個人情報が見えないよう対策する必要があります。

3. USB充電終了と連動してスマホをシャットダウン

これもTaskerアプリで実現できると言えばできるのですが、電源操作するにはスマホをroot化する必要があります。
arrows We2をroot化できるかどうかがポイントです。

まとめると

実現できそうですが、いくつかハードルがあります。
ハードルの高い順(私見)に並べると以下のとおりです。

  1. arrows We2のroot化
  2. USB充電と連動してスマホを起動(「fastboot oem off-mode-charge 0」コマンド)
  3. Taskerでスマホ起動時にアプリ自動起動、USB充電終了時にシャットダウン

設定してみる

それでは、ハードルが高い順に試していきます。

arrows We2のroot化(成功)

Magiskを使用してroot化できました。

基本的な流れはこちらの記事に従いました。

上記の記事では実機からboot.imgを取得する際にスクリプトを使って複数取得していますが、私は以下の記事を参考にboot_aのみ取得しました。
また、記事中ではboot.imgの出力先がmicroSDになっていますが、内蔵ストレージ(/data/data配下)に出力しても特に問題ありませんでした。

その他、1つ目の記事で操作方法が分からない部分は、以下の記事を参考に作業を進めました。

詳細手順までは記載しませんが、必要な作業を列挙すると以下のようになります。
(将来自分が作業をやり直す時のために。。。)

事前準備
 [PC]Windowsパソコンでadbコマンドを実行できるようにする。(SDK Platform-Tools for WIndowsを導入)
 [スマホ]arrows We2で開発者オプションを有効化し、OEMロック解除:オン、USBデバッグ:オンにする
 [PC]パソコンとarrows We2をUSB接続し、adbコマンドを使ってfastboot modeに入り、fastbootコマンドを使ってブートローダーをアンロックする※
実機からboot.imgの取得
 [PC]fastboot getvar current-slotコマンドで、current-slotがA/Bいずれなのか確認する
 [スマホ]fastboot modeを抜けて通常のAndroid OSに戻り、DSU Sideloaderをインストールする
 [スマホ]GSI(generic system image)のROMファイルをコピーし、DSU Sideloaderを使ってインストールする
 [スマホ]再起動してGSIを起動する
 [PC]adb shellコマンドを実行してシェルを開き、ddコマンドでboot.imgファイルを出力する(事前に確認したcurrent-slotに合わせて)
 [PC]adb pullコマンドでパソコンにboot.imgファイルを取得する
Magiskでboot.imgをカスタム
 [スマホ]fastboot modeを抜けて通常のAndroid OSに戻り、Magiskをインストールする
 [PC]先ほど取得したboot.imgをスマホにコピーする
 [スマホ]Magiskを使ってboot.imgをカスタムする
 [PC]カスタムしたboot.imgをPCに取得する
カスタムしたboot.imgを書き込む
 [PC]adbコマンドを使ってfastboot modeに入る
 [PC]fastboot flashコマンドでカスタムしたboot.imgを書き込む
後始末
 [スマホ]再起動後、通知欄にDSU Sideloaderの通知が出るので、「破棄」を選択してGSIを消す

※fastboot modeでWindowsがスマホを正常に認識しない問題あり。以下の記事の「デバイスドライバの適用」を都度実施する必要があった。

USB充電と連動してスマホを起動(成功)

前述の「fastboot oem off-mode-charge 0」コマンドで設定できました。
電源オフ状態でUSB充電器を接続すると、スマホが起動することも確認できました。
あっさり実現できてラッキーでした。

Taskerでスマホ起動時にアプリ自動起動、USB充電終了時にシャットダウン(成功)

スマホ起動時にアプリ自動起動は、以下の設定で実現できました。
Taskerで、スマホ起動時にCarScanner起動タスクを呼び出します。

CarScanner起動タスクはこのような内容です。

この画面の設定はいじっていません。

また、CarScannerアプリの設定画面からアダプターの設定を開き、

起動時に接続する、接続後にダッシュボードを開く、の項目にチェックを入れます。

これにより、スマホ起動時にCarScannerのダッシュボードが開くようになります。




USB充電終了時にシャットダウンは、以下の設定で実現できました。
バイクのセルを回した時の電圧降下などをUSB充電終了と誤検知しないように、Taskerの変数を使って少々凝った作りにしました。

スマホ起動時に、変数%IsChargingに「-1」をセットするようにします。

充電されていないことを検知したら、変数%IsChargingに「0」をセットするようにします。ただし、変数%IsChargingの現在の値が「-1」の時は実行しません。
これは、「充電していない状態でスマホを起動→充電されていないので即シャットダウン」という動作を回避するためのものです。

充電されていることを検知したら、変数%IsChargingに「1」をセットします。これは、変数%IsChargingの現在の値が「-1」かどうかにかかわらず実行します。

変数%IsChargingが「0」になったことを検知したら、10秒待って変数%IsChargingを再確認し、それでも値が「0」ならばスマホをシャットダウンします。
仮にバイクのセルを回した時の電圧降下などで一瞬USB充電が止まったような場合は、10秒後には充電が復帰しているはずなのでシャットダウンされません。
また、動作確認のため、画面にメッセージ(フラッシュ表示)を出すようにしています。

コメント

タイトルとURLをコピーしました