概要
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
ダウンロードしたファイルを実行するとこのような画面が出現します。
List All Devicesをクリックします。
USB2CAN V3.3(Interface 0)を選択し、libusb-win32にドライバを変更します。
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()をコメントアウトします。
Pythonスクリプト(デモ用)を実行
デモ用のpythonスクリプト(usb2can.py)を入手し、実行します。
https://github.com/INNO-MAKER/usb2can/blob/master/For%20Windows/Python/usb2can.py
$python usb2can.py
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通信できました!
左がラズパイ側の様子で、右側がパソコン上でモニタしている様子です。
ラズパイ側はSend(送信)、Recv(受信)という目印を入れています。一方、パソコン上はTX(送信)、RX(受信)という印で送受信が確認できます。
まとめ
USB2CANをpythonで制御できるようになりました。これで応用的な試験ができるようになります。
これを利用して、次回はUDSのセキュリティアクセスをpythonで制御してみたいと思います。
↓↓次の記事はこちら↓↓
[…] USB2CANをpython経由で制御し、ラズパイとCAN通信してみた […]
[…] USB2CANをpython経由で制御し、ラズパイとCAN通信してみた ラズパイにハードウェア生成乱数が搭載!?CAN通信で乱数生成させて性能を検証 SHARE […]