必要にせまられつつあり、勉強のため調べているメモです。
内容についての実機での確認をほとんどしていない人によるメモだということに注意してください。
ハードウェアを制御するときには、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(RaspberryPiも含む)ではUSB-シリアル変換でのIOは
/dev/ttyUSB0
といったデバイス名で表示されている。
Zynq USB-UART ドライバ
[ISE & Vivado 設定 on Ubuntu]
(http://masahir0y.blogspot.jp/2013_12_01_archive.html)
ここでも
/dev/ttyUSB0
というデバイス名が表示される。
###PySerial
なんでもかんでもPythonでできることはまずPythonで行いたい私としては、Python用のライブラリを調べてみることとした。
slideshare / ハードウェアを用いてPythonを学ぶ
OS依存性が少ないもの
・pySerial 配布元
・[pySerialモジュールについて Pythonによるシリアルデバイスの使い方 ] (http://python.matrix.jp/pages/modules/pyserial.html)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スクリプトに残る。でもそれくらいの違いだけになるので、記述がとても簡単になる。
そのポートに対するアクセスが、ファイルオブジェクトへのアクセスと同じように記述できるので、考えやすい。
GPIOかUSBか
RPiにはシリアルポートがありませんので、当然のことながらそれ以外のインタフェースからシリアル通信を行うことになります。基板上のGPIOピンか、USB端子かです。金がかからないのはGPIOピンだと思います。
USB-シリアル
相手の接続先がシリアルポートの場合。IO-DATAの変換アダプター USB-RSAQ6 は動作しました。
Install PySerial on Raspberry Pi (YouTube)
###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でもそのまま認識されます。
-
[LinuxでUVC(USB Video Class)タイプのUSBカメラを使う]
(http://qiita.com/nonbiri15/items/9593d61a2be81f2b31a9) -
[Raspberry PiにOpenCVを導入してキャプチャするまでと、トラブルシューティング]
(http://qiita.com/sy_sft_/items/ddcad27f0ea13e2cd662)
###マシン依存性が避けられないもの
####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の通信]
(http://qiita.com/ryugyoku/items/bf5fd10512c84a55d030)
・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]
(http://wyolum.com/numpyscipymatplotlib-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のシリアル接続