当サイトは広告が表示されます。

WRX micro:bitを車両で使う その16 シリアル通信(RS232C)を行う

2020年1月27日Ad,micro:bit,OBD2,社外部品・DIY

micro:bitの通信機能には無線通信機能の他、有線で行うシリアル通信機能があります。シリアル通信では3本の配線(送信・受信・GND)を使用して通信を行いますが、micro:bit同士であればワニ口クリップで簡単に接続して通信が可能です。さらにUSBでPC(要ターミナルアプリ等)と接続して数値や文字の送受信も出来ます。また今回はRS232Cでのシリアル通信も行ってみました。

スポンサーリンク

Webサイトで紹介されているmicro:bitでのシリアル通信の例としては、先の通りmicro:bit同士あるいはPCとのUSB接続に関して多くありますが、私の場合はFA機器やPCの周辺機器でのシリアル通信(RS232C)を目的としています。ここまで書くと最終目的も分かってしまいそうですが、これまでFA機器のPLCと車両OBD2ポートに接続したELM327(RS232C仕様)とで行っていた車両情報取得を、PLCの代わりにmicro:bitで行ってみる事です。

PLCとELM327については、上記の記事辺りから見て下さい。

Microsot MakeCodeのシリアル通信ブロック

Microsot MakeCodeでは「高度なブロック」にシリアル通信に関するブロックが用意されています。種類が色々ありますが、単純に数値や文字を送受信するだけであれば簡単に行えます。ELM327との接続を行う前に、一応micro:bit同士とPC(Windows)との通信を簡単に見ておきます。

micro:bit同士での通信

プログラム

2台のmicro:bitに上記の同じプログラムをダウンロード(書き込み)します。「最初だけ」にあるシリアル通信の設定ブロックの内容はデフォルトのままで変えていません。

配線

ワニ口クリップで2台のmicro:bitを接続します。注意点は互いにP0端子はP1端子へ、P1端子はP0端子となる様に接続します。GNDは互いにGNDです。全て同じ端子同士を接続する場合(P0はP0、P1はP1)は先のプログラムの設定ブロックで、片側の端子設定を逆に設定する必要があります。

これでAボタンまたはBボタンを押せば、相手側のLEDにその内容が表示されます。

PC(Windows)との通信

micro:bitとPCとはUSB接続でシリアル通信が可能になります。PC側ではターミナルアプリ等が必要になるので、定番の「Tera Term(窓の杜)」を使用します。

※ここでのPCはWindows10です。またWindowsの他のバージョンでは別途「シリアルポートドライバー」が必要になる場合があります。

プログラム

micro:bitに上記のプログラムをダウンロードします。※micro:bitはデフォルトでシリアルデータにUSB接続を使用する様に設定されています。従って「最初だけ」(シリアル通信 USBにリダイレクト)は不要です。シリアル通信の通信先を端子に設定していた場合に、リダイレクトのブロックでUSBに設定し直す事が出来ます。

配線

配線はmicro:bitにプログラムをダウンロードしたままで、PCとUSBケーブルで接続している状態です。

PC側(Tera Term)

Tera TermをダウンロードしてPCにインストールします。その後Tera Termを立ち上げると「新しい接続先」のウィンドウが開くので、「シリアル」にチェックを入れてポート(USBシリアルデバイス)を選択し、OKをクリックします。

次に上部の「設定」から「シリアルポート」を選択し、スピードを「115200」にして「現在の接続を再設定」をクリックします。

これでmicro:bitのAまたはBボタンを押すと、Tera Termに内容が表示されます。

ボタンを押すたびにTera Term上で改行を行いたい場合は、「文字列を書き出す」ではなく「1行書き出す」を使用します。「1行書き出す」では内容の最後に「改行コード」を付けて送信します。

またTera Termを立ち上げた状態でPCのキーボードで何かを打てば(Tera Term上には表示されません)、その内容がmicro:bitに表示されます。

周辺機器(ELM327)との通信

配線

ここからがこの記事の本題です。RS232C仕様のELM327とmicro:bitを接続して通信が可能かを確認します。micro:bit同士やPCとの接続があまりに簡単だったので、ELM327との接続も当初は何も考えずに上記写真の様に直接配線を行っていました。

micro:bitから適当にATコマンドを送信すると、ELM327のLEDランプが点滅して反応はしているのですが、micro:bitのみでは現在の状況をモニターする事が出来ないので、何が起こっているのか全く分かりません。そこでELM327ではなく、これまで使用していたPLCと接続してmicro:bitからの内容をモニターしてみた所、ATコマンドのアスキーコードは全く異なる値になっていました。

色々考えていた所、ふとmicro:bitは3.3Vという事を思い出し、そもそもシリアル通信でもRS232Cの規格が異なる事に気が付きました。詳しい内容は省きますが、UARTをRS232Cの信号レベルに変換する必要があります。

そこで上記の様なTTLコンバーターを購入しました。3Vや3.3V、5V系電圧をRS232Cレベルに変換します。TTLコンバーターの形状は基盤のみだったり、Dサブ9ピンのオスやメスタイプなどもありますが、ELM327側がメスタイプなので、直接接続出来る様にオスタイプを購入しました。

TTLコンバーターには送受信とGNDの他、電源(VCC)の4つを接続します。配線を半田付けし、micro:bitのIOブレイクアウトボードを使用して送受信のP0とP1端子、GND端子、電源として3V端子にも接続します。

またmicro:bitの状況をモニターする為に、別途LCDパネルも購入してELM327との通信内容が確認出来る様にします(LCDパネルについては上記の前回記事で扱っています)。

上記がLCDパネルを含んだ、ELM327との接続の様子です。LCDパネル側はI2CインターフェイスでSCL・SDA(micro:bitのP19・P20)の他、5V電源とGNDを接続しています。とりあえずELM327へは乾電池を使用して12Vを供給しています(16番ピンが12V、4番または5番ピンがGND)。

通信テスト

micro:bitで通信テスト用のプログラムを組み、ELM327に送信してみます。また受信した内容はLCDパネルに表示する様にもしました。

ELM327は電源を入れると最初にバージョンを送信してきますが、上記の様にLCDパネルに表示されました。とりあえず表示させているだけなので表示位置(行や列)が適当ですが、一応理解できる内容です。ただし先頭と末尾に謎の記号があります。確かこの部分はスペースが2つ連続だったと思うのですが、「7」の後のスペース1つはちゃんとしています。訂正:スペースではなくアスキーコード「0D」の「改行(CR)」でした。LCDパネルでは自動で改行は行われません。

上記はmicro:bitからELM327に、OBD2ポートに対してサポートしているPIDデータの取得を命令する「0100」を送信した結果です。実際に車両に接続していないので、「UNABLE TO CONNECT」は正しい返信です。ただし、本来はその前に「SEARCHING…」という返信がある筈で、micro:bit側でデータを取りこぼしている様な気がするので、プログラムは見直そうと思っています。

その他

購入したTTLコンバーターのICには「3232EE」とあります。またELM327チップを製造している「Elm Electronics社」のデータシート(リンク先はpdf、83ページ目)にも、RS232CでELM327を利用する場合で、ICの「MAX3222E」を使用したアプリケーション例が記載されています(ELM327とは実際にはElm Electronics社のICです)。また現在のELM327のICの最新バージョンは2.2になっています。多く見かけるバージョン1.5はElm Electronics社では製造していません(バージョン履歴に記載あり)。私が所有している物にMAX3222Eが入っているのかは分かりませんが、バージョンが1.2aなので相当古い物です。現在はUSBやWiFiで接続する物が多くRS232C仕様は現在ではなかなか手に入りません。回路が分かる人であればUSB仕様などから改造も出来そうですが。

TTLのレベル変換が必要だった事は盲点でしたが、無事にELM327と通信は行えました。あとはOBD2ポートに対してデータ取得を要求し、その返信がmicro:bitのバッファー内に決まった順序で毎回取り込めれば、PLCと同様に車両情報を扱える事になります。ただしmicro:bitでのデータの扱い方はまだまだ理解していないので、MakeCodeのリファレンスを見ながら色々試す必要があります。

RaspberryPiやArduinoであればもっと色々出来るのでしょうけれど、micro:bitとブロックエディタでどこまで可能なのかも目的の1つになっています。

次回は実際に車両でデータの取得が可能か試してみますが、時間が掛かりそうなので他のテーマを挟む予定です。

micro:bit 新バージョン「2.0」について

2020年11月25日より、Micro:bit本体の新バージョン「2.0」が発売になっています。従ってこれまでの古いmicro:bitを使用した記事(~その24)と新しいmicro:bitでは記事内容に相違がある場合があります。ただしこれまでのプログラムは基本的には新しいmicro:bitでも動作し、古いmicro:bitも引き続き使用する事が可能です(ハード的に新たに追加された機能は、拡張ボード等が必要ですが)。

なお新しいmicro:bitについては実際に1つ購入し、micro:bit関連記事「その25」から扱っています。

2022年4月追記

2021年12月にmicro:bit本体のバージョンが「2.2」になるとのアナウンスがありましたが、「2.0」との機能上の違いは無いとされています。

「micro:bit」関連記事

以下は「micro:bit」タグの記事一覧です(投稿順)。現在の記事とこれ以降に投稿した記事も含みます。「その24」までの記事ではmicro:bit本体のバージョン「1.5」を使用しています。

micro:bit関連記事
クリックで開きます

「micro:bit+プラレール」も始めました。

プラレール関連記事

その他

FA用PLCとELM327を使用した「OBD2」関連の記事は以下の記事から始まります。

注記

    • このブログ内で書いている内容はあくまで私の利用する製品(アプリ含む)や機器での場合です。他メーカーの製品や機器をはじめ、同じメーカーの製品・機器であってもバージョン違い等の場合もあるので、記事内容の保証や責任を負う事は出来ません。
    • 記事内で紹介している製品や、その他の類似製品を購入・利用する場合はそのメーカーや購入先で仕様等を確認し、自己判断と自己責任の下で利用して下さい。
    • 記事内で公開しているmicro:bit用プログラムは自由に利用・改変して頂いて構いません。ただし不具合やバグもありますので、プログラムを利用した際の故障や事故等についての保証や責任を負う事は出来ません。自己判断と自己責任の下で利用して下さい。
    • micro:bit製品やプログラミング、その他記事内容について個別の問合せや依頼を頂いても回答する事は出来ませんので、予め御了承下さい。
    • BBC micro:bitは、micro:bit教育財団の登録商標です。その他のブランド名または製品名は各所有者の商標です。