本サイトはアフィリエイト広告を利用しています

USB2CANをpython経由で制御し、ラズパイとCAN通信してみた

ラズパイとパソコンでCAN通信

概要

USB2CANは手軽にCAN通信環境を構築できる便利なデバイスです。GUIで制御できるツールが提供されていますが、それでは拡張性がないと考え、今回、python経由で制御できないものか試行してみました。

環境構築をしている様子に関してはこちらの記事をご覧ください。

マニュアルをダウンロード

まずは、Innomaker社のリンクからpython制御に関するマニュアルをダウンロードします。

https://github.com/INNO-MAKER/usb2can/blob/master/For%20Windows/Python/Python%20On%20Windows%20.pdf

Zadigを利用してUSB2CANのドライバ設定変更

デモ用のpythonスクリプトを動作させるには、まずUSB2CANのドライバ設定を変更する必要があるらしく、そのために以下リンクからZadigというツールをダウンロードします。

https://zadig.akeo.ie/#google_vignette

ダウンロードしたファイルを実行するとこのような画面が出現します。

ZadigでUSB2CANのドライバ設定を変更する様子

List All Devicesをクリックします。

ZadigでUSB2CANのドライバ設定を変更する様子

USB2CAN V3.3(Interface 0)を選択し、libusb-win32にドライバを変更します。

ZadigでUSB2CANのドライバ設定を変更する様子

Python環境を整える

以下コマンドで仮想環境を用意します。

$python -m venv USB2CAN
$USB2CAN\Scripts\activate

gs-usbをインストールします。

$pip install gs-usb==0.3.0

Lib\site-packages\gs_usbにあるgs_usb.pyというファイルを開きます。

一部のWindowsシステムでは誤作動するらしく、マニュアル通りself.gs_usb.reset()をコメントアウトします。

self.gs_usb.reset()をコメントアウトしている様子

Pythonスクリプト(デモ用)を実行

デモ用のpythonスクリプト(usb2can.py)を入手し、実行します。

https://github.com/INNO-MAKER/usb2can/blob/master/For%20Windows/Python/usb2can.py

$python usb2can.py

CAN通信が開始できました。

USB2CANでCAN通信している様子

デフォルト設定はループバックモード、ボーレート設定は1万となっています(usb2can.pyのコードを引用)。

    # Configuration Modify the Baudrate you want here
    if not dev.set_bitrate(1000000):
        print("Can not set bitrate for gs_usb")
        return

    # Start device, If you have only one device for test, pls use the loop-back mode, otherwise you will get a lot of error frame
    # If you have already connect to a aviailable CAN-BUS, you could set as NORMAL mode
    dev.start(GS_CAN_MODE_LOOP_BACK)
    #dev.start(GS_CAN_MODE_NORMAL)
    # Prepare frames
    # list all kinds of frame for test. Select you want.

上記設定を変更すれば、他機器との通信ができそうです。

デモ用pythonスクリプトの設定変更

パソコンと接続しているUSB2CANとラズパイ間でCAN通信させたいので、デモ用pythonスクリプトの設定を変更します。

    # Configuration Modify the Baudrate you want here
    if not dev.set_bitrate(500000):
        print("Can not set bitrate for gs_usb")
        return

    # Start device, If you have only one device for test, pls use the loop-back mode, otherwise you will get a lot of error frame
    # If you have already connect to a aviailable CAN-BUS, you could set as NORMAL mode
    #dev.start(GS_CAN_MODE_LOOP_BACK)
    dev.start(GS_CAN_MODE_NORMAL)
    # Prepare frames
    # list all kinds of frame for test. Select you want.

変更点は以下2点です。

  • bitrateを500000に変更
  • dev.start(GS_CAN_MODE_LOOP_BACK)をコメントアウトし、dev.start(GS_CAN_MODE_NORMAL)を有効化

パソコン(USB2CAN)⇔ラズパイ間でCAN通信

パソコン(USB2CAN)⇔ラズパイ間でCAN通信できました!

パソコンとラズパイ間でCAN通信している様子

左がラズパイ側の様子で、右側がパソコン上でモニタしている様子です。

ラズパイ側はSend(送信)、Recv(受信)という目印を入れています。一方、パソコン上はTX(送信)、RX(受信)という印で送受信が確認できます。

まとめ

USB2CANをpythonで制御できるようになりました。これで応用的な試験ができるようになります。

これを利用して、次回はUDSのセキュリティアクセスをpythonで制御してみたいと思います。

↓↓次の記事はこちら↓↓

2 COMMENTS

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です