LoginSignup
43
48

More than 5 years have passed since last update.

Pythonとハードウェア ー PythonでRS232Cを利用する -

Last updated at Posted at 2015-12-13

必要にせまられつつあり、勉強のため調べているメモです。
内容についての実機での確認をほとんどしていない人によるメモだということに注意してください。

ハードウェアを制御するときには、CPUの種類・OSの種類のごとに、使用するライブラリが異なってしまいがちである。
#include <windows.h>
という行が入っていることが多い。
そのままでは、他のOSでは使えない。

移植性の高いシリアルポート用ライブラリ(C++) Boost

OS依存性のない共通なライブラリを提供しているBoostにはシリアルポート用のライブラリが提供されている。
Boost.Asio
Serial Ports
解説記事【Boost】シリアル通信
Boost.Asioでシリアル通信してみる

Boost C++ libraries for Raspberry Pi
Boost C++ librariesをRaspberryPi上でビルドできていることが記されている。
Libraries only (static + dynamic)が公開されている。

USBシリアル変換ケーブル

最近は、PCでもRS232Cポートがなくなっているので、USBシリアル変換ケーブルとUSBシリアル変換ドライバが必要になっている。

USB-シリアル変換IC CP2102ドライバ・インストール方法解説

WindowsでのUSB-シリアルでのCOMポート番号の変更の仕方
デバイスマネージャCOMポートを変更する

Linuxで複数のシリアルポートやデバイスを見分ける

Linux(RaspberryPiも含む)ではUSB-シリアル変換でのIOは
/dev/ttyUSB0
といったデバイス名で表示されている。

Zynq USB-UART ドライバ
ISE & Vivado 設定 on Ubuntu
ここでも
/dev/ttyUSB0
というデバイス名が表示される。

PySerial

なんでもかんでもPythonでできることはまずPythonで行いたい私としては、Python用のライブラリを調べてみることとした。

slideshare / ハードウェアを用いてPythonを学ぶ

OS依存性が少ないもの
pySerial 配布元
pySerialモジュールについて Pythonによるシリアルデバイスの使い方 Python(windows)での送信例
pySerial を使う Macでも動くpythonのシリアル通信モジュール。 送信と受信の例あり
pyserialを使って, macからarduinoにシリアル通信をした Python(Mac)からの送信、arduino C++での受信例
Pythonでシリアル通信 インストール方法、送信例、受信例

pySerial/pyWin32でシリアル通信、でも受信が…送受信例
Pythonでシリアル通信(その2)送受信例
Pythonでシリアル通信

接続させるCOMポートの番号は、そのUSB-シリアルを接続させる前と後とにデバイスマネージャーでCOMポート表示をさせると、新規に現れたポート番号が、そのUSB-シリアルのポート番号です。

RaspberryPiを含むLinuxマシンでは、/devの下にあるデバイス名をls で表示して確認できます。/dev/ttyUSB0というのが見えました。
PySerialを用いて記述しても、windowsのcomポートかLinuxのデバイス名かが、pythonスクリプトに残る。でもそれくらいの違いだけになるので、記述がとても簡単になる。
そのポートに対するアクセスが、ファイルオブジェクトへのアクセスと同じように記述できるので、考えやすい。

Raspberry Pi でシリアル通信(Macも同様)

GPIOかUSBか
RPiにはシリアルポートがありませんので、当然のことながらそれ以外のインタフェースからシリアル通信を行うことになります。基板上のGPIOピンか、USB端子かです。金がかからないのはGPIOピンだと思います。
USB-シリアル
相手の接続先がシリアルポートの場合。IO-DATAの変換アダプター USB-RSAQ6 は動作しました。

Install PySerial on Raspberry Pi (YouTube)

RaspberryPi3でシリアル通信を行う

PyUSB

PyUSB - Easy USB access on Python

PyUSB comes with builtin backends for libusb 0.1, libusb 1.0 and OpenUSB.

PyUSBを利用し,パイプ番号を指定してバルク転送を実行するモジュールのソース

USB-Serialを使う際には関係ありません。

USBカメラ

 USBカメラへの供給電力が不足すると、USBカメラが認識されません。電力の供給のあるUSBハブを使いましょう。
 特別なドライバなしにWindowsで認識されるUSBカメラの場合は、RaspberryPiでもそのまま認識されます。

マシン依存性が避けられないもの

GPIO

・[Raspberry Pi]GPIOでLEDの点滅(Python)http://make.bcde.jp/category/5/
・Raspberry Pi GPIO入出力のサンプル(Python, C言語, shellスクリプト)
http://netlog.jpn.org/r271-635/2013/01/raspberry_pi_gpio_test.html

【Raspberry Pi】モータードライバボードでDCモーターを制御する

Raspberry PIのGPIO上シリアルとArduinoの通信

Raspberry PiのGPIOを試してみた(LEDピカ版)

FPGAが利用可能なボードでのPythonに関するメモ

ZYBOのARMhfのUbuntu 14.04 LTS にOpenCV 2.4.10をインストール
このページではOpenCVのビルドをしており、pythonをCMake時に指定しているので、ZilinxのZynqを利用したボードでpythonが利用可能なのは確かなようだ。

RaspberryPi 用によく使うライブラリをそろえる

Raspberry Pi(ラズベリーパイ)にPythonのモジュールをインポートする
にはscipy, numpy, PySerialがRaspberry Piで利用

Numpy/Scipy/Matplotlib on Raspberry Pi
にあるようにmatplotlibを使うグラフの表示が出来ます。

Upgrading skimage version on Raspberry pi
に説明してあるとおり、ソースコードからコンパイルすることができます。

COMポートのポート番号について

マイクロソフトのMS-DOSとWindows環境では、シリアルポートをCOMポートとして参照する。COM1、COM2、..などとしてである。COM9よりも大きい番号のポートは\.\COM10構文を用いて参照する必要がある
https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E3%83%9D%E3%83%BC%E3%83%88

RS485

RS485 というシリアル通信規格をサポートするPythonのライブラリがある。

pyserial/serial/rs485.py

どう使えるものなのか興味深い。

その他のIO

ryo さんによるRaspberry PiのIOの情報
http://rest-term.com/technote/index.php/IoT

Pythonには限らない参考記事
RaspberryPiのシリアル接続

43
48
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
43
48