iFLine-코딩으로 뽀샤버리기

2강. Hello 시리얼 디버그 메시지 출력하기

Posted by INDIFROG on 2020-06-24
Words 686 and Reading Time 4 Minutes
Viewed Times

2강. Hello 시리얼 디버그 메시지 출력하기

iFLine에 USB 케이블 연결

제품을 처음 구매한 상태에서는 아래 그림처럼 조립이나 선이 연결되어 있지는 않습니다.
보드와 모터, 바퀴, 배터리, IR센서보드, 초음파센서 등을 조립하고 마지막으로 iFZero 보드를 소켓에 장착을 합니다.

먼저, 프로젝트를 시작하기 전에 아래 그림과 같이 iFLine에 USB 케이블을 연결합니다.

Hello

프로젝트 생성하기

Hello

다음과 같은 순서로 새 프로젝트를 생성합니다.

1
2
3
4
Name 항목에 iFLine_Hello 라고 프로젝트 이름을 입력합니다. 
Board의 종류는 KITS_ESP_EDU 보드를 선택합니다. (주)한국아이티에스(KITS) 연구소에서 개발.
Framework는 Arduino를 선택합니다.
마지막으로, Finish 버튼을 누릅니다.

처음 VSCODE를 실행해서 프로젝트를 생성할 때에는 해당 보드의 SDK를 내려받기 때문에
시간이 오래 걸릴 수도 있습니다.
Mac 환경에서는 큰 문제가 없었으나 Windows 환경에서는 사용자가 많아서 그런지 많이 느립니다.
간혹, 네트워크 상황이 안좋을 때는 인내심의 한계를 넘기도 합니다.

그러면 해당 이름으로 디폴트 설정(platformio.ini)과 main.cpp 파일이 생성됩니다.
다음 그림에서는 앞서 생성한 프로젝트의 기본 화면으로 Arduino IDE가 생성한 기본 파일의 내용과 동일한 setup과 loop 함수로 구성된 main.cpp 파일의 내용을 볼 수 있습니다.

Hello

Arduino IDE와 VSCODE의 차이점

Arduino IDE와 초기 중요한 차이점은 두가지가 있습니다.

  • 첫번째

main 소스 코드가 .cpp로 아두이노 기본 파일의 ino 확장자가 아닙니다.
Arduio IDE에서는 ino 확장자를 기본으로 사용하고 모든 선언을 공유하기 때문에 별도의 헤더 파일을 선언할 필요는 없습니다.
그러나 VSCODE로 개발하기 위해서는 개발자가 추가적으로 .cpp 파일을 만들게 되면 헤더 파일을 적절하게 소스 코드에 추가를 해야 버그가 발생하지 않습니다.

  • 두번째

platformio.ini 파일이 기본으로 생성이 됩니다만,
기본 설정만으로는 iFLine 장치에 바로 업로드가 되지 않습니다.

따라서 platformio.ini 파일의 내용을 아래와 같이 일부 수정해야 합니다.

platformio.ini

디폴트로 생성된 platformio.ini파일 내용에 다음과 같이 업로드 및 디버그 모니터를 위해 통신 관련 포트와 속도를 추가해야 합니다.

  • Mac( OSX )용

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    ; PlatformIO Project Configuration File
    ;
    ; Build options: build flags, source filter
    ; Upload options: custom upload port, speed and extra flags
    ; Library options: dependencies, extra library storages
    ; Advanced options: extra scripting
    ;
    ; Please visit documentation for the other options and examples
    ; https://docs.platformio.org/page/projectconf.html

    [env:kits-edu]
    platform = espressif32
    board = kits-edu
    framework = arduino


    upload_port = /dev/cu.SLAB_USBtoUART
    upload_speed = 921600
    monitor_port = /dev/cu.SLAB_USBtoUART
    monitor_speed = 115200
  • PC ( Windows )용
    : COM 포트는 시스템 설정에서 확인이 필요함.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    ; PlatformIO Project Configuration File
    ;
    ; Build options: build flags, source filter
    ; Upload options: custom upload port, speed and extra flags
    ; Library options: dependencies, extra library storages
    ; Advanced options: extra scripting
    ;
    ; Please visit documentation for the other options and examples
    ; https://docs.platformio.org/page/projectconf.html

    [env:kits-edu]
    platform = espressif32
    board = kits-edu
    framework = arduino

    upload_port = COM4
    upload_speed = 921600
    monitor_port = COM4
    monitor_speed = 115200

Hello 코딩하기

이제 드디어 iFLine에 처음으로 코딩을 하고 업로드할 준비가 된 것 같습니다.
main.cpp 파일에 있는 setup 함수에 다음과 같이 코드를 입력해 보세요.

1
2
3
4
5
6
7
8
9
10
11
12
#include <Arduino.h>

void setup() {
Serial.begin(115200);

delay(1000);
Serial.println("Hello in the iFLine");
}

void loop() {
// put your main code here, to run repeatedly:
}

Hello 코드 빌드 및 업로드하기

그리고 나서 Control + Option + u 키를 누르면 업로드가 진행됩니다.
업로드가 성공적으로 이루어지면 하기 그림과 같이 SUCCESS가 출력이 됩니다.

Hello

시리얼 디버그 메시지 출력 확인하기 - Setup 함수

이제 코드의 결과를 확인해 볼 차례인데요. 코드의 내용은 처음 실행된 후1초 지연한 다음.
단순히 시리얼 디버그 모니터창에 “Hello in the iFLine”을 출력하는 것이 전부입니다.
시리얼 모니터 창의 내용을 보기 위해서는 다음 그림처럼 개미얼굴 아이콘을 눌러서 Monitor 메뉴를 클릭하면 됩니다.
그런데 모니터 창으로 왔지만 아무런 내용이 없죠…

Hello

자. 디버그 내용을 출력해 볼 차례입니다.

iFLine의 MCU보드인 iFZero 보드를 살펴보면 두개의 버튼이 있습니다.

  • 위쪽의 버튼이 리셋 버튼이고
  • 아래쪽 버튼이 GPIO0에 할당된 버튼입니다.

이제 리셋 버튼을 살짝 눌러보세요.

리셋후 1초가 지나서 시리얼 모니터 창에 딱 한번 Hello 내용이 출력되는 것을 볼 수 있습니다.
이것은 간략하지만 매우 중요한 사실을 암시하죠.

시리얼 디버그 메시지 출력 확인하기 - loop 함수

일단, 아두이노 프로그램은 setup과 loop 함수 두개가 기본입니다.
setup 함수는 기본적으로 GPIO 모드 설정과 같은 MCU 초기화나 다른 객체들의 초기화 등을 처리하는 것입니다.
또한 프로그램 전 범위에 걸쳐서 딱 한번 최초에 실행이 됩니다.

1
2
3
4
5
void loop() {

Serial.println("repeat loop function !!! ");
delay(1000);
}

loop 함수의 기능은 MCU가 가능한 시간 지연 간격으로 실행이 됩니다.
즉, loop 함수 내부에서 다소 일정 시간 걸리는 연산을 처리한다면 그 만큼의 시간 지연이 되면서 loop 함수가 반복적으로 호출이 됩니다.
코드를 다음과 같이 수정을 해 보면 위 내용을 확인해 볼 수 있습니다.

Hello