[Raspi][VB.NET] RaspberryPi で VB.NET

2015年1月2日

 Linux 系でも mono を使用すれば C# などのプログラムは動作するよね?ということですが、Raspberry Pi (Raspbian) でも動作するんですかね?ということで試してみました。

 まず導入。これはコマンド一発で行けるようです。(時間はかかりますが)

pi@raspberrypi ~ $ sudo apt-get install mono-complete

 次。Raspberry Pi で C# のプログラムをコンパイルしてみます。

public class HelloWorld
{
    public static void Main()
    {
        System.Console.WriteLine("hello!");
    }
}

 上記のソースコードをコンパイルする場合は、gmcs コマンドを使用します。コンパイルに成功すると exe ファイルができるので、それを実行するには mono コマンドを使用します。

pi@raspberrypi ~ $ gmcs hello.cs
pi@raspberrypi ~ $ mono hello.exe
hello!

 C# がコンパイルできることが分かったけど VB は?という話ですが調べてません(汗

 そもそも Raspberry Pi 上でコンパイルすると結構時間がかかりますし、ソースファイルが複数になった場合や参照設定云々…という話になると面倒なので、Raspberry Pi 上で開発するのはナシということで・・・

 gmcs が出力するファイルが exe なんだったら Windows で Visual Studio が吐いた exe でもいけるんじゃないの?ということで、以後開発には Visual Studio を使うことにします。 (Visual Studio 2013 を使用)

 とりあえず、動作することを確認したいので UDP で通信するプログラムを作ってみることにします。

Module Module1

    Sub Main()

        Dim udp = New System.Net.Sockets.UdpClient(60000)

        ' 受信
        Dim remoteEP As System.Net.IPEndPoint = Nothing
        Dim recvBytes = udp.Receive(remoteEP)

        ' 受信メッセージ取得
        Dim enc = System.Text.Encoding.UTF8
        Dim recvString = enc.GetString(recvBytes)
        Console.WriteLine("Recv Message : '{0}'", recvString)

        ' 送信メッセージ作成
        Console.Write("Input Return Message > ")
        Dim msg = Console.ReadLine

        Dim sendString = String.Format("{0} : Recv:'{1}' Send:'{2}'", Date.Now, recvString, msg)
        Dim sendBytes = enc.GetBytes(sendString)

        ' 送信元へ返信
        udp.Send(sendBytes, sendBytes.Length, remoteEP)

        udp.Close()

    End Sub

End Module

 このプログラムの機能は以下です。

  • UDP ポート 60000 で待ち受けて、
  • メッセージを受信すると返信メッセージの入力を促し、
  • Raspberry Pi 側の時刻, 受信メッセージ, 入力された返信メッセージを応答メッセージにして、
  • 受信元の IP/Port に UDP で送信する。
  • 一度送信したら、プログラムを終了する。

 このプログラムをコンパイルして、できた exe (UDPServer.exe とした) を teraterm pro などでファイル転送します。
 (teraterm pro の場合、メニューの file → SSH SCP を選択することでファイル転送ができます。)
 ファイル転送した後、mono UDPServer.exe、と入力しプログラムを起動させ、受信を待ち受けます。

 次に Raspberry Pi で待ち受けているプログラムにアクセスするコードを書きます。
 以下は、ホスト名 "raspberrypi" の UDP 60000 ポートに対して、自PC の 60001 ポートから "往信" を送信して、その応答を受信,表示する Powershell Script です。

$udp = New-Object System.Net.Sockets.UdpClient(60001)

$enc = [System.Text.Encoding]::UTF8

$sendString = $enc.GetBytes("往信")
$udp.Send($sendString, $sendString.Length, "raspberrypi", 60000)

$recvBytes = $udp.Receive([ref]$null)
Write-Host $enc.GetString($recvBytes)

$udp.Close()
$udp.Dispose()

 実行結果は以下。
 左端の番号は実行順序で、赤マーカー部はプログラムへの入力、緑マーカー部はプログラムの出力です。

  • Raspberry Pi 側
     1.    pi@raspberrypi ~ $ mono UDPServer.exe
    ---
    10.    Recv Message : '往信'
    11.    Input Return Message > 返信
    12.    pi@raspberrypi ~ $
    
  • Windows (Powershell) 側
     2.    PS > $udp = New-Object System.Net.Sockets.UdpClient(60001)
     3.    PS >
     4.    PS > $enc = [System.Text.Encoding]::UTF8
     5.    PS >
     6.    PS > $sendString = $enc.GetBytes("往信")
     7.    PS > $udp.Send($sendString, $sendString.Length, "raspberrypi", 60000)
     8.    PS >
     9.    PS > $recvBytes = $udp.Receive([ref]$null)
    ---
    13.    PS > Write-Host $enc.GetString($recvBytes)
    14.    2015/01/01 22:21:59 : Recv:'往信' Send:'返信'
    15.    PS >
    16.    PS > $udp.Close()
    17.    PS > $udp.Dispose()
    18.    PS >
    

 割とあっさり動作しました。
 ファイル入出力や COM(RS-232C) などへのアクセスはしていないのでわかりませんが、標準的なことをする分には普通に動くのではないかと思います。 #しらんけど






カテゴリー: Linux, OS, Program, VB.NET

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org