バージョン情報
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#と領域を広げていくのも面白いですよ。