본문 바로가기
아두이노 기초 학습

3. 아두이노 Serial 사용하기

by 에이치엘 2022. 12. 8.

★ 제가 생각하기에 아두이노에서 젤 처음 배워야될 내용이 Serial 통신인거같습니다.

 ○ C# , Java 등 언어와 달리 아두이노에서는 시리얼 통신을 쉽게 사용이 가능하다.

 ○ 아두이노 스케치에서는 break point 등, 지원을 하지 않아 가장 쉽게 로그를 찍어볼 수 있다.

    ( 타 버전에서는 break point 등 디버깅 방법을 포함되어 있을 수 있습니다 )

 ○ 두번째 내용에 덧붙여서 문법은 배우면되나, 디버깅은 재주이기 때문이다. 

    ( 개발을 하다보면, 프로그래밍 외, 디버깅해야되는 경우가 많이 발생됩니다. 일반적으로 break point를 지정해서 디버깅을 하면되는데, 그렇지 못하는 경우도 많이 발생됩니다. 그렇지 못할 경우, 로그파일로 디버깅을 하거나, 후킹을해야되는 경우도 발생됩니다 )

 

★★ 준비물 ★★

◎ 아두이노 보드 ( 본 예제에서는 아두이노 시리즈 중 UNO 보드를 사용하였습니다 )

 

1. Serial은 어떻게 사용하나?

기본적인 시리얼 사용은 코드 두줄이 끝입니다.

◎ Serial.begin(9600);

setup()함수가 보이나요? 이전 시간에 setup()함수는 아두이노 시작시 최초 1회 실행된다고 설명했습니다. Serial.begin()함수는 이 프로젝트에서 시리얼 통신을 사용하겠다고 선언하는 것입니다. 즉, 아두이노가 loop()함수에 진입하기 전에 시리얼 통신의 사용 유무를 아두이노에게 알린다고 보면됩니다.

그럼 Serial.begin()함수 속에 9600은 무슨말일까요? 9600은 통신속도를 나타냅니다. 통신속도는 양측( 송신, 수신 )이 동일한 통신속도를 설정해야 정확한 대화를 할 수 있다고 보시면됩니다. 쉽게 말해, 두사람이 대화를 하면서 길을 걷고 있습니다. 근데 한명은 시속5km로 걸어가면서 이야길하고 한명은 시속 20km로 걸어가면서 대화를 한다면? 대화를 제대로 할 수 없겠죠? 대화는 할 수 있으나, 상대가 뭐라하는지 양측은 잘 모를 것입니다. 양측이 정확한 대화를 하기위해선 두명이 서로 걷는 속도를 맞춰서 대화를 해야 정확한 대화를 이어나갈수있겠죠? ( 비유가 맞는지는 잘 모르겠습니다 ㅎㅎ )

※ 통신속도 값은 일반적으로 9600, 115200 등을 사용합니다. 꼭! 9600으로 할 필요는 없습니다. 

  ( 통신속도 값이 클수록 멀리갈까요? 작을수록 멀리갈까요? 맞춰보세요~ )

 

◎ Serial.println("내용");

loop()함수는 지난시간에 첫줄~마지막줄 실행 후 다시 첫줄~마지막줄 실행을 계속 반복한다고 설명했습니다.

Serial.println() 함수는 시리얼통신으로 송신하는 역할을 합니다. Serial.print(), Serial.write() 등 함수도 존재하는데, 이는 나중에 알아보기로 하고, Serial.println()함수는 송신하는 역할을 하는데, 어떤걸 송신하는걸까요? 바로 ()안에 들어있는 내용을 송신하는 역할을 합니다. 그럼 코드가 어떻게 작성되어있는지 다시 보겠습니다.

Serial.println("내용"); <- 이렇게 작성되어있습니다. 즉, 내용 이란 문자를 송신하는 역할을 합니다. 내용 이란 문자에 큰따옴표(" ")가 감싸고 있는 이유는 문자열이기 때문이고, 문자(아스키코드)의 경우 작은따옴표(' ')로 표기감싸야합니다.

 

※ 기초 학습이기에 깊게는 들어가지 않겠습니다. 학습하면서 하나씩 추가하면서 배우면되니, 이번 시간은 문자열, 문자까지만 설명하겠습니다.

 

2. 아두이노와 PC를 연결합니다.( 따로 이미지 첨부는 하지 않습니다 )

 ◎ 아두이노에 연결된 파란색 케이블의 UBS를 PC에 연결하면 됩니다 

 

3. 아두이노 스케치의 메뉴 -> 툴 -> 보드 및 포트를 확인합니다

◎ 위와 같이 보드에 사용하는 아두이노 보드와 같다면 "정상"입니다. 다르다면 ">"를 선택하여, 보드를 선택해주세요.

◎ 위와 같이 포트가 자동으로 설정되었다면 문제 없습니다.

 

※만약 다음과 같이 포트가 자동으로 잡히지 않는다고 걱정하지마세요.

이럴 경우, 다음과 같이 ">"를 눌러봅니다

COM4 , COM5 두개의 포트가 표기됩니다( 저의 경우 입니다 )

두개의 포트 중 어떤게 PC와 연결된 포트인지 구분을 할 수 없습니다.

이럴땐 다음과 같이 컴퓨터의 장치관리자(PC화면 왼쪽하단 윈도우 로고를 마우스 오른쪽 클릭)를 실행합니다

리스트에서 포트를 펼칩니다. 그럼 COM5, COM4가 보이나요? 그래도 COM4인지, COM5인지 모르겠다? 하시면, 장치관리자를 열어둔 상태에서 PC와 연결된 아두이노의 USB케이블을 분리합니다. 그럼 COM4, COM5 둘 중 하나가 사라질 것입니다. 그리고 다시 PC와 아두이노의 USB 케이블을 연결합니다. 그럼 다시 COM4 또는 COM5 둘중 하나사 새로 생겨날것입니다. 즉! 연결했을 때 새로 생겨난 COM? 포트가 아두이노의 포트가 되는 것입니다. 아두이노를 연결했을 때 새로 생겨난 포트를 아두이노 스케치에서 선택해주면 됩니다.

 

4. "업로드"버튼을 눌러 아두이노에 프로그래밍된 코드를 업로드 합니다

◎ 상단의 "업로드"버튼을 클릭하면, 코드에 오류가 없는 경우, 이미지 하단과 같이 "업로드 완료"라는 문구가 표기되며, 정상적으로 "업로드"가 진행되었다는 것입니다.

※ "업로드"버튼을 눌렀는데 다음과 같이 폴더 창이 활성화 될 경우, 당황하지 마세요.

◎ 이 경우는 프로젝트의 폴더가 설정이 안되었다는 뜻입니다. 원하는 경로를 선택하시고, 프로젝트 이름을 지정하여 저장하시면 됩니다. ( 본 예제에서는 프로젝트 이름을 "Serial" 이라고 지정했습니다 )

 

5. 아두이노가 잘 작동하고 있는지 "시리얼 모니터"를 통해 확인합니다.

◎ 두번째 이미지가 "시리얼 모니터"입니다. 두번째 이미지와 같이 "내용" 글자가 계속 출력이 되면 정상 동작하는 것입니다. 근데, 왜? 한번이 아니고, 계속 찍어내는 걸까요? 이유는 loop()함수가 반복되기 때문입니다. 그렇다면? 한번만 찍을 순 없을까? 라는 생각할 수 있습니다. 당연히 있습니다. 그 방법은 차차 알아가보도록 하겠습니다.

 

※ 만약 두번째 이미지처럼 "내용"이 라는 글자가 출력이 되지 않거나, 이상한 문자가 출력된다면?

보드레이트("통신속도") 38400 설정된 상황

◎ "시리얼모니터" 오른쪽 하단의 "보드레이트"(통신속도) 값이 Serial.begin(9600); 값과 맞지 않아서 일 확률이 높습니다.

  위 이미지의 붉은색 표기의 "보드레이트"를 선택하여 9600 으로 설정하시면 정상 출력될 것입니다.

 

★ 신기하죠? 단! 두줄의 코드로 이렇게 쉽게, 아두이노에서 보내는 송신 데이터를 PC에서 수신 받아볼 수 있습니다.

만약, 본 시리얼 통신을 C# , JAVA 등 타 언어로 개발할 경우, 단 두줄의 코드로는 어림 없습니다. ^^.

 

★★Serial 통신에 대해서 좀 더 궁금하다면? 예제에서 사용된 Serial.begin(); 함수에 들어가는 통신속도("보드레이트")값을 변경도 해보고, Serial.println(); 함수에 들어가는 문자열도 변경을 해보시기 바랍니다.

( 코드 변경 후에는 당연히 "업로드" 버튼을 눌러서 아두이노에 업로드 해야되는 사실은 잊지마시구요 )

 

댓글