概要
題名の通りです
やっぱりみんなpythonが好きらしく,C#でやっている人は少なかったので情報共有
今回はArduinoからのセンサ出力をWindowsコンソールアプリケーションを用いてCSVに出力するまでの道のりです
環境
windows10
Visual Studio 2019
Arduino IDE
Arduino Pro mini
適当な光センサ
実装
Arduino IDE側
const int analogInPin = A0;
int sensorValue = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
sensorValue = analogRead(analogInPin);
Serial.print("sensor = ");
Serial.print(sensorValue);
Serial.print("\n");
delay(2);
}
シリアルモニタ結果はこんな感じ
このウィンドウ名の通り今回のシリアルポートはCM3
ツールタブ押してシリアルポート見ても確認できます
後,bpsは9600であることも覚えておきます
Visual Studio側
まず今回必要なパッケージを.NETからインストールします
①System.Text.Encoding.CodePages
csvに出力する際にあのShift-Jisを使います
そして案の定Shift-Jisは適してないと怒られます
Windowsの呪いは恐ろしいです
そして調査したところ,
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
と魔法の言葉を打てば大丈夫らしいです(投げやり)
1.VSのプロジェクトタブからNuGetパッケージの管理を選択
2.参照タブの検索ボックスにSystem.Text.Encoding.CodePagesと入力
3.一番上のやつをインストール,私のはver.4.7.1でした
②System.IO.Ports
私のSystem.IO.Portsは旧バージョンだったらしくコンパイル時にSerialPort型が名前空間にないと怒られました
最新verの方は必要ないと思いますが私のような症状が出たのであればインストールしてみてください
1.VSのプロジェクトタブからNuGetパッケージの管理を選択
2.参照タブの検索ボックスにSystem.IO.Portsと入力
3.一番上のやつをインストール,私のはver.4.7.0でした
ソースコード
using System;
using System.IO.Ports;
using System.Text;
namespace ArduinoSerial_DataToCSV
{
class Program
{
static void Main(string[] args)
{
//キー入力に使用
var outChar = "";
//現在時刻
DateTime dt = DateTime.Now;
String now_time = dt.ToString();
now_time = now_time.Replace("/", ".").Replace(" ","_").Replace(":","-");
String PATH = @"C:/Users/○○/~/"+now_time+"_SensorData.csv";
//EncodeをShift-Jisに対応
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
//シリアルポート取得
SerialPort sp = new SerialPort("COM3");
//csv出力
var sw = new System.IO.StreamWriter(PATH, false, System.Text.Encoding.GetEncoding("shift_jis"));
//Arduino側のサンプリング周波数
sp.BaudRate = 9600;
sp.Open();
while (true)
{
//センサ値1行分取得
string data = sp.ReadLine();
//csv出力
sw.WriteLine(data);
Console.WriteLine(data);
//Q入力でプログラム終了
if (Console.KeyAvailable)
{
outChar = Console.ReadKey().Key.ToString();
if (outChar == "Q")
{
return;
}
}
}
}
}
}
実行結果
1行目がうまくいかない不具合があるけどよくわからずじまい
疲れたので修正するならまた今度
参考資料
Arduino日本語リファレンス
http://www.musashinodenpa.com/arduino/ref/index.php
.NET CoreでShift-JISを取り扱う方法
https://blog.hitsujin.jp/entry/2019/01/27/200055