깃허브 ESP-IDF 에서 (https://github.com/espressif/esp-idf) ESP-IDF를 다운 받는다.
-
ESP32 - stable version 클릭
-
Step1. Install prerequisites 클릭
-
Windows 클릭
-
https://dl.espressif.com/dl/esp-idf-tools-setup-2.3.exe 클릭 후 esp-idf-tools-setup 다운로드
- esp-idf-tools-setup를 실행하여 설치하고, 시작메뉴에서 ESP-IDF 명령 프롬프트를 실행합니다.
- 사용자의 원하는 디렉토리에 esp 폴더를 만든후 esp-idf.git을 깃허브로부터 당겨옵니다.
mkdir %userprofile%\\esp cd %userprofile%\\esp git clone --recursive <https://github.com/espressif/esp-idf.git>
- esp-idf 폴더로 이동하여 업데이트 해줍니다.
cd esp-idf git submodule update --init
- 파이썬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
- 이제 모든준비는 끝났습니다. 카메라프로젝트에서 빌드하는 일만 남았습니다. 카메라 프로젝트가있는 디렉토리로 이동합니다.
위의 파란색 드래그된 주소를 복사하고 붙여넣으면됩니다.
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 해주면 오류가 나타나지 않게 됩니다.
- idf.py flash 명령어를 통해 부트로더업로드할 수 있습니다.
변경사항이 없으면, 빌드는 한번만 진행됩니다. 코드에 수정사항이 있거나 menuconfig의 변경점이 있다면, 새로 빌드됩니다.
- idf.py monitor 를 시리얼 모니터로 볼 수 있습니다.
시리얼 모니터에서 나오려면 ctrl + ' ] '
시리얼 모니터에 나온 아이피로 브라우저에서 192.168.0.16에 들어가면 아래와 같이 html로 만든 카메라 서버가 나옵니다.
- 빌드가 꼬였을 때
idf.py clean
- 특정 포트로 flash 할 때
idf.py -p COM3 flash
- 컨셉
- "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 되어야 한다.
- 빌드시스템사용법
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으로 초기설정되어있다.
- 예제프로젝트의 구성
- 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보다 먼저 처리되어야하는 빌드요구사항이 있을 때 사용한다.
- 프로젝트
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()
- 기본적인 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)); } }
- SCCB (Serial Camera Control Bus)
- OV2640
- SCCB
- 에러날 때
"'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 명령프롬프트가 종료되었다가 다시실행될 때마다 해주어야합니다.
'임베디드 용어설명' 카테고리의 다른 글
openwrt 사용법 (HLK-7688AN) (0) | 2021.02.04 |
---|---|
WIZ107SR TTL to Ethernet 모듈 HW_Trig_pin CMD모드 진입 IP설정 방법 (4) | 2020.12.17 |
Date Code 란? 데이트 코드란? (0) | 2020.03.01 |
가속도센서의 원리 각도 검출방법(중력가속도센서, 자이로센서) (0) | 2020.01.06 |
Serial in Parallel Out bu2090f소자 Arduino shiftout() 사용 (0) | 2019.04.19 |