티스토리 뷰

반응형

안녕하세요. 09LABS 입니다.

아두이노와 같은 오픈소스 하드웨어에는 여러 종류가 있고 블루투스를 사용하려면 블루투스를 지원하는 MCU 또는 블루투스 모듈을 사용해야 합니다. 저는 ESP32를 주로 사용하여 개발을 했었는데 아두이노 Framework를 사용하여 개발하다보니 개발에 제한적인 부분이 있었습니다. 무엇보다도 Espressif에서 제공하는 모든 API를 활용할 수 없고 어떻게 동작하는지 알 수 없다보니 직접 스터디를 해봐야겠다는 생각이 들었습니다.

ESP-IDF Programming Guide : https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/index.html

 

Get Started - ESP32 - — ESP-IDF Programming Guide latest documentation

© Copyright 2016 - 2023, Espressif Systems (Shanghai) Co., Ltd.

docs.espressif.com

위 링크는 ESP-IDF 프로그래밍 가이드로 ESP32 계열을 개발할 때 필요한 모든 내용이 담겨있습니다.
우선 개발환경 구축부터 시작해보겠습니다.

준비물
- ESP32 보드 (ESP32-DevKit, ESP-WROVER-KIT, ESP32-PICO-KIT 등)
- USB 케이블
- 컴퓨터 (OS마다 상이함)
* Eclipse나 VSCode를 사용하는 경우 Extension을 설치하면 더욱 쉽게 개발이 가능합니다. *

Requirement 설치
저는 주로 Ubuntu, MacOS를 사용하고 있으며 이를 기준으로 개발환경 구축 방법에 대해 설명하고자 합니다.
* MacOS 사용 시 HomeBrew를 미리 설치하셔야 합니다.

<Ubuntu>

sudo apt-get install git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0

<MacOS>

brew install cmake ninja dfu-util python3

ESP-IDF 다운로드
ESP-IDF는 Espressif Github에서 다운로드 할 수 있습니다.

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


Tool 설치
ESP-IDF에는 ESP32 개발에 필요한 Python 패키지, 디버거, 컴파일러 등을 설치할 수 있습니다.

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

만약 ESP32가 아닌 ESP32-C3나 ESP32-S3와 같은 다른 칩을 사용한다면 아래와 같이 입력합니다.

cd ~/esp/esp-idf
./install.sh esp32,esp32s3

 

모든 칩에 대해 지원하도록 설치하고 싶다면 아래와 같이 입력합니다.

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

환경변수 설정
Tool 설치까지 완료했으면 터미널에서 아래와 같이 입력해줍니다.

. $HOME/esp/esp-idf/export.sh

위와 같이 입력하면 환경변수 설정이 완료됩니다.
다만, 매번 부팅해서 입력해주기 귀찮을 때가 있습니다. 이럴 때 alias 명령어를 사용한다면 더욱 손쉽게 환경변수 설정이 가능합니다.

alias get_idf='. $HOME/esp/esp-idf/export.sh'

위 명령어를 사용하는 Shell의 profile에 적용해주면 됩니다.
파일명 :  ~/.profile, ~/.bashrc, ~/.zprofile, ~/.zshrc
위 네개 중 자신이 사용하는 profile 하나에만 적용해주면 됩니다.
적용을 완료하면 터미널 창에서 get_idf 명령어로 환경변수 설정이 가능합니다.

예제 프로젝트 빌드
환경변수 설정까지 완료되었으면 예제 프로젝트를 빌드해볼 차례입니다.
먼저 예제 파일을 복사하여 빌드하고자 하는 디렉토리에 복사해줍니다.

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

프로젝트 파일을 복사했으면 타겟 보드를 설정하고 menuconfig를 사용하여 프로젝트 설정을 할 차례입니다.
타겟 보드 설정 시 사용하는 Core를 맞게 설정하셔야 합니다. ESP32 Devkit C 또는 ESP32-WROVER와 같이
일반적인 개발보드를 사용하고 있을 경우 esp32로, ESP32-C2, ESP32-S2, ESP32-C3, ESP32-S3와 같이
일반적인 ESP32 개발보드가 아닌 경우 사용하는 Core 이름을 적어주시면 됩니다. (Ex : esp32s3)

cd ~/esp/hello_world
idf.py set-target esp32
idf.py menuconfig

menuconfig까지 진입을 완료하면 위와 같은 화면을 볼 수 있습니다.
지금은 추가적인 설정이 필요하지 않으니 esc를 눌러서 종료하면 됩니다.

소스코드를 빌드하기 위해서 아래와 같이 입력하면 됩니다.

$ idf.py build
Running cmake in directory /path/to/hello_world/build
Executing "cmake -G Ninja --warn-uninitialized /path/to/hello_world"...
Warn about uninitialized values.
-- Found Git: /usr/bin/git (found version "2.17.0")
-- Building empty aws_iot component due to configuration
-- Component names: ...
-- Component paths: ...

... (more lines of build system output)

[527/527] Generating hello_world.bin
esptool.py v2.3.1

Project build complete. To flash, run this command:
../../../components/esptool_py/esptool/esptool.py -p (PORT) -b 921600 write_flash --flash_mode dio --flash_size detect --flash_freq 40m 0x10000 build/hello_world.bin  build 0x1000 build/bootloader/bootloader.bin 0x8000 build/partition_table/partition-table.bin
or run 'idf.py -p PORT flash'

빌드가 정상적으로 완료되면 단말에 flash를 하라는 내용을 확인할 수 있습니다.
idf.py를 사용하면 두 가지 방법으로 flash가 가능합니다.

1. idf.py flash
2. idf.py -p <PORT> flash

ESP32 개발보드를 사용할 때 여러 장비를 한꺼번에 연결하여 사용할 수도 있으니 Serial Port 이름으로
구분지어 업로드를 할 수 있습니다. 만약 한 대만 연결하여 사용할 경우 첫 번째 명령어로 flash가 가능합니다.

$ idf.py flash
...
esptool.py --chip esp32 -p /dev/ttyUSB0 -b 460800 --before=default_reset --after=hard_reset write_flash --flash_mode dio --flash_freq 40m --flash_size 2MB 0x8000 partition_table/partition-table.bin 0x1000 bootloader/bootloader.bin 0x10000 hello_world.bin
esptool.py v3.0-dev
Serial port /dev/ttyUSB0
Connecting........_
Chip is ESP32D0WDQ6 (revision 0)
Features: WiFi, BT, Dual Core, Coding Scheme None
Crystal is 40MHz
MAC: 24:0a:c4:05:b9:14
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Compressed 3072 bytes to 103...
Writing at 0x00008000... (100 %)
Wrote 3072 bytes (103 compressed) at 0x00008000 in 0.0 seconds (effective 5962.8 kbit/s)...
Hash of data verified.
Compressed 26096 bytes to 15408...
Writing at 0x00001000... (100 %)
Wrote 26096 bytes (15408 compressed) at 0x00001000 in 0.4 seconds (effective 546.7 kbit/s)...
Hash of data verified.
Compressed 147104 bytes to 77364...
Writing at 0x00010000... (20 %)
Writing at 0x00014000... (40 %)
Writing at 0x00018000... (60 %)
Writing at 0x0001c000... (80 %)
Writing at 0x00020000... (100 %)
Wrote 147104 bytes (77364 compressed) at 0x00010000 in 1.9 seconds (effective 615.5 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...
Done

flash가 완료되면 Done이라는 단어를 볼 수 있습니다. 이는 빌드 후 펌웨어 파일이 정상적으로 업로드 되었음을 의미합니다
업로드가 완료되었으면 Hello World 예제가 잘 돌아가는지 확인할 차례입니다.

ESP Monitor 실행
지금까지 idf.py 를 사용하여 프로젝트 설정, 프로젝트 빌드, 플래시까지 진행해봤습니다.
플래시가 정상적으로 완료되었으면 putty와 같은 시리얼 터미널에서 출력되는 정보를 확인할 수 있습니다.
idf.py에는 시리얼 터미널과 같은 역할을 하는 monitor 기능이 포함되어 있습니다.

1. idf.py monitor
2. idf.py -p <PORT> monitor

위와 같이 입력하면 monitor 기능을 실행할 수 있습니다.
펌웨어 파일이 정상적으로 업로드 되었으면 아래와 같은 화면을 볼 수 있습니다.

...
I (290) sleep: Configure to isolate all GPIO pins in sleep state
I (297) sleep: Enable automatic switching of GPIO sleep configuration
I (304) app_start: Starting scheduler on CPU0
I (309) app_start: Starting scheduler on CPU1
I (309) main_task: Started on CPU0
I (319) main_task: Calling app_main()
Hello world!
This is esp32s3 chip with 2 CPU core(s), WiFi/BLE, silicon revision v0.1, 2MB external flash
Minimum free heap size: 390184 bytes
Restarting in 10 seconds...
Restarting in 9 seconds...
Restarting in 8 seconds...

지금까지 ESP32에 예제 프로젝트를 빌드하여 업로드하고 시리얼 터미널로 출력하는 방법에 대해 알아봤습니다.
아두이노 IDE를 사용하면 편하게 빌드하고 업로드할 수 있지만 조금 더 심도있는 기능을 사용하기 위해선 ESP-IDF를
사용하는 것도 좋은 방법이라고 생각됩니다.
다음 강좌에선 기본 빌드 시스템을 구축하는 방법에 대해 알아보겠습니다.

반응형

'코딩하자 > ESP-IDF' 카테고리의 다른 글

[ESP-IDF] 3. Task API (feat. 멀티태스킹)  (0) 2024.02.19
[ESP-IDF] 2. 빌드 시스템 구축하기  (0) 2023.08.15
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함