テクシオ・テクノロジーによるおじさんのためのIOT講座


(3) PythonによるLAN(Socket)通信プログラミング



Pythonはプログラミングのための参考資料やサンプルが豊富にありますが、人口知能やWebアプリケーション、統計処理についてが多く、通信を使って計測機器などを制御する例はそれほど多くありません。

本ページではGUIの作成とボタン処理を行うGUIライブラリ(Tkinter)、通信を行うSocketライブラリ 、一定周期で処理を行うインターバル動作、変数の共用を行うグローバル指定を説明いたします。
制御対象は弊社のマルチメーター となっていますが、文字列を変更することでLAN通信で接続する電源やオシロスコープの他にセンサ類にも対応が可能です。

環境の準備などの手順はここでは扱いません、Python本体の他に様々な開発ツールがありますのでインターネットで検索してpython3 の実行環境をそろえてください。また、ファイル処理やグラフ出力などはインターネットに豊富にサンプルがありますので必要に応じて追加してみてください。



今回作成するPython/Tkinter でのGUI表示


Pythonでの画面の構成としてはボタン:9個、テキストボックス:3個、ラベル:2個で、通信のOPEN/CLODE、アプリ終了、測定モードの切替えと1秒ごとの読取の開始と終了を割当ています。 処理としてはボタンのほかに1秒のインターバルでの動作も盛り込んであります。




1.初めに必要なライブラリとグローバル変数を登録します。
  
   ライブラリ登録はimportで行います、記述の違いはまだ理解できていません。
   Pythonの変数は何も指定しないとローカル変数になるようなので、計測器用
   の変数instrを宣言します。複数の機器を制御する場合は、instr1、instr2など
   の変数を増やすことで対応します。

2.画面のパーツを登録します。
  
   画面パーツはgridで配置を行っています。画面の解像度や分解能、OSの種類によって
   サイズが変わってしまう症状があります。
   複数の環境で利用する場合はかなり余裕を持った配置が必要になります。
   細かいサイズ・位置を指定したい場合はplace などを使用してください。

   ボタンやコンボボックスなどのイベントは必要に応じてここで登録しますが、
   種類によって登録方法が異なります。

3.イベントの処理を登録します。
  
   ボタンの有効・無効は['state']で切替えます。

   テキストの取得はget()、削除はdelete()、追加はinsert ()を使用します。

   指定時間後にイベントを発生させる場合はafter ()を使用します、ここでは1000ms
   後に自分自身を指定しているので1秒ごとに処理が行われます。

   デバイスを指定するinstrは、それぞれの処理でグローバル宣言をしておかないと、
   ローカル変数が割り当てられ正しく動作しなくなりますので注意してください。

   扱う文字列は計測器がASCIIですが、pythonはutf-8が標準になるため、送受信時に
   変換を行います。

   通信設定はIPアドレスとsocketポート指定を行います。

4.まとめ
  実用アプリケーションには至っていませんが、アプリの最低限の内容を取り上げました。
   ・Python3に対応しています、Python2で使用する場合は多少の修正が必要です。
   ・GUIは標準のTkinterを使用し、画面配置は単純なgridを利用しました。
   ・GUIのボタンやテキストなどの最低限の扱いを記述しました。
   ・簡単なインターバル処理の方法を記述しました。
   ・通信は標準のsocktライブラリを使用しました。
   ・最低限のエラー処理を記述しました。
   ・グローバル変数の利用方法を記述しました。
   ・機器を増やす場合は機器のグローバル変数を追加して対応します。

  後は使う方が必要なものを追加してご利用ください。

  弊社のLAN対応製品はこちら をご覧ください。

目次に戻る




ソースコードのダウンロード  本資料のダウンロード  電源向けサンプルコード

©Copyright 2020 TEXIO TECHNOLOGY All Rights Reserved.