SerialTool と Python®
目次
- Python とは?
- SerialTool と Phyton
- シリアルポートと Python について詳しく
- シリアルポート用 Python 統合サンプル
- Python のインストール
- 追加情報
- SerialTool API for Python
- F.A.Q.
Python とは?
Python® はインタプリタ型・オブジェクト指向・高水準のプログラミング言語で、動的セマンティクスを備えています。高水準の組み込みデータ構造と動的型付け・動的バインディングを組み合わせることで、迅速なアプリケーション開発(Rapid Application Development)に非常に適しているほか、既存コンポーネントをつなぐスクリプト言語/グルー言語としても広く利用されています。
Python のシンプルで学びやすい構文は可読性を重視しており、その結果としてプログラムの保守コストを大きく削減できます。Python はモジュールやパッケージをサポートしており、プログラムのモジュール化とコードの再利用を強力に後押しします。Python インタプリタおよび豊富な標準ライブラリは、主要なすべてのプラットフォーム向けにソース形式またはバイナリ形式で無償提供されており、自由に再配布することができます。
Python® の詳細については公式サイトをご参照ください:www.python.org
法的注意事項:「Python」は PSF の登録商標です。SerialTool は PSF と提携しておらず、スポンサー提供も受けていません。SerialTool は、スクリプト実行用の互換プログラミング言語として Python を使用しており、PC 上に公式版 Python がインストールされていることが前提となります。
SerialTool と Phyton
SerialTool 用 Python コードエディタ。
シリアルポートを扱いつつ、その入出力データを分かりやすく表示してくれる優れたグラフィカルインターフェースを使いたいと思ったことはありませんか?
このようなニーズがあり、簡単な言語で追加ライブラリをインストールすることなく、誰でも扱える形でシリアルポートを制御する専用プログラムを作りたい場合、SerialTool と Python の組み合わせがまさにぴったりのツールです。
シリアルポートを扱ういくつかのソフトウェアは、スクリプト機能を提供しており、コードを書いて実行させることができますが、たいていの場合その言語に不慣れだったり、数行のコードを統合するために多くの時間を費やさなければなりません。SerialTool と組み込み Python を使えば、Python でスクリプトを書き、SerialTool の全機能を制限なく利用できます。
SerialTool はライブラリ形式の基本関数群を統合しており(既にインポート済み)、わずか数行のコードで目的のシリアルポートを検索・オープンし、読み書きが行えます。シリアルポートからの受信/送信パケットのグラフィカルな表示は SerialTool が処理し、あなたは Python コードで自由に処理ロジックを実装できます。
また、Python の記述とテストを容易にするため、SerialTool にはスクリプトの読み込みや編集が行えるテキストエディタが用意されています。統合エディタは Python の構文を認識し、コードの作成をスムーズにします。
シリアルポートと Python について詳しく
SerialTool および統合 Python ライブラリが提供する機能を少し掘り下げるために、実用的な例から始めてみましょう。
たとえば、シリアルポート経由でアップデート可能な、独自開発のデバイス用ファームウェアをお客様や同僚に簡単に書き込めるソフトウェアを提供したいとします。これはよくあるケースで、ゼロからソフトを開発し、可能であればマルチプラットフォーム対応とし、GUI・ユーザー操作・ファイル選択・エラー/確認メッセージといった要素をすべて組み込む必要があります。
このような場合、Python は他の言語よりも開発を容易にしてくれますが、一方で外部ライブラリのインストールや更新といった作業が必要になります。
SerialTool は、この問題を根本から解決します。シリアルポートの素早く直感的な選択、ファイル読み込み/保存用のダイアログボックス、処理状況をユーザーに知らせるメッセージボックスなど、簡単に呼び出せる関数群を用意しているからです。
これらの関数は、SerialTool が対応しているプラットフォーム(Windows・MacOS・Linux)上でネイティブに動作し、外部ライブラリへの依存をなくします。ユーザーとの基本的な対話処理を、ごく少ない行数でシンプルかつ高速・直感的に実装できます。
先ほどの基本例に戻ると、まずはすべてのアクティブなポートを閉じ、SerialTool.scan 関数で利用可能なシリアルポートを検索し、SerialTool.gui_selectport 関数を使ってユーザーに使用するシリアルポートを選択してもらいます。
この時点で、ユーザーが使用したいポートが分かりますので、あとは SerialTool.open 関数でそのポートを開くだけです。パラメータはコード側で指定することも、GUI 側に既に設定されているものを使うこともできます。シリアルポートが開いたら、SerialTool.gui_loadfile 関数で書き込み対象のファイルを選択し、Python の標準的なファイル処理で内容を開き、SerialTool.gui_showmessage でファームウェア書き込み実行の確認をユーザーに行います。
次に SerialTool.write を使い、ファイルから読み込んだバッファを、書き込みたいバイト数を指定して送信します。アップデート対象デバイスからの応答が必要な場合は、更新完了まで SerialTool.read コマンドで応答を待ち続けます。
このように、ほんの少数のコマンドだけで、数分もあれば自分のデバイス(あるいはサードパーティ製デバイス)の更新用プログラムを書くことができます。
難しく聞こえますか? SerialTool には、よくコメントされたサンプルが最初から組み込まれています。
シリアルポート用 Python 統合サンプル
理解を助け、すぐに結果を出せるように、SerialTool にはすぐに動作するコメント付きサンプルが同梱されており、統合関数の使い方をそのまま確認できます。大きな利点は、統合関数がシリアルポートを操作するために 外部 Python ライブラリを一切必要としない 点です。
Python の基本インストールがあれば、同梱サンプルはそのまま動作します。サンプルには、SerialTool に統合されている Python 用 SerialTool ライブラリの関数が一通り含まれており、サンプルコードの一部を書き換えるだけで、自分の用途に合わせたスクリプトが数分で完成します。
SerialTool に含まれるサンプルは、バージョンアップのたびに追加されていきます。そのため、常に利用可能な関数とその使い方を、インターネット検索なしで直接確認できます。
SerialTool の関数についての専用ドキュメントは、SerialTool API for Python ページで公開しています。
Python のインストール
多くのチュートリアルは、「PC に Python が入っていなければインストールし、最低限使えるように設定する」ところから始まります。SerialTool では、このステップをユーザーの手から極力取り除くため、この話題を最後に回しています。Python を PC にインストールしたあと、SerialTool の Python Environment メニューから現在の設定を自動で検出・テストできるからです。
前述のとおり、Python は無償のインタプリタ言語であり、PC 側に Python インタプリタがインストールされている必要があります。既に Python に慣れている方には説明はほとんど不要ですが、初めて Python とその開発環境に触れる方でも、手順は比較的シンプルです。
Windows の場合は、最新バージョンの Python(本ドキュメント執筆時点では 3.12)をダウンロードし、インストーラを最後まで実行するだけです。
MacOS では、多くの環境で Python があらかじめインストールされていますが、バージョン 2 系であることが多いため、最新バージョン(執筆時点で 3.12)に更新する必要があります。公式 Python サイトからインストーラをダウンロードし、Windows と同様にインストールします。
Linux の場合は、コマンドラインからインストールします。例:Ubuntu では
sudo apt-get install python3、Fedora では sudo dnf install python3Python のインストールに不安がある場合は、公式サイトや多数のオンラインチュートリアルを参照してください。
Python 環境のセットアップと設定。
インストールが終わり、「Python Environment」 メニューから設定を確認したら、「Check Installation」 ボタンを押すだけで、現在の Python 設定が読み込まれ、次回以降の SerialTool 起動時にも自動的に使用されます。
これで準備完了です。サンプルを読み込み、[RUN] ボタンを押せば、SerialTool と Python を使ったシリアルポートプログラミングの第一歩を踏み出せます。
追加情報
スクリプト作成をしやすくするため、組み込みエディタには一般的な IDE に近い機能が備わっていますが、現時点ではデバッガ機能は搭載されていません。
利用可能なオプションのうち、常に有効化しておくことを推奨するのが、「Automatically close serial ports when the script finishes execution.」 という設定です。スクリプト実行中に書き込みエラーが発生した場合でも、SerialTool が開いているシリアルポートを自動的に閉じてくれるため、次回スクリプト実行時にポート解放で困ることがなくなります。
スクリプトを停止して終了したい場合、sys.exit() を使用することは推奨されません。Python が SerialTool に統合されているため、これを呼び出すと SerialTool 自体が終了してしまうからです。ソースコード側からスクリプトの実行を終了させたい場合は、SerialTool.stopscript 関数を使用してください。
ループの途中で実行を停止したい場合は、GUI 上の [STOP] ボタンからも停止可能です。
Python は SerialTool に直接統合されているため、スクリプトは SerialTool の処理の一部として実行されることを忘れないでください。そのため、While True のような無限ループを記述する場合には、必ず time.sleep(0.1)(time ライブラリ)のような、0.1 秒程度の短いスリープを入れ、メイン GUI の処理に CPU 時間を譲る必要があります。これを怠ると、アプリケーション全体がフリーズしてしまう可能性があります。
ただし心配はいりません。付属のサンプルでは、どの箇所に「小さな遅延」を挿入すべきか、重要なポイントを分かりやすく示しています。
F.A.Q.
Python の統合は、特定の機能に制限されていますか?
いいえ。Python スクリプトのすべての機能がそのまま利用可能であり、システム上にインストールされている外部ライブラリの読み込みも含めて利用できます。
SerialTool と Python は、すべての OS で動作しますか?
はい。SerialTool が利用でき、かつ Python が利用可能なすべてのプラットフォーム(Windows・MacOS・Linux)で使用できます。
Python をダウンロードしてインストールする必要はありますか?
はい。Python インタプリタは、使用したい PC にインストールされている必要があります。SerialTool は Python3 を前提としており、Python2 との互換性は両バージョン間の互換性に依存します。Python2 利用者にも Python3 の使用を強く推奨します。
Python と SerialTool はどのように連携しますか?
Python スクリプトは、SerialTool に統合されている SerialTool ライブラリを介して、必要な関数を呼び出します。Python から設定したパラメータ(シリアルポートのオープン/クローズを含む)は、そのままメインのユーザーインターフェースとリンクされています。つまり、Python から SerialTool ライブラリとその関数を通じて、SerialTool 本体を直接コントロールする形になります。
SerialTool の機能は今までどおり使えますか?
はい。AutoAnswer、Alarm、SerialScope、パケット表示、データロギング、パケットのネットワーク送信 など、すべての SerialTool 機能はそのまま利用可能であり、GUI からいつでも選択できます。
複数のポートを同時に使用できますか?
はい。SerialTool の基本コンセプトは、複数のシリアルポートを同時に扱えることです。Python からは、SerialTool.assignPort 関数を使って、使用したいシリアルポートにシリアル番号(論理ポート)を割り当てることができます。
利用前に毎回 GUI からポートを開いて設定する必要がありますか?
いいえ。繰り返しになりますが、シリアルポートの管理は Python から直接行うことができます。
RTS や DTR の設定も行えますか?
はい。ライブラリを通じて、シリアルポートを開くとき、およびスクリプト実行中に RTS/DTR ピンの状態を直接制御できます。
SerialTool ライブラリに新しい機能を追加してもらうことはできますか?
はい。SerialTool の開発方針と実現可能性に応じて、Python 用 SerialTool ライブラリへの追加機能リクエストは検討し、可能なものから実装していきます。
どの程度のサポートが受けられますか?
弊社チームは、スクリプト統合をサポートし、スクリプト作成をスムーズに進められるよう支援したり、不具合の原因特定をお手伝いします。ただし、Python スクリプトそのものの作成・受託開発を行うわけではありません。サポートは、あくまで Python と SerialTool の統合に関する部分が対象です。