ギャップロギャップロアプリエンジニアのための技術情報サイトトップページトップページIoTELM327でシフトインジケータアプリを作成・接続確認編AndroidELM3272020年2月13日システム開発部のTです。今回は車ネタってことで、ELM327を使ってAndroid版シフトインジケーターアプリを作ってみたので、そのことについてお話したいと思います。実際のコーディングについては、次回ということで、今回はシフトインジケーター、ELM327について、接続確認するまでのお話をします。シフトインジケーターMT車で運転していると、ときどきシフトポジションを見失うことは無いでしょうか。つねに左手をシフトレバーに触れていれば大丈夫かと思いますが、基本的にはハンドルを両手で操作するかと思います。いう状況でいざシフトレバーに手を伸ばしたとき、どのギアに入れているのか???ってことってありません?そういう人のために、モータースポーツのパーツメーカーからシフトインジケータというのが販売されていたりします。有名どころでは以下のような製品があります。http://www.nagaidenshi.co.jp/MONITOR/4500.shtmlしかし、普通に購入となると、軽く10000円を超えてしまいます。その取り付けもECUから車速とエンジン回転数の信号線と接続する必要もあり、素人が簡単に取り付けというわけにもいきません。簡単に車速とエンジン回転数が取れないのか・・・と考えていたところへ、本題のELM327というデバイスを見つけました。ELM327ELM327(※)は、車のOBD2規格の故障診断コネクタから車の状態を取得することができるデバイスです。このデバイスをコネクタに取り付けて、対応アプリで読み込ますことで、わざわざ高価な追加メーターを購入することなく、さまざまな情報を見ることが可能となります。(※実際はELM327というチップを搭載したOBD2スキャンツールのこと)本題では、このELM327を利用してシフトインジケーターを作っていきたいと思います。ELM327搭載スキャンツール自体は、怪しいものも含めていろいろと出ておりますが、本件では以下のデバイスを利用して開発をしていきたいと思います。開発前に、実際にELM327とターミナルで接続確認しておきましょう。ELM327を車の故障診断コネクタに接続し、イグニッションONにします。termを利用)し、シリアル通信でELM327に接続します。接続確認のため、ターミナル上にatzと入力しEnterしてみましょう。上記はATコマンドの一種で、ELM327自身に対する命令をするためのコマンドです。atzコマンドはシリアルポートのリセットとユーザプロファイルの読み出しをするようです。v1.5>上記のように返却されました。確かにELM327と会話できているようですね。ELM327との接続確認を終えたところで、いよいよ車との会話をやってみたいと思います。車との会話をする場合、OBD2コマンドというのがあるので、それを使っていきます。コマンドについては、以下のWikiで詳しく説明がございますので、一度参考にしていただければと思います。https://en.wikipedia.org/wiki/OBD-II_PIDs本件では、OBD2のサービス1の内容を表示するので、コマンドの頭は01になります。サービス1の情報から参照したいデータが車速だった場合、車速のPIDを確認し0Dが車速になるので、コマンドは010Dとなります。010Dを入力し、Enterします。00」とかえってきたと思います。41はサービスを表す01にレスポンスを示す0x40が付与された値、0Dは車速のコマンド、00というのが速度を示す値になります。今回は止まった状態でコマンドを送信しているので、0kmが返却されてきました。これだとあまり実感沸かないと思うので、続けてエンジン回転数を取得してみましょう。エンジン回転数を取得するためのコマンドは010Cになります。010Cと入力し、Enterします。00>コマンドが成功していた場合、上記の内容が返却されたかと思います。00の箇所がエンジン回転数を表しておりますが、そのまま10進数にすると2816という値になってしまうかと思います。4の数値704が実際の回転数になるかと思います。上記のようにコマンドひとつで簡単に値が取得できることが分かっていただけたかと思います。シフトポジションの取得コマンドで取得できることが分かったところで、シフトポジションについても確認してみたいと思います。Gear」というのがございました。コマンドでは「A4」と表記されているので、01A4と送信することで値が取得できそうです。DATAうーん・・・、どうやら取得できなかったようです。ELM327でも、車種によっては取得可能な値、不可能な値というのが存在しているようでして、筆者の車はサポートしていなかったみたいです。このままだとシフトインジケーターは作れないので、別の方法を考えてみたいと思います。ググってみると、以下のような方程式を見つけることができました。これなら、ギアレシオの値を逆算して、どのギアポジションなのか把握できるはずです。いえで、アプリ側には以下の値を事前に入力しておく必要がありますね。これでアプリが作れそうですね。次回より、実際にAndroidアプリのコードを紹介したいと思います。Norén%d人のブロガーが「いいね」をつけました。