Python(4)-TCP通信

今回は、C#でも作成したTCP通信のアプリケーションをPythonを使用して作成してみようと思います。C#で作成したたアプリケーションは下記のページを参考にしてください。

C#言語(3)-TCP通信(クライアント編)
C#言語(4)-TCP通信(リスナー編)

今回はダイアログ無しです。IPとポートも直接コード内に書き込んでおきます。

TCPサーバーのアプリケーションは、接続が完了すると、クライアント側に「[*] Connection」と文字列を送信して、受信待ちになります。クライアント側から文字列が送られてくると、送られてきた文字を受信して表示します。表示が完了したら今度は文字を送信できます。送信と受信を順番に行うような仕組みになっています。

TCPクライアントのアプリケーションは、接続が完了すると、受信待ちになります。サーバー側から文字列が送られてくると、送られてきた文字を受信して表示します。表示が完了したら今度は文字を送信できます。受信と送信を順番に行うような仕組みになっています。

動作させると下記のように文字列を送受信できます。

クライアント側をC#で作成したアプリケーションでも文字列を送受信できます。。

サーバー側のソースコードは下記のようになります。

WROOM-02(3)-通信体系

前回、WROOM-02(ESP8266デバイス)を使う為に、Arduino IDEのセットアップをしました。今回、WROOM-02を使用して、無線通信を行おうと思うのですが、通信体系について考えておこうと思います。

主要な通信体系は大きくわけて下記の3つ考えれられます。

  1. WROOM-02を親機と考えたPCとWROOM-02の通信
  2. PCを親機と考えたPCとWROOM-02の通信
  3. PCとWROOM-02の間に無線ルーターを挟んだPCとWROOM-02の通信

他にもあると思いますが、主要なものはこの3つかなと思われます。

まずは、1 のWROOM-02を親機と考えたPCとWROOM-02の通信を行おうと思います。1 のWROOM-02を親機と考えたPCとWROOM-02の通信をする為のコードは下記のようになります。※注意:下記のコードをesp8266に書き込むと、ATコマンドは使用できなくなります。

WROOM-02(2)-Arduino開発環境設定

前回、WROOM-02を調査した結果、arduinoデバイスとして使用できる事がわかりました。それでは、Arduinoデバイスとして使用する為に、Aruduinoの開発環境をインストールします。下記サイトより、Arduino IDEをダウンロードしてインストールします。

https://www.arduino.cc/en/main/software

インストールが完了したら、Arduino IDEを起動して、ESP8266デバイスを使用する為の開発環境の設定を行います。※前回も説明しましたが、WROOM-02はESP8266を搭載したモジュールとなります。

まずは、ファイル-環境設定の追加のボードマネージャーのURLに、下記のURLコードを入力して、OKボタンを押します。

WROOM-02(1)-無線モジュールを調査

無線でアナログ情報を取得したいので、マイコンで制御できる無線を調べていると、WROOM-02にたどり着きました。RS232通信で、無線の設定をするようです。早速、試してみました。試したのは下記の2つの製品です。

電子太郎 ESP-WROOM-02開発ボード 2.4 GHz Wi-Fiモジュール MicroUSB

新品価格
¥1,700から
(2019/11/9 11:21時点)

ESP-WROOM-02ピッチ変換済みモジュール《T型》

新品価格
¥925から
(2019/11/9 11:23時点)

ESP-WROOM-02ピッチ変換済みモジュールは、価格は安いですが、RS232レベル変換モジュールや抵抗などを用意する必要がありますので、少々手間がかかります。

ESP-WROOM-02開発ボードは、RS232レベル変換モジュールや抵抗などが搭載されているので、価格はESP-WROOM-02ピッチ変換済みモジュールと比べて、価格は高いですが、USBケーブルと繋げるだけで使用できます。まず、試してみたい方には、ESP-WROOM-02開発ボードのほうが便利なので、今回は、ESP-WROOM-02開発ボードを使用指していこうと思います。

それでは、早速、ESP-WROOM-02開発ボードとPCをUSBケーブルで接続します。すると、ドライバーのインストールが始まりますので、インストールが完了するまで待ちます。

インストールが完了したら、TeraTermを立ち上げて、動作を確認します。TeraTermを実行したら、設定-シリアルポートよりボーレートを115200bpsに設定します。次に、設定-端末より送信の改行コードをCR+LFに設定します。
開発ボードのリセットボードを押すと下記のようなメッセージが表示されます。

readyと表示されればOKです。wroom-02はATコマンドと呼ばれるものが、使用できます。例えば、ATと送信すると、OKと返信が返ってきます。


このATコマンドを使用する事で、wroom-02の設定ができます。ここでふと疑問に思うことがありました。ATコマンドが使用できるということは、マイコンのようなものが搭載されているのでは?ちょっと調べてみると下記のことがわかりました。wroom-02はESP8266を搭載したモジュールです。では、ESP8266なにかと言いますと、マイコンを搭載したWiFiモジュールのようです。さらに、Arduinoデバイスとしても使用することが可能なようです。すばらしいですね。Arduinoデバイスを使用してみたいと思ってもいたので、Arduinoデバイスとして使用して、WiFiを使用してみようと思います。

PIC(3)-RS232C通信

本日は、PICを使用したシリアル通信機能を構築しようと思います。

PICの周辺機器はUARTを使用します。UARTは、Universal Asynchronous Receiver Transmittionの略で、いわゆる汎用のシリアル通信の機能をもった周辺回路モジュールです。名前の通り、全二重の非同期式通信であり、調歩同期式通信とも呼ばれます。

RS232Cは、OSI参照モデルの物理層に位置づけされます。ネットワークの物理的な接続・伝送方式を定めたものです。PIC側とPC側の電圧レベルを合わせるために、中間に変換するデバイスが必要となります。中間デバイスとしては、MAX232やFT232などがあります。今回使用するボードには、FT232が使用されていました。

下記のコードは、RS232C通信規格で、UARTを使用した通信機能のコードになります。クライアント側から文字列を送信すると、PIC側から同じ文字列を返信する機能になります。

PIC(2)-タイマー割り込み機能

本日は、PICを使用したタイマー割り込み機能です。タイマー割り込み機能は、一定周期で処理をしたい場合などに使用します。下記のコードは、タイマー機能を使用して、50ms毎にLEDランプが点灯、消灯を繰り返す機能になります。

タイマーのカウント数について考えていきます。今回、クロックは4MHzに設定しています。内部クロックの場合、カウンタは4周期に1カウントするので、今回は1000000カウントできることになります。この場合、LEDの点灯、消灯は1μsecになります。今回は、50msecという設定なので、500000カウントすれば良い事になります。ただし、タイマーのカウントは8bitしか用意されていません。ようするに、256回までしかカウントできません。

そこで、プリスケーラを活用します。プリスケーラは8bit用意されているので、これを活用すると256×256で65536カウントできます。これなら50000カウントできるので、50msecの周期をつくれそうです。50000カウンタをプリスケーラ値256で割ると、約195カウンタになります

タイマーのMAX値の256カウントから195カウントを引いた値をタイマーの初期値にすることで、50msec後にタイマー0割り込みが発生するような機能が構築できます。TMR0にカウンタの初期値を入力するので、TMR0=0x3Dとなっております。このカウンタ値の設定は、メイン関数の部分の他にも、タイマー0割り込み関数でも設定しております。

それでは、コーディングしていきたいと思います。タイマー機能を使用して、50ms毎にLEDランプが点灯、消灯を繰り返す機能のソースコードは下記のようになります。

PIC(1)-スイッチによるLED点灯

PICはMicrochipTechnology社が製造しているマイコンです。PICは、Peripheral Interface Controllerの略で、日本語訳にすると周辺機器接続部制御となります。PICはマイコンの一種で、CPUや入出力インターフェイス(I/O)、メモリ(RAM、ROM)が一つのICの中に搭載されたワンチップマイコンが主流です。以前のマイコンはCPUやI/O、RAM、ROMは別々のICとして分かれていたようです。PICは機能の違いやピン数の違い、メモリ容量の違いなどでさまざまな種類があります。

今回は、PICを使用して、LEDを制御してみたいと思います。使用するマイコンは、PIC16F627Aです。以下のようなH/Wがセットになっている書籍があったので購入して使用しました。

キットで遊ぼう電子回路 新PIC入門C言語編

下記から統合開発環境「MPLABX」がダウンロードできるので、ダウンロードしてインストールしておきます。インストールするとXCコンパイラをインストールすかどうか問い合わせがあると思いますので、XC8コンパイラを忘れずにインストールしておいてください。

https://www.microchip.com/mplab/mplab-x-ide

それではMPLABを実行して、開発環境を開きます

新規プロジェクトを作成していきます。FileメニューよりNewProjectを選択します。新規プロジェクト作成ダイアログが開かれれるので、Standalone Projectを選択して、Nextを選択します。

ここでは、使用するデバイス(PIC)を選択して、Nextを選択します。使用するデバイスは、PIC16F627Aです。

ヘッダーの選択画面が開かれますが、今回使用しないので、Nextを選択します。使用しているPICライターの選択ダイアログ開かれます。私はPICkit3を使用しているので、PICkit3を選択して、Nextを選択します。

使用するコンパイラを選択するダイアログが開かれので、XC8を選択します。XC8はMPLAB Xをインストールした時にはインストールすると思いますが、インストールしなかった場合は別途インストールしてください。

プロジェクトの作成先を選択するダイアログが開かれます。Project Name、Project Location、Project Folderを設定します。今回は、Project NameをSample_LED_001、Project Locationをドキュメントフォルダの中のMPLABフォルダにしました。Project NameとProject Locationを設定するとProject Folderが自動で設定されます。日本語文字を使用する為に、EncordingはShift_JISを選択して、Finishを選択します。

これで、新規プロジェクトの作成は完成です。画面左上側にプロジェクトが表示されているのがわかります。それでは、ソースファイルの作成に取り組みます。Projectsの中のSorce Filesを右クリックして、メニューの中のNew→C Source Fileを選択します。ファイル名を設定して、Finishを選択します。C Source Fileのファイル名設定画面が表示されるので、ファイル名を設定して、Finishを選択します。

C Source Fileが作成されたので、この中にプログラムを書き込んでいきます。

続きを読む

C#言語(6)-CSVファイルの読み込みと書き込み

今回は、アプリケーション上でCSVファイルを開き、変数にCSVファイルデータを保存した後、変数に保存してあるCSVファイルデータを書き込むアプリケーションを作成しようと思います。下記のようなダイアログを作成しました。

ダイアログの作成方法は、下記を参照してください。

C#言語(1)-アプリケーションを作成してみる

参照ボタンを押すと、読み込みたいファイルを選択する画面が表示されます。

実行ボタンを押すと、書き込み先ファイルを選択、または新規作成できる画面が表示されます。

書き込み先ファイルを選択すると読み込んだデータを書き込み先ファイルに保存します。

単純な機能ですが、よく使う機能だと思います。読み込むファイルにパラメータを設定しておき利用したり、読み込んだファイル加工して新規にファイルを作成したりといろいろと応用できます。

それでは、ソースコードを見ていきます。