【C#】Arduino에서 취득한 센서값을 시리얼 통신으로부터 CSV 출력한다

개요



제목대로

역시 모두 파이썬을 좋아하는 것 같고, 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

소스 코드



ArduinoSerial_DataToCSV.cs
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;
                    }
                }

            }
        }
    }
}


실행 결과






첫 번째 줄이 잘못되는 문제가 있지만 잘 모르겠습니다.
피곤해서 수정하면 다시

참고 자료



Arduino 일본어 참조
h tp // w w. 무사시 전파. 이 m/아 r즈이노/레 f/이여 x. php

.NET Core에서 Shift-JIS를 처리하는 방법
htps : // bg. 히트진. jp/엔트리/2019/01/27/200055

좋은 웹페이지 즐겨찾기