arduino温度センサーの値をシリアル通信してvb.netアプリで受信する方法
PR
arduino温度センサーの値をシリアル通信してvb.netアプリで受信するプログラムしてみました。
やることは
コンテンツ内容
1.arduinoに温度センサーを繋いでシリアル通信でデータを出力。→詳細はこちら
2.VB.NETのWindowsFormアプリを作成して受信。
仕様
STARTボタンを押すとシリアル通信でデータを行単位に読み込む。読んだデータをTextBox1に新しい順に表示する。
ENDボタンで受信を中止する。
2.1 空のwindowsFormのプロジェクトを作成する。
form1にtextbox、botton1、botton2を配置する。
2.2 form1.vbにコードを追加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
Public Class Form1 Public com1 As IO.Ports.SerialPort = Nothing Public STOP_FLG As String = "" Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim result As String result = Fnc_serial_open() If result <> "" Then MessageBox.Show("open error! " & result) Exit Sub End If TextBox1.Text = "" result = ReceiveSerialData() End Sub '''open Function Fnc_serial_open() As String Try Fnc_serial_open = "" com1 = My.Computer.Ports.OpenSerialPort("com3") com1.ReadTimeout = 10000 Catch ex As TimeoutException Fnc_serial_open = "Error: Serial Port open err." End Try End Function Function ReceiveSerialData() As String Try Do System.Windows.Forms.Application.DoEvents() Dim Record As String = com1.ReadLine() If STOP_FLG = "END" Then TextBox1.Text = "* END *" & vbCrLf & TextBox1.Text Exit Do End If TextBox1.Text = Record & vbCrLf & TextBox1.Text Loop ReceiveSerialData = "END" Catch ex As TimeoutException ReceiveSerialData = "Error: Serial Port read err." End Try End Function Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click STOP_FLG = "END" End Sub End Class |
コードの解説
・Button1_ClickでシリアルポートをOPENします。
USBポート(私のPCではcom3)となっています。ご自身の環境によって変えてください。
・Fnc_serial_open・・・comポートをOPENしています。転送速度9600とかの指定はいらないようです。
・ReceiveSerialData・・・com1.ReadLine()で行単位にデータを読み込みます。改行コード単位に読み込んでいるようです。
System.Windows.Forms.Application.DoEventsはENDボタンを受付る為のものです。
Button2_Click・・・ボタンで終了FLGをオンします。
まとめ
シリアル通信でVB側にデータを取り込むことができました。Arduinoからの通信データに日本語があると文字化けしていました。
コード体系が違うのでしょうね。日本語入れるなと言うことで・・・
取れたデータを1時間ごとにCSVで出力しDBにロードする仕組みを作れば自動でDBに保存できますね。