Arduinoシリアル通信 その4:exe化

バージョン情報
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#のコンソールアプリケーションを選択してプロジェクトを作成する。

serial_exe

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と入力して実行。
cmd

ArduinoのTFT液晶に表示される。
IMG_201412088831

これでvbaなどからもShellで実行できるはずだ。

使用してみたい方はどうぞ。
com3_9600_w

Arduinoシリアル通信 その4:exe化」への2件のフィードバック

  1. 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」をありがたく利用させていただきます。

    1. コメントして頂きありがとうございます。
      面白そうな仕組みですね。「com3_9600_w」ぜひ使ってください。

      vbaからArduino、C#と領域を広げていくのも面白いですよ。

shirotsuku へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です