C# & 파이썬 & 아두이노

아두이노 프로 마이크로 시리얼 읽기 오류 해결

피커 2021. 1. 12. 15:23
728x90
반응형

이번에 간단한 프로젝트를 진행하기 위해 아두이노 프로 마이크로를 구매하였다.

아두이노 프로 마이크로는 아두이노 레오나르도의 미니 버젼이라고 생각하면 된다.

동일한 Chip을 사용해서 개발 환경 및 세팅이 동일하다.

아래는 직접 구매한 아두이노 프로 마이크로를 찍은 사진이다.

PC와 아두이노간에 통신을 하기위해서 기존에 사용하던 아두이노 나노와 동일한 코드를 적용해보았다.

하지만, 시리얼로 아무것도 읽어오지 못하는 문제가 발생했다.

국내 블로그 및 사이트에서는 별다른 정보를 찾지 못해서 삽질을 하던중 아래처럼 코드를 바꾸니 정상 동작했다.

아래는 기존 PC의 C# 코드이다.

// 시리얼포트 열기 SerialPort sp = new SerialPort(portName); sp.Open(); // 읽기 작업쓰레드: Read from serial port var cancel = new CancellationTokenSource(); var readTask = Task.Factory.StartNew(() =>

아래는 수정후의 PC C# 코드이다.

// 시리얼포트 열기 SerialPort sp = new SerialPort(portName); sp.DtrEnable = true; sp.RtsEnable = true; sp.Open(); // 읽기 작업쓰레드: Read from serial port var cancel = new CancellationTokenSource(); var readTask = Task.Factory.StartNew(() =>

즉, 아두이노 프로 마이크로 같은 경우 칩셋 및 spec의 차이로 인하여 DTR과 RTS를 켜야 시리얼 통신이 가능해진다.

나처럼 프로 마이크로의 시리얼 문제로 해메는 사람들에게 도움이 되었으면한다.

삽질은 필요하지만 너무 오래 삽질하면 힘들다 ^^

아래는 DTR enable 파라미터 설명이다.

// Gets or sets a value that enables the Data Terminal Ready (DTR) signal during

// serial communication.

//

// Return value:

// true to enable Data Terminal Ready (DTR); otherwise, false. The default is false.

//

// Exception:

// T:System.IO.IOException:

// The port is in an invalid state. -or- An attempt to set the state of the underlying

// port failed. For example, the parameters passed from this System.IO.Ports.SerialPort

// object were invalid.

아래는 RTS 파라미터 설명이다.

// Gets or sets a value indicating whether the Request to Send (RTS) signal is enabled

// during serial communication.

//

// Return Value:

// true to enable Request to Transmit (RTS); otherwise, false. The default is false.

//

// Exception:

// T:System.InvalidOperationException:

// The value of the System.IO.Ports.SerialPort.RtsEnable property was set or retrieved

// while the System.IO.Ports.SerialPort.Handshake property is set to the System.IO.Ports.Handshake.RequestToSend

// value or the System.IO.Ports.Handshake.RequestToSendXOnXOff value.

//

// T:System.IO.IOException:

// The port is in an invalid state. -or- An attempt to set the state of the underlying

// port failed. For example, the parameters passed from this System.IO.Ports.SerialPort

// object were invalid.

반응형