|
| 1 | +--- |
| 2 | +date: 2025-09-15 |
| 3 | +category: [Arduino] |
| 4 | +published: true |
| 5 | +fixed: false |
| 6 | +--- |
| 7 | + |
| 8 | +## arduino-cli 설치 |
| 9 | +```shell |
| 10 | +brew install arduino-cli |
| 11 | +``` |
| 12 | +arduino-cli는 Arduino IDE 보다 더욱 고차원적인 아두이노 관리 프로그램임. |
| 13 | + |
| 14 | +## arduino-cli 최초 설정 |
| 15 | +```shell |
| 16 | +arduino-cli config init |
| 17 | +``` |
| 18 | +arduino-cli를 컴퓨터에 설치한 후 가장 먼저, 딱 한 번만 이 명령어를 실행하면 됨. |
| 19 | +이 명령어로 설정 파일의 뼈대를 만든 뒤, ESP8266 보드 URL을 추가하는 등의 설정을 하게 됨. |
| 20 | + |
| 21 | +## WeMos D1 보드 설정 (외부 보드 매니저 주소 추가) |
| 22 | +```shell |
| 23 | +arduino-cli config set board_manager.additional_urls [http://arduino.esp8266.com/stable/package_esp8266com_index.json](http://arduino.esp8266.com/stable/package_esp8266com_index.json) |
| 24 | +``` |
| 25 | +arduino-cli의 영구적인 설정 파일을 수정하는 명령어임. |
| 26 | + |
| 27 | +arduino-cli의 메인 설정 파일(`arduino-cli.yaml`) 안에 있는 `board_manager.additional_urls` 라는 목록에, 지정된 URL(`http://arduino.esp8266.com/...`)을 추가하고 저장함. |
| 28 | + |
| 29 | +이 명령어는 arduino-cli에게 "앞으로 보드 패키지 목록을 찾을 때, 아두이노 공식 서버뿐만 아니라, 내가 지금 알려주는 이 인터넷 주소도 확인 대상에 포함시켜라" 라고 데이터 소스(Source)를 등록하는 일회성 작업임. 이 명령 자체는 어떠한 다운로드도 수행하지 않음. |
| 30 | + |
| 31 | + |
| 32 | +## 드라이버 업데이트 |
| 33 | +```shell |
| 34 | +arduino-cli core update-index |
| 35 | +``` |
| 36 | +등록된 모든 데이터 소스로부터 최신 패키지 목록을 다운로드하는 명령어임. |
| 37 | + |
| 38 | +`arduino-cli.yaml` 설정 파일에 등록된 모든 URL(아두이노 공식 URL + 우리가 config set으로 추가한 URL)에 실제로 접속하여, `package_..._index.json` 이라는 이름의 파일들을 다운로드하고 로컬 캐시를 업데이트함. |
| 39 | + |
| 40 | +`package_..._index.json` 파일 안에는 설치 가능한 보드, 라이브러리, 도구들의 이름과 버전 정보가 들어있음. |
| 41 | + |
| 42 | +## WeMos 드라이버 설치 |
| 43 | +```shell |
| 44 | +arduino-cli core install esp8266:esp8266 |
| 45 | +``` |
| 46 | +`arduino-cli core update-index` 명령어를 실행 이후에, 최신 목록을 바탕으로 WEMOS D1를 위한 전용 패키지를 설치하기. |
| 47 | + |
| 48 | +## config set ..., core update-index, core install의 차이 |
| 49 | +- `config set ...` 명령어로 arduino-cli에게 새로운 정보 소스의 주소를 알려줌. |
| 50 | + |
| 51 | +- `core update-index` 명령어는 `config set` 으로 알려준 그 새로운 주소를 포함한 모든 주소에 접속해서, 설치 가능한 패키지 목록을 가져옴. |
| 52 | + |
| 53 | +- `core install ...` 명령어는 `update-index` 가 가져온 그 목록을 보고, 필요한 파일을 설치함. |
| 54 | + |
| 55 | +## Wifi 관련 라이브러리 설치 |
| 56 | +ESP8266WiFi.h와 같은 WiFi 관련 기능은 별도의 라이브러리를 `lib install`로 설치하는 것이 아님. |
| 57 | +이 기능들은 `arduino-cli core install esp8266:esp8266` 명령어로 설치되는 "ESP8266 보드 지원 패키지" 안에 이미 포함되어 있음. |
| 58 | + |
| 59 | +## 아두이노 프로젝트 생성 |
| 60 | +```shell |
| 61 | +arduino-cli sketch new PROJECT_NAME |
| 62 | +``` |
| 63 | + |
| 64 | +## 아두이노 프로그래밍 |
| 65 | +`PROJECT_NAME.ino` 이렇게 아두이노 메인 파일 이름은 프로젝트 이름과 동일해야 함이 관례임. |
| 66 | + |
| 67 | +하나의 프로젝트(폴더) 안에는 `setup()`과 `loop()` 함수가 단 한 번만 존재해야 함. |
| 68 | +`setup()`과 `loop()`는 프로그램의 시작점임으로, 메인 파일에 위치하는 것이 관례임. |
| 69 | + |
| 70 | +arduino-cli는 프로젝트 내부의 모든 파일들을 독립적으로 인식하는 것이 아니라, 컴파일 직전에 하나의 거대한 파일로 그냥 이어 붙여버림. |
| 71 | +컴포넌트 같이 만드러면 `.h` 해더파일을 만들어야함. |
| 72 | + |
| 73 | +아두이노에서 활용하는 언어는 C++의 변형된 프로그래밍 언어를 사용함으로, C++ 프로그래밍과 완전하게 같음. |
| 74 | + |
| 75 | +## 아두이노 관련 VSC 익스텐션 설치 |
| 76 | +```markdown |
| 77 | +Arduino Community Edition |
| 78 | +C/C++ |
| 79 | +C/C++ Extension Pack |
| 80 | +``` |
| 81 | +VSC 익스텐션 3개를 설치해야 함. |
| 82 | + |
| 83 | +## .vscode 디렉토리 생성 |
| 84 | +`.vscode` 디렉토리를 생성해야 함. |
| 85 | +그러나 개발자가 직접 생성 안해도, Arduino 확장 프로그램이 직접 `.vscode` 폴더를 생성하고 `arduino.json` 같은 파일을 거기에 위치시킴. |
| 86 | + |
| 87 | +## VSC에서 아두이노 설정하기 |
| 88 | +```shell |
| 89 | +Arduino: Change Board Type |
| 90 | +``` |
| 91 | +Command Palette에서 `Arduino: Change Board Type` 를 입력한 후, `LOLIN(WeMos) D1 R2 & mini` 선택하기. |
| 92 | + |
| 93 | +이 명령어를 실행하면, `.vscode/arduino.json` 파일이 생성-수정됨. |
| 94 | +굳이 arduino.json 파일을 따로 만들지 않아도, .vscode 디렉토리에 자동으로 저장됨. |
| 95 | + |
| 96 | +`arduino.json` 파일은 |
| 97 | +1. "Arduino" 확장 프로그램의 명령어 생성기 역할 |
| 98 | + - Arduino: Change Board Type에서 모델을 선택하면, 그 정보("board": "esp8266:esp8266:d1_mini")가 arduino.json에 저장됨. |
| 99 | + - 이 정보가 VSC의 UI 버튼(Upload(→) 버튼 등)을 누를 때 명령어 인수로서 활용됨. |
| 100 | +2. C/C++ 확장 프로그램의 코드 자동완성(IntelliSense)을 위한 정보 제공 역할 |
| 101 | +을 수행함. |
| 102 | + |
| 103 | +`arduino.json` 파일 내부의 속성은 |
| 104 | + |
| 105 | +- "sketch" |
| 106 | + - 어떤 .ino 파일이 메인 파일인지 알려줌. |
| 107 | + - 사용자가 직접 수정해야 할 수 있음. (예: 파일 이름을 바꿨을 때) |
| 108 | +- "board |
| 109 | + - 어떤 보드를 타겟으로 컴파일할지 알려줌. (--fqbn 값) |
| 110 | + - Arduino: Change Board Type 메뉴로 설정됨. |
| 111 | +- "output" |
| 112 | + - 컴파일 결과물을 어디에 저장할지 알려줌. |
| 113 | + - Arduino: Initialize 실행 시 기본적으로 추가되거나, 사용자가 직접 추가할 수 있음. |
| 114 | +- "port" |
| 115 | + - 어느 USB 포트로 업로드할지 알려줌. |
| 116 | + - Arduino: Select Serial Port 메뉴로 설정됨. |
| 117 | + |
| 118 | +이것임. |
| 119 | + |
| 120 | +`arduino.json` 파일은 개발자가 직접 관리할 수 있는 파일임. |
| 121 | + |
| 122 | +## 참고: ESP8266은 같은데 왜 이렇게 Board Type은 선택하는 것이 많은가? |
| 123 | +각각 보드가 ESP8266은 이라는 핵심 칩(두뇌)은 동일하지만, |
| 124 | +그 두뇌를 둘러싼 '몸체'가 다르기 때문에 VS Code에서 그 많은 모델을 선택해야 하는 것임. |
| 125 | + |
| 126 | +`Arduino: Change Board Type` 에서 특정 모델을 선택하는 것은, |
| 127 | +컴파일러에게 바로 이 몸체의 미세한 차이점을 알려주는 매우 중요한 과정임. |
| 128 | + |
| 129 | +## VSC에서 아두이노를 위한 C/C++ IntelliSense 설정하기 |
| 130 | +```shell |
| 131 | +Arduino: Rebuild IntelliSense Configuration |
| 132 | +``` |
| 133 | +`arduino-cli lib install "MQ135"` 이렇게 Arduino 관련 새로운 라이브러리 등을 설치하면, |
| 134 | +해당 라이브러리를 `#include` 를 사용해서 불러오면 오류가 발생할 수 있음. |
| 135 | +외부 라이브러리를 설치한 후, VS Code가 그 라이브러리의 위치를 인식하도록 강제로 해당 명령어를 활용하여 새로고침하기. |
| 136 | + |
| 137 | +이 명령어를 실행하면, `c_cpp_properties.json` 파일이 생성-수정된다. |
| 138 | +`c_cpp_properties.json` 파일은 C/C++ 확장 프로그램의 코드 분석기(IntelliSense)만을 위한 것임. |
| 139 | +사용자가 절대로 직접 수정해서는 안 됨. |
| 140 | + |
| 141 | +## 컴파일 |
| 142 | +```shell |
| 143 | +arduino-cli compile --fqbn esp8266:esp8266:d1_mini --output-dir ./build . |
| 144 | +``` |
| 145 | +현재 폴더의 모든 .ino 파일을 합쳐서 컴파일함. 결과물은 build 디렉토리에 저장됨. |
| 146 | +`build` 디렉토리는 절대 Git/GitHub에 포함시키면 안됨. |
| 147 | + |
| 148 | +## 업로드 |
| 149 | +```shell |
| 150 | +arduino-cli upload -p /dev/cu.usbserial-A5069RR4 --fqbn esp8266:esp8266:d1_mini . |
| 151 | +``` |
| 152 | +build 디렉토리를 바탕으로 업로드를 수행함. |
| 153 | +업로드란 아두이노에게 만든 프로그램을 주입하는 것임. |
| 154 | + |
| 155 | +## 아두이노 보드 검색 |
| 156 | +```shell |
| 157 | +arduino-cli core list |
| 158 | +``` |
| 159 | +해당 명령어로 현재 컴퓨터에 연결된 아두이노 보드 검색하기. |
| 160 | +만약 업로드할 때 오류가 난다면, 보드가 정상적으로 연결되지 않았다는 것을 의미함으로, 해당 명령어로 연결된 보드를 검색해보기. |
| 161 | + |
| 162 | +## daemon |
| 163 | +```shell |
| 164 | +arduino-cli daemon |
| 165 | +``` |
| 166 | +이 명령어를 실행해 두면, arduino-cli를 백그라운드에 상주시켜 컴파일 속도를 비약적으로 향상시킴. |
| 167 | + |
| 168 | +## 출력 확인 |
| 169 | +```shell |
| 170 | +arduino-cli monitor -p /dev/cu.usbserial-A5069RR4 -c baudrate=115200" |
| 171 | +``` |
| 172 | +아두이노 보드가 Serial.print()로 보내는 메시지를 컴퓨터 화면에서 확인할 수 있게하는 명령어. |
| 173 | +`-c baudrate` 값은 아두이노 코드의 `Serial.begin()` 에 있는 숫자와 반드시 일치해야 함. |
0 commit comments