2019年10月26日土曜日

Pythonでシリアルポートを自動で選択してみた。

ラズパイ上のPythonでArduinoとかにシリアル通信で接続するときに、通信中に間違ってリセットしたりするとCOMポート番号が変わってしまったりして面倒なので自動でつながるようにしてみた。


import serial.tools.list_ports

ports = list(serial.tools.list_ports.comports())

for p in ports:
    print("Port:" + str(p.device))
    print("VID:0x{:x}".format(int(0 if p.vid is None else p.vid)))
    print("PID:0x{:x}".format(int(0 if p.pid is None else p.pid)))
    print("")
とりあえずPythonでシリアルポートの一覧を作成して各ポートのUSBのVIDとPIDを表示してみる。ラズパイはデフォルトでGPIOにシリアルポートが付いてるのでUSBじゃないシリアルポートに関しては0x0になる。

ためしにこれをこちらの環境で実行すると
Port:/dev/ttyUSB0
VID:0x10c4
PID:0xea60

Port:/dev/ttyAMA0
VID:0x0
PID:0x0
となった。
ttyUSB0は対象のArduinoの情報。ttyAMA0はUSBじゃないのでVIDとPIDが出ない。

というわけでこれを利用して

import serial
import serial.tools.list_ports

ports = list(serial.tools.list_ports.comports())

for p in ports:
    print("Port:" + str(p.device))
    print("VID:0x{:x}".format(int(0 if p.vid is None else p.vid)))
    print("PID:0x{:x}".format(int(0 if p.pid is None else p.pid)))
    print("")
    if(p.vid == 0x10C4 and p.pid == 0xEA60):
        print("Device found")
        ser = serial.Serial(p.device, baudrate=115200,timeout=0.05)
        break

print(ser.readline())
これで特定のVIDとPIDのデバイスを自動で選んで接続してくれるようになった。
これ便利なんだけどVIDとPIDがかぶってたりするとあんまり使えないかも…
listには他にも情報が格納されてるようなのでその中で判別に使えるものがあればよいのだが…(未確認

2019年10月19日土曜日

ラズパイでCAN通信を使ってみた。

OBD2のテストとかするのにデバッグ環境が欲しくなったので、Raspberry Piで使えるUSB-CANコンバータを使ってみた。
InnomakerってところのUSB2CAN-Moduleってやつ。絶縁タイプのUSB-CANコンバータなのに激安なうえ、RSコンポーネンツでも扱っているのでAmazonの中華変換アダプタよりも安心である。同じものがRSよりAmazonのほうが安くて3000円切ってる…
 
RSでは商品説明に付属品がちゃんと書いてあったけど、Amazonでもちゃんとターミナルブロックはついてくるみたい。2500円とは思えない豪華さ。

このUSB2CANは一応WindowsやMacにも対応しているらしいけど、ラズパイで使うならgs_canモジュールでそのままSocketCANデバイスとして使えるから便利。ネットワークデバイスとしてそのままifconfigで立ち上げれば使える。これは便利。
MCP2515モジュールをラズパイにつなぐより楽かも。CANトランシーバーを3.3V品に交換するか、パターンカットして3.3Vと5V分けなくてもいいし。ターミナルブロックも付属しているし…
アイソレーションされてるCANトランシーバを搭載していることを考えるとコスパは高いかも。

とりあえずラズパイ3BにUSBで接続して見るとTXとRxがチカチカしたあとにLinkが点灯する。lsusbしてみると
1d50:606f OpenMoko, Inc.
として認識されていた。PIDを調べてみるとGeschwister Schneider CAN adapterとなっていた。gs_canモジュールのgsはGeschwister Schneiderを略したのかな?

まずはcan-utilsをラズパイにインストール。
sudo apt-get install can-utils
あとは
sudo ip link set can0 up type can bitrate 500000
をするだけでSocketCANデバイスとして使えるようになる。ビットレートは適宜。
ifconfigをすればcan0が追加されてるのを確認できる。
TXとRXのLEDも点灯する。通信すると点滅するっぽい。

あとはcandump can0したりwiresharkしたり普通のSocketCANデバイスが使えるアプリケーションで扱える。

CANコネクタ側にはジャンパ抵抗をハンダすれば絶縁DC-DCコンバータからの5Vも供給できたりするみたい。5Vが必要なデバイスでは有効にすると便利な場合があるのかな。

このアダプタの部品構成的にはCANとUSB対応のSTM32F072C8T6、絶縁CANトランシーバのISO1050DUBR、I2C接続のEEPROMに絶縁DC-DCコンバータが主な部品構成っぽい。CANの変換アダプタって結構高価なものが多いからこれはだいぶお安いなぁ。さすが中華製。
しかし中華製だけあってか、情報が少ない…
RSだとMS123って品番で、USB-CANコンバータになってたり、AmazonだとUSB2CANってなってたり、同じ商品名で別な商品があるから探しにくかったり…
まぁラズパイでプラグアンドプレイで使えるからいいか。RSでもラズパイ用として扱われてたし、WindowsとかMacでも使えそうだけどSocketCANみたいに超簡単ではないのかもしれない。
今度はWindowsで使えるか試してみようかな。

2019年10月3日木曜日

USB PD Quick Charge両対応のカーチャージャーを買ってみた

USB Power DeliveryとQuick Charge 3.0両対応のカーチャージャーが安かったので購入してみた。

BaseusのBS-C16C1というやつ。
色違いやUSB Type Cの代わりに両方USBのAタイプがついているものもあるけど、USB PDも使えるタイプを購入してみた。
Aliexpressで5ドルだった。
アルミタイプのBS-C15Cだともうちょっと高いけど中身同じかも?

一応ちゃんとしたパッケージに入っている。
CCALL-YS01という品番的なシールが貼られていた。

本体はかなり小さい。多分車種によっては指したままでシガソケの蓋が閉まってしまう気がする。
抜きづらそうだけどね…

差込口はカーボン調。


本体にもスペックが印刷されているのはわかりやすくて良いかも。
24V車にも対応している。
12V車だとUSB PDで5V/3A、9V/3A、12V/2.5A、USB PD PPS(Programmable Power Supply)で3-5.9V/3A、3-11V/3Aに対応しているらしい。
24V車だとさらに15V/2A、20V/1.5Aが使えるらしい。
QCのほうは4.5V/5A、5.0V/4.5A、9V/3A、12V/2.5Aの対応で、24V車だと15Vと20VがQC4+(PDと同様)に対応しているらしい。
ちなみにUSB Type CとUSB Aタイプを同時使用のときは5V/5A(2ポート合計最大)担ってしまうので注意。まぁ最大出力30Wなのでこんなもんでしょう…

Nintendo SwitchをやMac Bookを最大の性能で充電するためには24V車じゃないといけないけど、スマホやiPad Proとかだったら12V車でも最大の充電性能で充電できそう。
問題はこの小ささで発熱が気になるところ…