社外部品・DIYシリアル通信におけるRS232C通信については、TTLコンバーターを使用する事でmicro:bitとELM327間の通信は一応行う事が出来ました。今回は実際に車両のOBD2ポートにELM327を接続し、micro:bitの情報取得命令に対して、車両からの応答をLCDパネルで表示出来るか確認してみます。スポンサーリンクmicro:bitでのTTLコンバーターを使用したRS232C接続については下記記事を見て下さい。シリアル通信(RS232C)を行うmicro:bitの通信機能には無線通信機能の他、有線で行うシリアル通信機能があります。...https://hito-log.com/2020/01/27/post-12052/LCDパネルについて先にmicro:bitで利用するLCDパネルについて補足します。Module(20文字×4行)」で、メーカーが案内している拡張機能では正式にサポートはされていません。Module(16文字×2行)」はサポートしていますが2004はあくまで「互換性あり」なので、私が試した限りでは1行目が16文字までしか表示されませんでした。そこで別メーカーが1602用に出している拡張機能では2004もサポートしている様子で、実際に利用してみても1行目の表示に問題は無かったので、現在はこちらの拡張機能を使用しています。...https://hito-log.com/2020/01/26/post-12025/送信するデータ今回micro:bitからELM327に送信するデータは、Aボタンで車両のエンジン回転数取得(010C)、Bボタンで直前に行ったOBD2への情報取得の再実行(0D:改行コード)、A+BボタンでOBD2ポートの16番ピンに供給されている車両常時電源の電圧取得(ATRV)の3つです。Aボタンでエンジン回転数を取得してからBボタンを押すと、再度エンジン回転数を取得する事になりますが、繰り返しAボタンを押してもエンジン回転数は取得出来ます。Bボタンでの場合は送受信するデータ量が異なるだけです。電圧取得に対してはOBD2への情報取得ではなく、ELM327内での処理です。その他のATコマンドと調査用コマンド前回まででELM327とPLC間での通信と、PLCで受信した内容の表示は確認する事が出来ました。...https://hito-log.com/2018/10/15/post-7284/ELM327に送信するデータでELM327内で処理するデータは頭に「AT」が付き、OBD2へ情報取得を行うデータは数値(サービスコード)から始まります。micro:bitから送信する場合も以前にPLCで行っていた時と基本的には全く同じです。micro:bitでは「1行書き出す」というブロックを使用すると、最後に改行コードが付け加えられるので、PLCの時に行っていた改行を表す16進数の文字コード「0D」は不要になります。最初は上記の様なプログラムを組みました。LCDもこの時はまだkeyestudioで案内されている拡張機能(2004互換)を使用しています。LCDの4行を上手く使う為に改行を行う機能も付けています。DATA」となってしまいました。CONNECT」となり、車両に対しては接続に行っているので腑に落ちない結果です。ちなみにELM327から受信したデータは「変数」を作り、バッファから文字列として一旦「変数」に代入した上でLCDに表示しています。DATA」という事は、何も入っていない事になります(送信時にはクリアする)。F4」とデータが表示されました。これは正しいデータでエンジン回転数となる16進数「0AF4」は10進数で「2804」、OBD2の規格による計算式で4で割ると「701」でアイドリング状態だった実際の車両のエンジン回転数に一致します。CONNECT」の前に「searching...」が無かったり、今回も本来はmicro:bitから送信した「010C」を最初にそのまま返信してくる表示がありません。micro:bit側でデータの取りこぼしがある様子です。何度か試している内に、今度は上記の様にまるでデタラメな内容が表示されてしまいました。根本的に何か問題がある様です。2回目プログラムを上記の様に変更しました。LCDの拡張機能も別メーカーの物に変更しています。改行を行う余計な機能はやめ、代わりに受信バッファーのサイズをLCDで表示出来る最大(20×4=80)にしてみました。1回目のプログラムではデータの受信(読み取る)からLCDの表示まで「ずっと」のブロックで行っていましたが、これを「>」を読み取った時のタイミングで行う事にしました。上記ではELM327は車両OBD2ポートに接続していますが、エンジンは始動しておらず常時電源のみの状態です。室内で試した状態と同じですが、今回は「010C」の返信から「searching...」も表示されています。文字化けした様な謎の記号がありますが、これはELM327から送信される「0D」の改行です。LCDパネルではこの様に表示され、改行も行われません(ELM327への設定で改行無しにも出来ます)。続いてエンジンを始動してAボタンによる繰り返しの「010C」の送信に対しても、ちゃんと「010C」とその後のデータも毎回表示されました。各データの表示位置も変わらないので、必要なデータの抜き出しも出来そうです。DATA」になってしまいました。これは「0D」を文字列で送信(しかも「1行書き出す」ブロックなので、さらに改行をプラス)してしまっていたので明らかに間違いです。「0D」は改行(CR)を表す16進数の文字コードなので定数(数値)として送信する必要があります。micro:bitはRaspberryPiなどと比較すると非力なので、シリアル通信やLCDパネルとの通信を同時に行いながら、「ずっと」のブロックによる連続の処理は荷が重い印象です。ELM327との繰り返しの送受信も、どの程度の頻度まで可能なのか不明です(あまり期待も出来ませんが)。ちなみに「ATRV」を送信した結果です。その他とりあえず、車両OBD2からエンジン回転数のデータが受信出来て、必要なデータの位置も一定で得られる事が確認出来ました。次回はこのデータから実際に回転数を計算するプログラムを考える予定ですが、PLCの時も少々悩んだ点であり、micro:bitでどうやって処理させるのか、そもそも可能なのか?という点が課題になります。MakeCodeのブロックで何とか実現したい所です。・・・私はそもそもプログラム言語は分かりません。メモリー容量も少ないので、プログラムの大きさにも制限が出て来てしまうかもしれません。micro:bitでBluetoothとLCDパネルの拡張機能を同時に使用すると、メモリーオーバーのエラーが出てしまいます(本体LEDに「020」のエラー表示)。なった場合はまたmicro:bitを2台使い、無線機能で役割分担する必要があります。以下は「micro:bit」タグの記事一覧です(投稿順)。現在の記事とこれ以降に投稿した記事も含みます。車両からエンジン回転数を得るその他FA用PLCとELM327を使用した「OBD2」関連の記事は以下の記事から始まります。先日、海外オークションサイトの購入代行を行っている「セカイモン」で、とある商品を購入しました。...https://hito-log.com/2018/09/24/post-6863/注記このブログ内で書いている内容はあくまで私の利用する製品(アプリ含む)や機器での場合です。他メーカーの製品や機器をはじめ、同じメーカーの製品・機器であってもバージョン違い等の場合もあるので、記事内容の保証や責任を負う事は出来ません。記事内で紹介している製品や、その他の類似製品を購入・利用する場合はそのメーカーや購入先で仕様等を確認し、自己判断と自己責任の下で利用して下さい。記事内で公開しているmicro:bit用プログラムは自由に利用・改変して頂いて構いません。不具合やバグもありますので、プログラムを利用した際の故障や事故等についての保証や責任を負う事は出来ません。自己判断と自己責任の下で利用して下さい。micro:bit製品やプログラミング、その他記事内容について個別の問合せや依頼を頂いても回答する事は出来ませんので、予め御了承下さい。micro:bitは、micro:bit教育財団の登録商標です。その他のブランド名または製品名は各所有者の商標です。