RS485_CAN_HAT でCAN通信できるようになりました。
python-can を使っているのですが、記事自体は別サイトでも情報が少ないため、役に立てればと思い記事に残します。
Python初心者なので、間違っている可能性があります。
import os
import threading
import can
import time
# CANリソース設定
os.system('sudo ip link set can0 type can bitrate 500000')
os.system('sudo ifconfig can0 up')
FIL_CANID = 0xXXXXXXXX
FIL_CANMSK = 0xXXXXXXXX
REQ_CANID = 0xXXXXXXXX
ID_FORMAT = True #29bitCANIDの場合
# CAN設定、フィルタ設定
can0 = can.Bus(channel = 'can0', can_filters = [{'can_id': FIL_CANID, 'can_mask': FIL_CANMSK }], bustype = 'socketcan_ctypes')# socketcan_native
canlog = can.ASCWriter('/home/pi/public/canlog.asc')
can.Notifier(can0, [canlog, ])
# 送信データは外部ファイルにしたい
def ServiceTest():
#テストフレーム送信
msg0 = can.Message(arbitration_id=REQ_CANID, data=[1, 3, 0, 0, 0, 0, 0, 0], extended_id=ID_FORMAT)
canlog.log_event(msg0, time.time())
can0.send(msg0)
# main関数
if __name__ == '__main__':
t1 = threading.Thread(target=ServiceTest)
# 送信プロセススタート
t1.start()
# 送信プロセスが完了するのを待つ
t1.join()
canlog.stop()
can0.shutdown()
os.system('sudo ifconfig can0 down')
print('end')
※ 記事ように、一部カスタマイズしています。
実行すると、CANID、MASKに合致した受信メッセージのみcanlog.ascに出力されます。
また、canlog.log_event()にて送信メッセージもログ出力されるようになります。
