Python による pyserial 経由でのシリアルポートの読み取りと書き込み
取得元:http://blog.csdn.net/xiaoxianerqq/article/details/50351632
Python 版のシリアルポートツールが共有されています: http://bbs.csdn.net/topics/390535101
apiの説明のためのドキュメント http://pythonhosted.org/pyserial/pyserial_api.html
アクティブRFIDを使って資産管理プロジェクトに携わるニーズがあるため、カードリーダーのシリアルポートの内容を読み取るためにpythonを使う必要があります。そこで、使い勝手の良いpyserialモジュールをインストールし、共通機能を整理してみました
I.
Pythonを使ってシリアルポートを操作するためには、まず、関連するモジュールをダウンロードする必要があります。
1. パイシリアル (
http://pyserial.wiki.sourceforge.net/pySerial
)
2. pywin32 (
http://sourceforge.net/projects/pywin32/
)
2,16進数表示
16進表示の本質は、受信した文字諸葛を対応するASCIIコードに変換し、そのASCII値を再び16進数に変換して特殊文字を表示することである。
ここでは、hexShow(argv)のように関数を定義しています。
- <スパン インポート シリアル
- <スパン デフ hexShow(argv):
- 結果 = ''
- hLen = len(argv)
- について i で xrange(hLen):
- hvol = ord(argv[i])
- hhex = '%02x' hvol
- 結果 += hhex+ ' '
- プリント 'hexShow:' 結果
- <スパン
- t = serial.Serial( 'com12' , <スパン 9600 )
- プリント t.portstr
- strInput = raw_input( 'いくつかの単語を入力してください:' )
- n = t.write(strInput)
- プリント n
- str = t.read(n)
- プリント スト
- hexShow(str)
================================================================================================================================== =
3,16進数で送信
16進数で送るとは、基本的には「' \xaa', ' \x0b' などの16進数形式の文字列を送ることです。ポイントは、文字列をどのように16進数に変換するかですが、これには2つの誤解があります。
1) 'ⅷ'+'aa'はエスケープバックスラッシュを含むのでダメです。
2) ' \x'+'aa' や r'\x'+'aa' もダメなので、印刷結果は \xaa でも変数に代入される値は '\xaa' となる。
ここでは、デコード機能を使用しています。
注意点としては、文字列リストの長さが奇数の場合、デコードはエラーを報告します。文字列のスライス操作を使って、場合によっては文字列の先頭か末尾に「0」を追加してください
シリアルヘルパーが16進数で文字列 "abc" を送信する場合、pythonで次のようにします "self.l_serial.write("\x61x62x63") "。
もちろん、別のやり方もあります。
- strSerial = "abc"
- strHex = binascii.b2a_hex(strSerial)
- #print strHex
- strhex = strHex.decode()。 ヘックス )
- #print strhex
- 自己 .l_serial.write(strhex)を実行します。
同じ目的で実現できます。
というわけで、シリアル側は整理されました
概要
このモジュールは、シリアルポートへのアクセスをカプセル化します。Windows, Linux, BSD (おそらくPOSIX準拠のシステム), Jython, IronPython (.NET, Mono) 上で動作するPythonのバックエンドを提供します。serial"という名前のモジュールは、自動的に適切なバックエンドを選択します。フリーソフトウェアライセンスで公開されています。 LICENSE.txt をご覧ください。
<スパン (C) 2001-2008 クリス・リヒティ [email protected]
<スパン のことです。 SourceForgeのプロジェクトページ で、こちらは SVNリポジトリ と、その ダウンロードページ .
<スパン ホームページは http://pyserial.sf.net/
<スパン <スパン
特徴
- すべてのサポート対象プラットフォームで同じクラスベースのインターフェイス
- Python 2.2+のプロパティからポート設定にアクセスできます。 ポート番号は0から始まるので、ユーザプログラムでポート名を知る必要はない
- 番号付けによるアクセスが不適切な場合は、ポート文字列(デバイス名)を指定することができます。 異なるバイトサイズ、ストップビット、パリティ、RTS/CTSやXon/Xoffによるフロー制御のサポート 受信タイムアウトの有無に関係なく動作する ファイルライクなAPIで、"read" と "write" ("readline" 等もサポートされています)
- 本パッケージに含まれるファイルは100%純粋なPythonです。Windows (pywin32) と Jython (JavaComm) では非標準ですが一般的なパッケージに依存します。POSIX (Linux, BSD) では、標準の Python ディストリビューションからのモジュールのみを使用します。)
- ポートはバイナリ送信用に設定されています。NULLバイトのストリッピング、CR-LF変換などはありません。(POSIXでは何度も有効になっている。) このため、このモジュールは普遍的に有用なモジュールとなっている。
<スパン
必要条件
- Python 2.2 以降
- Windowsのpywin32拡張機能
- Java Communications"(JavaComm)またはJava/Jython用互換エクステンション
<スパン
インストール方法
<スパン
ソースから
アーカイブからファイルを取り出し、そのディレクトリでシェル/コンソールを開き、Distutilsに残りの作業をさせます。python setup.py install
ファイルは、"Lib/site-packages"ディレクトリにインストールされます。
<スパン <スパン
イージーインストール
Python Package IndexからEGGが入手可能です。 http://pypi.python.org/pypi/pyserialeasy_install pyserial
<スパン <スパン
Windowsインストーラー
また、エンドユーザー向けのWindowsインストーラーも用意されています。これは ダウンロードページ開発者の方は、サンプルやReadmeが含まれるソースアーカイブを入手するとよいでしょう。
<スパン <スパン
簡単な紹介
ポート0を"9600,8,N,1"で開放、タイムアウトなし- <スパン >>> インポートシリアル
- >>> ser = serial.Serial(0) # 最初のシリアルポートを開く
- >>> print ser.portstr # どのポートが本当に使われたかを確認する。
- >>> ser.write("hello") # 文字列を書き込む
- >>> ser.close() # ポートを閉じる
- >>> ser = serial.Serial('/dev/ttyS1',19200,timeout=1)を実行します。
- >>> x = ser.read() # 1バイトの読み込み
- >>> s = ser.read(10) # 10バイトまで読み込む(タイムアウト)
- >>> line = ser.readline() # '\n' で終わる行を読み込む
- >>> ser.close()
- >>> ser = serial.Serial(1, 38400, timeout=0,
- ... パリティ=serial.PARITY_EVEN, rtscts=1)
- >>> s = ser.read(100) # 100バイトまで読み込む
- ... # あるいはバッファにあるだけの量
- >>> ser = serial.
- >>> ser.baudrate = 19200
- >>> ser.port = 0
- >>> ser
- <スパン Serial<id=0xa81c10, open=False>(port='COM1', baudrate=19200, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=0, rtscts=1)
- <スパン >>> ser.open()
- >>> ser.isOpen()
- 真
- >>> ser.close()を実行します。
- >>> ser.isOpen()
- 偽
また、ソース配布物またはオンラインのexamplesディレクトリにあるサンプルファイルもご覧ください。
<スパン <スパン
事例紹介
SVN リポジトリをご覧ください。サンプルディレクトリがあり、簡単なターミナルなどがあります。http://pyserial.svn.sourceforge.net/viewvc/pyserial/trunk/pyserial/examples/
<スパン <スパン
Serial クラスのパラメータ
関連
-
[Python] error could not broadcast input array from shape (26) into shape (26,1)
-
pythonがggplotパッケージを呼び出すとエラーが発生する AttributeError: 'DataFrame' オブジェクトに 'sort' 属性がない
-
Solve 'DataFrame' オブジェクトに 'sort' 属性がない。
-
ImportError: Windows の Django でプロジェクトを作成するとき、django.core solution という名前のモジュールがない。
-
Python エラー: int() の引数は文字列、バイトのようなオブジェクト、または数値でなければならず、 'list' ではありません。
-
TypeError: 'numpy.ndarray' オブジェクトが呼び出し可能でないエラー処理
-
Selenium issue IOError: [Errno 2] そのようなファイルまたはディレクトリがありません: 'nul'
-
ValueError: 解凍に0以上の値が必要
-
python3 エラー。AttributeError: 'dict' object has no attribute 'iteritems' -- Solution
-
pygalマッピング "AttributeError: 'NoneType' オブジェクトには 'decode' という属性がありません"
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
'DataFrame' オブジェクトに 'sort' 属性がありません。
-
pip Fatal error in launcher: を使用してプロセスを作成できません。
-
ImportError: scipyという名前のモジュールがない(解決済み)
-
PyQt5演習:matplotlibでプロットする
-
Python仮想環境のインストールと設定
-
python 3.3.2 エラー。urllib2' という名前のモジュールがない ソリューション
-
pythonフレームワーク Scrapyエラー TypeError: 'float' object is not iterable Solve
-
Pythonの学習における問題点
-
[Python] ValueError: サポートされていない pickle プロトコルです。5 解決方法
-
AttributeError:partially initialized module ''has no attribute'' (most likely dueto a circular import)