임베디드 용어설명

ESP-EYE (ESP-IDF 설치 및 빌드)

젊은우산 2020. 7. 2. 20:06
반응형

깃허브 ESP-IDF 에서 (https://github.com/espressif/esp-idf) ESP-IDF를 다운 받는다.

  1. ESP32 - stable version 클릭

     

     

  2. Step1. Install prerequisites 클릭

     

     

  3. Windows 클릭

     

     

  4. https://dl.espressif.com/dl/esp-idf-tools-setup-2.3.exe 클릭 후 esp-idf-tools-setup 다운로드

 

 

  1. esp-idf-tools-setup를 실행하여 설치하고, 시작메뉴에서 ESP-IDF 명령 프롬프트를 실행합니다.

 

 

  1. 사용자의 원하는 디렉토리에 esp 폴더를 만든후 esp-idf.git을 깃허브로부터 당겨옵니다.

 

 

mkdir %userprofile%\\esp cd %userprofile%\\esp git clone --recursive <https://github.com/espressif/esp-idf.git>

 

 

  1. esp-idf 폴더로 이동하여 업데이트 해줍니다.

 

cd esp-idf git submodule update --init

  1. 파이썬3와 파이씨리얼을 설치 해주고, esp-idf 툴체인을 설치합니다. (이미설치되어있으면 설치안하셔도됩니다.)

python -m pip install --user -r $IDF_PATH/requirements.txt pip install --user pyserial install.bat export.bat

Quick Start

idf.py menuconfig Build And Flash Open Browser Get Image Use The Options

  1. 이제 모든준비는 끝났습니다. 카메라프로젝트에서 빌드하는 일만 남았습니다. 카메라 프로젝트가있는 디렉토리로 이동합니다.

위의 파란색 드래그된 주소를 복사하고 붙여넣으면됩니다.

 

cd C:\\Users\\roal7\\Desktop\\esp\\camera idf.py menuconfig idf.py build idf.py flash

menuconfig 에서 설정값을 변경해줄 수 있습니다. 이곳에서 설정된 값은 sdkconfig 파일로 저장되며 프로젝트가 빌드 될 때, 함께 빌드됩니다.

처음 build 시에 아래와 같은 에러가 나는 경우가 있습니다. 이 때는 menuconfig에서 설정값을 변경해주어야합니다. 한 프로젝트당 한번만 설정해주면 됩니다.

 

idf.py menuconfig 명령어를 입력하면 아래와 같은 UI가 나타납니다.

Component config → Driver configurations → RTCIO configuration → "[체크]" rtc_gpio_desc 해주면 오류가 나타나지 않게 됩니다.

 

 

 

 

  1. idf.py flash 명령어를 통해 부트로더업로드할 수 있습니다.

변경사항이 없으면, 빌드는 한번만 진행됩니다. 코드에 수정사항이 있거나 menuconfig의 변경점이 있다면, 새로 빌드됩니다.

 

 

  1. idf.py monitor 를 시리얼 모니터로 볼 수 있습니다.

시리얼 모니터에서 나오려면 ctrl + ' ] '

 

시리얼 모니터에 나온 아이피로 브라우저에서 192.168.0.16에 들어가면 아래와 같이 html로 만든 카메라 서버가 나옵니다.

 

  1. 빌드가 꼬였을 때

idf.py clean

  1. 특정 포트로 flash 할 때

idf.py -p COM3 flash

  1. 컨셉
  • "Project"는 하나의 "App"만을 빌드한다. 마찬가지로 하나의 파티션테이블, 파일시스템, 부트로더를 갖는다.
  • "Project configuration"은 하나의 sdkconfig를 root 디렉토리에 가지고 있으며 idf.py menuconfig로 커스터마이즈 할 수 있다. 하나의 프로젝트엔 하나만 가지고 있다.
  • "App"이란 ESP-IDF에 의해 빌드된 것이다. 하나의 프로젝트는 프로젝트앱(주 실행파일, 사용자의 펌웨어)과 부트로더앱(프로젝트앱을 실행하기위한 초기부트로더프로그램)으로 빌드된다.
  • "Component"는 라이브러리 모듈을 앱에 링크한다. ESP-IDF에서 제공될 수도 있고 다른곳에서 가져올 수도 있다.
  • "Target"은 ESP-IDF를 지원하는 ESP32 나 ESP32S2이다.
  • "ESP-IDF"는 project가 아니다. 단독으로 IDF-PATH 환경변수를 통해 다른 project에 연결된다.
  • toolchain 컴파일러는 project의 일부가 아니다. toolchain은 PATH에 installed 되어야 한다.
  1. 빌드시스템사용법

idf.py 이 명령어 도구는 프로젝트 빌드를 쉽게 관리할 수 있는 프론트엔드를 제공한다. 다음의 도구를 관리한다.

  • CMake, 빌드할 프로젝트를 구성
  • 명령줄 빌드 도구 (Ninja build 또는 GNU Make와 같은 역할을 한다)
  • esptool.py 로 target에 flash한다.

idf.py 는 "project"의 디렉토리에서 실행되어야 하며 CMakeLists.txt가 포함되어야 한다.

idf.py --help // 명령어의 도움말 확인 idf.py set-target <target> // target을 변경한다 ESP32, ESP32S2 idf.py menuconfig // 프로젝트의 구성을 변경하기위한 툴을 실행한다 idf.py build // 현재 프로젝트의 디렉토리에서 빌드를 시도한다. 빌드에 변경사항이 없거나 소스파일이 없으면 // 아무일도 일어나지 않는다. idf.py clean // 프로젝트의 빌드를 삭제한다. CMake의 구성 output이나 다른 파일을 삭제하지는 않는다. idf.py fullclean // 빌드 디렉토리내용을 삭제한다. CMake의 구성 output도 포함한다. idf.py flash // target에 프로젝트를 내보낸다. idf.py monitor // 시리얼 모니터를 연다. default baudrate는 menuconfig에서 수정가능하며 115200으로 초기설정되어있다.

  1. 예제프로젝트의 구성

- myProject/ - CMakeLists.txt - sdkconfig - components/ - component1/ - CMakeLists.txt - Kconfig - src1.c - component2/ - CMakeLists.txt - Kconfig - src1.c - include/ - component2.h - main/ - CMakeLists.txt - src1.c - src2.c - build/

[CMakeList.txt] - cmake의 최소요구버전을 명시하고 해당하는 /tools/cmake/project.cmake 가 포함되어야 한다. 그리고 최종 프로젝트의 이름이 명시된다. (component 디렉토리를 포함할 때는 set과 extra_component_dirs로 components 디렉토리를 추가한다)

[sdkconfig] - 프로젝트 구성파일이다. idf.py menuconfig에서 실행되고 저장된다. 모든 component에서 저장된다. sdkconfig 파일은 소스 컨트롤 시스템에 추가될수도 있고 추가되지 않을 수도 있다.

[components] - 디렉토리는 선택적이다. 추가 하면 다양한 서드파티 기능을 사용할 수 있다. EXTRA_COMPONENT_DIRS 는 CMakeList.txt에 추가하여 component의 위치를 알려준다. 만약 많은 소스파일을 프로젝트에 포함해야 한다면 모든파일을 main에 저장하는 것보단 component의 그룹끼리 묶어놓는 것을 추천한다.

[main] - 이 디렉토리는 프로젝트자체에 포함되는 소스코드의 component 이다. "main"이란 이름은 기본이름이다. CMake 변수 COMPONENT_DIRS에 이 component가 포함된다. 수정가능하다.

[build] - 처음엔 없다가 프로젝트를 idf.py build 하면 생긴다. 빌드프로세스의 부산물이다. 이 디렉토리는 최종 소스제어에 추가되지 않고, 소스코드와함께 배포되지 않는다.

Component의 각각의 디렉토리는 CMakeList.txt에 들어있어야 한다. 이 파일은 변수 정의가 포함 있다. 구성요소의 빌드프로세스와 전체프로젝트의 통합해준다.

모든 component 는 kconfig를 포함해야 한다. component 구성 옵션을 결정하는 것이고 menuconfig에서 설정할 수 있다. 어떤 components은 Kconfig.projbuild과 project_include.cmake파일들을 포함 할 수 있다. 이 파일들은 CMakeLists보다 먼저 처리되어야하는 빌드요구사항이 있을 때 사용한다.

  1. 프로젝트

CMakeLists.txt 에는 다음 세 줄이 필수적으로 포함되어야 한다.

# The following lines of boilerplate have to be in your project's # CMakeLists in this exact order for cmake to work correctly cmake_minimum_required(VERSION 3.5) include($ENV{IDF_PATH}/tools/cmake/project.cmake) // cmake를 사용하기위한 ESP-IDF에서의 cmake. project(app-template) // 프로젝트이름

main 디렉토리안의 CMakeLists.txt 에는 다음이 포함된다. (아래는 템플릿양식)

# Edit following two lines to set component requirements (see docs) set(COMPONENT_REQUIRES ) set(COMPONENT_PRIV_REQUIRES ) set(COMPONENT_SRCS "main.c") set(COMPONENT_ADD_INCLUDEDIRS "include") register_component()

 

  1. 기본적인 GPIO

//ESP-IDF gpio_set_direction(pin, GPIO_MODE_OUTPUT); gpio_set_direction(pin, GPIO_MODE_INPUT); gpio_get_level( pin ); gpio_set_level(pin, 1); // LOW는 0 , HIGH는 1 //Arduino pinMode(pin,OUTPUT); pinMode(pin, INPUT); digitalRead ( pin ) ; digitalWrite (pin, 1);

ADC1

static esp_adc_cal_characteristics_t *adc_chars; static const adc_channel_t channel = ADC_CHANNEL_6; //GPIO34 if ADC1, GPIO14 if ADC2 static const adc_bits_width_t width = ADC_WIDTH_BIT_12; static const adc_atten_t atten = ADC_ATTEN_DB_0; static const adc_unit_t unit = ADC_UNIT_1; void app_main(void) { //Configure ADC if (unit == ADC_UNIT_1) { adc1_config_width(width); adc1_config_channel_atten(channel, atten); } else { adc2_config_channel_atten((adc2_channel_t)channel, atten); } while (1) { uint32_t adc_reading = 0; //Multisampling for (int i = 0; i < NO_OF_SAMPLES; i++) { if (unit == ADC_UNIT_1) { adc_reading += adc1_get_raw((adc1_channel_t)channel); } else { int raw; adc2_get_raw((adc2_channel_t)channel, width, &raw); adc_reading += raw; } } adc_reading /= NO_OF_SAMPLES; uint32_t voltage = esp_adc_cal_raw_to_voltage(adc_reading, adc_chars); printf("Raw: %d\\tVoltage: %dmV\\n", adc_reading, voltage); vTaskDelay(pdMS_TO_TICKS(1000)); } }

  1. SCCB (Serial Camera Control Bus)
  • OV2640
  • SCCB
  1. 에러날 때

 

"'idf.py'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다."

이 알림은 esp-idf 명령프롬프트가 재실행될 때, esp-idf 디렉토리에서

cd C:\\Users\\roal7\\Desktop\\esp\\esp-idf install.bat export.bat

install.bat과 export.bat을 차례로 실행해주어야 합니다.

install.bat 성공시

 

export.bat 성공시 idf.py build를 사용할 수 있다고 나옵니다.

 

이 과정은 esp-idf 명령프롬프트가 종료되었다가 다시실행될 때마다 해주어야합니다.

반응형