본문 바로가기

Development

macOS에서 esp-idf 설치하고 Clion 으로 hello world 찍어보기

728x90

나는 Typescript를 webstorm을 통해 개발하고 있어서 나에게 IDE는 jetbrains 사의 프로그램이 가장 편해졌다. 그러다보니 아두이노에서 Clion은 비주류지만 익숙한 툴이 좋을 것 같아서 선택했는데 호환성이 생각보다 많이 나빴다;;

내가  사용한 프로그램 버전

Homebrew 3.5.4

Python 3.10.5

cmake 3.23.2

ninja 1.11.0

dfu-util 0.11

fish 3.5.0

Homebrew 설치

shell에서 아래의 커맨드를 치면 알아서 설치 됨! 

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

설치는 알아서 되지만 home은 지정해줘야 brew 커맨드를 사용할 수 있으니 profile에 alias를 넣어줘야 한다. 내 경우엔 fish를 사용했었어서 ~/.config/fish/config.fish 에 넣어줬지만 보통 zsh를 사용할테니 .zprofile 에 넣으면 될 듯! (설정하고 source .zprofile 하는 걸 잊지 말자.)

export PATH=/opt/homebrew/bin:$PATH

python 설치

brew install python3

참 쉽쥬? 하긴 이르다.. 내 경우엔 homebrew를 통해 python을 설치했더니 실행파일이 /opt/homebrew/opt/python@3.10/bin 여기에 설치돼서 가끔 /usr/local/bin/python 을 찾는 툴에게서 에러가 발생하는 게 있어서 그냥 복사해서 usr에 넣어줬다.

cp /opt/homebrew/opt/python@3.10/bin/python3 /usr/local/bin/

esp32-idf 설치

이제 본격적으로 esp32 개발툴을 설치한다. https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/linux-macos-setup.html 이 사이트를 참고해서 실행한 경험으로 작성한다.

cmake, ninja, dfu-util 설치

homebrew를 통해 간단하게 설치~!

brew install cmake ninja dfu-util

esp32-idf git 다운로드 및 설치

workspace(esp) 폴더를 만들고 git clone을 실행한다.

mkdir -p ~/esp
cd ~/esp
git clone --recursive https://github.com/espressif/esp-idf.git

IDF_PATH 설정

install.sh를 실행하기 이전에 home을 설정해놔야 에러가 안 난다. 설정하고 source .zprofile 하는 걸 잊지 말자.

# idf home
export IDF_PATH=~/workspace/esp32/esp-idf
export PATH="$PATH:$IDF_PATH/tools"

install.sh 실행

클론이 완료되면 이제 install.sh를 실행한다. 내 경우는 fish를 사용했으니 install.fish로 컴파일했다. 인자로 all을 준 것은 타겟 보드에 맞춰서 넣어야 하는데 몇 개 없기도 하고 종류가 다를 수도 있으니 그냥 all 을 넣어서 전부 컴파일 하면 된다.

cd ~/esp/esp-idf
./install.sh esp32 all

아까 profile에 넣은 것처럼 alias get_idf 설정을 해준다.

export IDF_PATH=~/workspace/esp32/esp-idf

export.sh 실행

그리고 이제 export.sh를 실행해주면 되는데 어라? 난 executable 상태가 아니었다. 그래서 chmod u+x ./export.sh 명령으로 실행 가능하게 만들고 실행했더니..

이런 에러가 났다. (This script should be sourced, not executed) 아무리 구글링을 해봐도 레퍼런스가 많지는 않아서인가 이유를 찾을 수가 없었다. 어짜피 export.sh의 역할은 각종 파일들을 shell에 export 해주는 역할인 것 같아서 에러 나는 부분을 주석처리 했다.

이 로직이 에러가 나는 부분

그랬더니 잘 export 되었다!

 

hello world 프로젝트 생성

hello world 기본 프로젝트 파일은 ./esp/esp-idf/examples/get-started/hello_world 에 있다. 사용할 workspace로 복사해서 넣어두자.

cd ~/esp
cp -r $IDF_PATH/examples/get-started/hello_world .

이제 Clion 시작!

그냥 open 해서 프로젝트 폴더를 선택한다.

 환경설정

ESPPORT는 안 해줘도 된다. usb 칩셋에 따라서 pc에 따라서 이름은 달라질 수 있다. 보통 UART 어쩌고 하는 것 같던데 난 그냥 usbserial이라고 나왔다. (참고로 usb 칩셋은 cp2102), IDF_PATH는 필수

build 및 flash

esp32를 연결하고 Clion에서 실행 선택 목록에서 flash를 선택하고 build를 한다. (단축키 ⌘+F9) 그럼 build 가 끝나고 바로 flash를 실행하는데 연결이 안 되는 문제 발생ㅜㅜ

알고 봤더니 esp32 종류마다 download mode로 진입하는 게 다른데 내 껀 기본적으로 진입되는 형태가 아니어서 boot키 누른 상태에서 en키 누르고 떼고 그 다음에 boot키를 떼면 download mode로 수동 진입이 됐다. boot pin에 그라운드를 연결하면 된다는 것 같은데 아직 디바이스마트에서 주문한 점퍼선이 안 온 관계로 당분간은 flash 할 때마다 매번 버튼을 눌러줘야한다. (https://docs.espressif.com/projects/esptool/en/latest/esp32/troubleshooting.html#wrong-boot-mode-detected-0xxx-the-chip-needs-to-be-in-download-mode 여기 참고)

출처: https://www.icbanq.com/P009351349
download mode로 진입했을 때 모습

이제 다시 연결해보자. 참고로 download mode로 진입은 Connecting....의 점이 38개가 되기 전에 해야한다. 그리고 성공하면 flash를 열심히 진행할 것이다. 아 그리고 Serial Monitor를 통해서 esp32와 이미 통신 중이라면 flash가 연결이 안 되는 문제가 발생할 것이다.(busy) flash를 할 때는 반드시 serial을 끄고 실행해야 한다. 아두이노 ide는 따로 안 꺼도 그냥 되던데 자체적으로 flash할 때 serial 접속을 끊어놨다가 flash가 끝나면 다시 연결하는 형태로 구현해놓은 것 같다.(코딩은 불편해도 라이브러리 사용이나 아두이노에 관련된 기능은 전용 ide가 더 좋긴하다.)

정상적으로 flash가 되어 esp32에 컴파일된 소스를 옮겨놓은 상태

Serial Monitor 툴창에서 실행확인

serial 설정은 아래와 같이 하면 된다.

serial 설정은 이렇게

드디어 Hello world를 보았다!!

 

참고했던 자료들

https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/linux-macos-setup.html

 

Standard Toolchain Setup for Linux and macOS - ESP32 - — ESP-IDF Programming Guide latest documentation

Flash the binaries that you just built (bootloader.bin, partition-table.bin and hello_world.bin) onto your ESP32 board by running: Replace PORT with your ESP32 board’s serial port name. You can also change the flasher baud rate by replacing BAUD with the

docs.espressif.com

https://www.youtube.com/watch?v=M6fa7tzZdLw&t=68s 

https://docs.espressif.com/projects/esptool/en/latest/esp32/troubleshooting.html#wrong-boot-mode-detected-0xxx-the-chip-needs-to-be-in-download-mode

 

Troubleshooting - ESP32 - — esptool.py latest documentation

If you’re using a pre-made development board or module then the built-in power regulator & capacitors are usually good enough, provided the input power supply is adequate. Note This is not true for some very simple pin breakout modules - similar to this.

docs.espressif.com

 

 

 

ps. 열심히 idf를 설치했는데 third-party libs를 추가하는 방법을 못찾아서 PlatformIO로 갈아탄 건 안 비밀;;;; 누가 platformIO를 그냥 쓰는 게 정신건강에 좋다고 했음;;;

반응형

'Development' 카테고리의 다른 글

SECS Gem Message Formats  (0) 2022.06.16
ssl 버전 테스트  (0) 2021.11.26