バージョン情報
Arduino Uno , Arduino IDE 1.0.5 , windows 8.1 , python 3.4 , pyserial 2.7 , visual studio Express 2013 for Desktop
前回の実験で、pythonによるArduinoへのメッセージの送信がお手軽なことが分かった。せっかくなので、他のプログラムから呼び出せるようにexe化に挑戦してみた。
google先生に聞くと、pythonのexe化ツールとしてpy2exeというものがあるらしい。さっそくダウンロード、、、あれ? python 3系がない。よく調べると3系には対応していないらしい。もう少し探すと、cx_Freezeというものがあるらしのでダウンロードしてインストール。以下のようなsetup.pyを作成してビルドしてみた。ん?できたのかな? exeがあったのでダブルクリックしてみるも動かず。しばらく格闘したがよくわからないので、ここは一時撤退。
import sys from cx_Freeze import setup, Executable includes = ["serial"] base = None if sys.platform == "win32": base = "WIN32GUI" setup( name = "test", version = "0.1", description = {"test": {"includes": includes}}, executables = [Executable("serial_04.py", base=base)])
気を取り直して、visual studioに方針転換。まぁwindows コンソールアプリを作りたいわけなのでこっちの方が良かったかな?
Vsisual Stduio Express を起動し、新しいプロジェクトからVisual C#のコンソールアプリケーションを選択してプロジェクトを作成する。
C#でシリアル通信をするには以前も使用した、System.IO.PortsのSerialPortクラスも用いれば簡単にできる。
今回はコマンドプロンプトから、引数付きで実行し引数をそのままcom3につながったArduinoに送信するプログラムにしてみた。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO.Ports; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { SerialPort com = new SerialPort("COM3"); com.BaudRate = 9600; com.Open(); com.WriteLine(args[0]); com.Close(); } } }
プログラムの名前を決めるのを忘れていた。今回はとりあえず、ビルドしたexeファイルをコピーして、ファイル名だけ変えてしまおう。”com3_9600_w.exe”にする。
では動作確認をしてみる。コマンドプロンプトからcom3_9600_w.exe HelloArduinoと入力して実行。
これでvbaなどからもShellで実行できるはずだ。
使用してみたい方はどうぞ。
com3_9600_w
DBのFileMaker Proを使い、工場設備と連携した業務ソフトを作ろうと思いましたが、PCとPLCをリレーで相互通信させる方法が分からずいろいろ調べていました。
その中でArduino Leonardoを見つけ
PCへの入力を「PLC –> Arduino Leonardo –> キー出力 –> PC(FileMaker)」
PLCへの出力を「PC(FileMaker) –>com3_9600_w –> Arduino Leonardo –> PLC」
でやれないかと考えつきました
※「com3_9600_w」からは、コマンド出力時の文字数でArduinoからの出力ソケットを選択させようかと考えています
当方、プログラム開発はVBAまでしか作ったとがないので、不安いっぱいですが何とか頑張ろうと思っています。
御サイト「Arduinoシリアル通信 その4:exe化」を見つけることで、最後までイメージ出来なかった「PCからPLCへの出力」に目途がつきました。ありがとうございます。
「com3_9600_w」をありがたく利用させていただきます。
コメントして頂きありがとうございます。
面白そうな仕組みですね。「com3_9600_w」ぜひ使ってください。
vbaからArduino、C#と領域を広げていくのも面白いですよ。