ESP32-C3 무선 모험

ESP32-C3 무선 모험

IoT 종합 가이드

Espressif Systems 12년 2023월 XNUMX일

명세서

  • 제품: ESP32-C3 무선 모험
  • 제조사 : Espressif Systems
  • 날짜: 12년 2023월 XNUMX일

제품 사용 지침

준비

ESP32-C3 무선 어드벤처를 사용하기 전에 다음 사항을 확인하세요.
IoT의 개념과 아키텍처에 익숙합니다. 이것은 도움이 될 것입니다
장치가 더 큰 IoT 생태계에 어떻게 적합한지 이해합니다.
스마트 홈에서의 잠재적 응용 분야.

IoT 프로젝트 소개 및 실습

이 섹션에서는 일반적인 IoT 프로젝트에 대해 알아봅니다.
일반적인 IoT 기기의 기본 모듈, 기본 모듈을 포함
클라이언트 애플리케이션 및 일반적인 IoT 클라우드 플랫폼. 이것은
이해하고 창조할 수 있는 기반을 제공합니다.
자신의 IoT 프로젝트.

실습: 스마트 조명 프로젝트

이 실습 프로젝트에서는 스마트한 앱을 만드는 방법을 배우게 됩니다.
ESP32-C3 무선 어드벤처를 사용하여 조명을 켜세요. 프로젝트 구조,
기능, 하드웨어 준비 및 개발 프로세스는
자세히 설명했습니다.

프로젝트 구조

이 프로젝트는 다음을 포함한 여러 구성 요소로 구성됩니다.
ESP32-C3 무선 어드벤처, LED, 센서 및 클라우드
백엔드.

프로젝트 기능

스마트 조명 프로젝트를 사용하면 밝기를 제어하고
모바일 앱을 통해 원격으로 LED 색상을 확인하거나 web
인터페이스.

하드웨어 준비

프로젝트를 준비하려면 다음 사항을 수집해야 합니다.
ESP32-C3 무선과 같은 필수 하드웨어 구성요소
어드벤처 보드, LED, 저항기 및 전원 공급 장치입니다.

개발 프로세스

개발 프로세스에는 개발 설정이 포함됩니다.
환경, LED를 제어하는 ​​코드 작성,
클라우드 백엔드 및 스마트 기능 테스트
빛.

ESP RainMaker 소개

ESP RainMaker는 IoT 개발을 위한 강력한 프레임워크입니다.
장치. 이 섹션에서는 ESP RainMaker가 무엇인지 알아보고
프로젝트에서 어떻게 구현될 수 있는지 알아보세요.

ESP RainMaker란 무엇입니까?

ESP RainMaker는 다음과 같은 기능을 제공하는 클라우드 기반 플랫폼입니다.
IoT 장치를 구축하고 관리하기 위한 도구 및 서비스입니다.

ESP RainMaker의 구현

이 섹션에서는 다음과 관련된 다양한 구성 요소를 설명합니다.
청구 서비스를 포함한 ESP RainMaker 구현,
RainMaker 에이전트, 클라우드 백엔드 및 RainMaker 클라이언트.

연습: ESP RainMaker 개발의 핵심 사항

이 연습 섹션에서는 다음의 핵심 사항에 대해 알아봅니다.
ESP RainMaker로 개발할 때 고려하십시오. 여기에는 장치가 포함됩니다.
청구, 데이터 동기화 및 사용자 관리.

ESP 레인메이커의 특징

ESP RainMaker는 사용자 관리, 종료를 위한 다양한 기능을 제공합니다.
사용자 및 관리자. 이러한 기능을 통해 장치를 쉽게 사용할 수 있습니다.
설정, 원격 제어 및 모니터링.

개발 환경 설정

이 섹션에서는 다음을 제공합니다.view ESP-IDF(에스프레시프 IoT
개발 프레임워크)는 공식 개발 프레임워크입니다.
ESP32 기반 장치의 경우. 다양한 버전에 대해 설명합니다.
ESP-IDF 및 개발 환경 설정 방법

하드웨어 및 드라이버 개발

ESP32-C3 기반 스마트 조명 제품의 하드웨어 설계

이 섹션에서는 스마트 조명의 하드웨어 설계에 중점을 둡니다.
ESP32-C3 Wireless Adventure를 기반으로 한 제품입니다. 그것은 다음을 다룬다
스마트 조명 제품의 특징과 구성은 물론,
ESP32-C3 코어 시스템의 하드웨어 설계.

스마트 조명 제품의 특징 및 구성

이 하위 섹션에서는 다음을 만드는 기능과 구성 요소를 설명합니다.
스마트 조명 제품을 만나보세요. 다양한 기능에 대해 설명합니다.
스마트 조명을 만들기 위한 디자인 고려 사항.

ESP32-C3 코어 시스템의 하드웨어 설계

ESP32-C3 코어 시스템의 하드웨어 설계에는 전원이 포함됩니다.
공급 장치, 전원 켜기 시퀀스, 시스템 재설정, SPI 플래시, 클록 소스,
RF 및 안테나 고려 사항. 이 하위 섹션에서는 다음을 제공합니다.
이러한 측면에 대한 자세한 정보.

자주 묻는 질문

Q: ESP RainMaker란 무엇입니까?

A: ESP RainMaker는 도구를 제공하는 클라우드 기반 플랫폼입니다.
IoT 장치를 구축하고 관리하기 위한 서비스입니다. 단순화합니다
개발 프로세스를 지원하며 간편한 장치 설정, 원격 지원이 가능합니다.
제어, 모니터링이 가능합니다.

Q: 개발 환경을 어떻게 설정하나요?
ESP32-C3?

A: ESP32-C3용 개발 환경을 설정하려면 다음이 필요합니다.
ESP-IDF(Espressif IoT 개발 프레임워크)를 설치하고
제공된 지침에 따라 구성하십시오. ESP-IDF는
ESP32 기반 장치를 위한 공식 개발 프레임워크입니다.

Q: ESP RainMaker의 기능은 무엇입니까?

A: ESP RainMaker는 사용자를 포함한 다양한 기능을 제공합니다.
관리, 최종 사용자 기능 및 관리 기능. 사용자 관리
간편한 장치 청구 및 데이터 동기화가 가능합니다. 최종 사용자
기능을 통해 모바일 앱을 통해 장치를 원격으로 제어하거나
web 상호 작용. 관리 기능은 장치 모니터링을 위한 도구를 제공합니다.
및 관리.

ESP32-C3 무선 모험
IoT 종합 가이드
Espressif Systems 12년 2023월 XNUMX일

내용물

나 준비

1

1 IoT 소개

3

1.1 IoT 아키텍처. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 삼

1.2 스마트 홈의 IoT 애플리케이션. . . . . . . . . . . . . . . . . . . . . . . . . . 6

2 IoT 프로젝트 소개 및 실천

9

2.1 일반적인 IoT 프로젝트 소개. . . . . . . . . . . . . . . . . . . . . . . . 9

2.1.1 일반적인 IoT 장치용 기본 모듈. . . . . . . . . . . . . . . . . 9

2.1.2 클라이언트 응용 프로그램의 기본 모듈. . . . . . . . . . . . . . . . . . . 10

2.1.3 일반적인 IoT 클라우드 플랫폼 소개. . . . . . . . . . . . . . 11

2.2 연습: 스마트 조명 프로젝트 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.2.1 프로젝트 구조. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.2.2 프로젝트 기능. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.2.3 하드웨어 준비. . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2.2.4 개발 프로세스. . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2.3 요약. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3 ESP RainMaker 소개

19

3.1 ESP RainMaker란 무엇입니까? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.2 ESP RainMaker의 구현. . . . . . . . . . . . . . . . . . . . . . 21

3.2.1 서비스 청구. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3.2.2 RainMaker 에이전트. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3.2.3 클라우드 백엔드. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.2.4 RainMaker 클라이언트. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

3.3 연습: ESP RainMaker 개발의 핵심 사항 . . . . . . . . . . . . 25

3.4 ESP RainMaker의 기능 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

3.4.1 사용자 관리. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

3.4.2 최종 사용자 기능. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3.4.3 관리 기능. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3.5 요약. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

4 개발 환경 설정

31

4.1 ESP-IDF 이상view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

4.1.1 ESP-IDF 버전. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3

4.1.2 ESP-IDF Git 워크플로. . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.1.3 적합한 버전 선택. . . . . . . . . . . . . . . . . . . . . . . . 34 4.1.4 오버view ESP-IDF SDK 디렉토리의 . . . . . . . . . . . . . . . . . . . . 34 4.2 ESP-IDF 개발 환경 설정 . . . . . . . . . . . . . . . . . 38 4.2.1 Linux에서 ESP-IDF 개발 환경 설정. . . . . . . . 38 4.2.2 Windows에서 ESP-IDF 개발 환경 설정. . . . . . 40 4.2.3 Mac에서 ESP-IDF 개발 환경 설정 . . . . . . . . . 45 4.2.4 VS Code 설치. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4.2.5 타사 개발 환경 소개. . . . . . . . 46 4.3 ESP-IDF 컴파일 시스템. . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.3.1 컴파일 시스템의 기본 개념. . . . . . . . . . . . . . . . . . 47 4.3.2 프로젝트 File 구조 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.3.3 컴파일 시스템의 기본 빌드 규칙. . . . . . . . . . . . . 50 4.3.4 컴파일 스크립트 소개. . . . . . . . . . . . . . . . . . 51 4.3.5 일반 명령 소개. . . . . . . . . . . . . . . . . . . 52 4.4 연습: Ex 컴파일amp르 프로그램 “블링크” . . . . . . . . . . . . . . . . . . 53 4.4.1 예amp르 분석 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.4.2 블링크 프로그램 컴파일 . . . . . . . . . . . . . . . . . . . . . . . 56 4.4.3 블링크 프로그램 플래싱. . . . . . . . . . . . . . . . . . . . . . . . 59 4.4.4 블링크 프로그램의 시리얼 포트 로그 분석. . . . . . . . . . . . . . 60 4.5 요약. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

II 하드웨어 및 드라이버 개발

65

5 ESP32-C3 기반 스마트 조명 제품의 하드웨어 설계

67

5.1 스마트 조명 제품의 특징 및 구성 . . . . . . . . . . . . . . . 67

5.2 ESP32-C3 코어 시스템의 하드웨어 설계. . . . . . . . . . . . . . . . . . . 70

5.2.1 전원 공급 장치. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

5.2.2 전원 켜기 순서 및 시스템 재설정. . . . . . . . . . . . . . . . . . 74

5.2.3 SPI 플래시. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

5.2.4 클럭 소스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

5.2.5 RF 및 안테나. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

5.2.6 스트래핑 핀. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

5.2.7 GPIO 및 PWM 컨트롤러. . . . . . . . . . . . . . . . . . . . . . . . . 79

5.3 연습: ESP32-C3을 사용하여 스마트 조명 시스템 구축 . . . . . . . . . . . . . 80

5.3.1 모듈 선택. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

5.3.2 PWM 신호의 GPIO 구성. . . . . . . . . . . . . . . . . . . . 82

5.3.3 펌웨어 다운로드 및 디버깅 인터페이스. . . . . . . . . . . . 82

5.3.4 RF 설계 지침. . . . . . . . . . . . . . . . . . . . . . . . . . 84 5.3.5 전원 공급 장치 설계 지침. . . . . . . . . . . . . . . . . . . 86 5.4 요약. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

6 드라이버 개발

87

6.1 드라이버 개발 프로세스. . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

6.2 ESP32-C3 주변기기 애플리케이션. . . . . . . . . . . . . . . . . . . . . . . . . 88

6.3 LED 드라이버 기본 사항. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

6.3.1 색 공간. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

6.3.2 LED 드라이버. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

6.3.3 LED 디밍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

6.3.4 PWM 소개. . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

6.4 LED 디밍 드라이버 개발 . . . . . . . . . . . . . . . . . . . . . . . . 96

6.4.1 비휘발성 저장소(NVS). . . . . . . . . . . . . . . . . . . . . . . . 97

6.4.2 LED PWM 컨트롤러(LEDC) . . . . . . . . . . . . . . . . . . . . . . . 98

6.4.3 LED PWM 프로그래밍. . . . . . . . . . . . . . . . . . . . . . . . . . 100

6.5 연습: 스마트 조명 프로젝트에 드라이버 추가 . . . . . . . . . . . . . . . . . 103

6.5.1 버튼 드라이버. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

6.5.2 LED 디밍 드라이버. . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

6.6 요약. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

III 무선 통신 및 제어

109

7 Wi-Fi 구성 및 연결

111

7.1 Wi-Fi의 기본 사항. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

7.1.1 Wi-Fi 소개. . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

7.1.2 IEEE 802.11의 발전. . . . . . . . . . . . . . . . . . . . . . . . . 111

7.1.3 Wi-Fi 개념. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

7.1.4 Wi-Fi 연결. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

7.2 블루투스의 기본. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

7.2.1 블루투스 소개. . . . . . . . . . . . . . . . . . . . . . . . . 123

7.2.2 블루투스 개념. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

7.2.3 블루투스 연결. . . . . . . . . . . . . . . . . . . . . . . . . . . 127

7.3 Wi-Fi 네트워크 구성. . . . . . . . . . . . . . . . . . . . . . . . . . . 131

7.3.1 Wi-Fi 네트워크 구성 가이드. . . . . . . . . . . . . . . . . . . . 131

7.3.2 소프트AP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

7.3.3 스마트 구성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

7.3.4 블루투스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

7.3.5 기타 방법. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

7.4 Wi-Fi 프로그래밍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 7.4.1 ESP-IDF의 Wi-Fi 구성 요소. . . . . . . . . . . . . . . . . . . . . . . 139 7.4.2 연습: Wi-Fi 연결. . . . . . . . . . . . . . . . . . . . . . . . 141 7.4.3 연습: 스마트 Wi-Fi 연결 . . . . . . . . . . . . . . . . . . . . . 145
7.5 연습: 스마트 조명 프로젝트의 Wi-Fi 구성 . . . . . . . . . . . . . . . 156 7.5.1 스마트 라이트 프로젝트의 Wi-Fi 연결 . . . . . . . . . . . . . . . . . 156 7.5.2 스마트 Wi-Fi 구성 . . . . . . . . . . . . . . . . . . . . . . . . . 157
7.6 요약. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

8 로컬 제어

159

8.1 로컬 제어 소개. . . . . . . . . . . . . . . . . . . . . . . . . . . 159

8.1.1 로컬 제어의 적용. . . . . . . . . . . . . . . . . . . . . . . . 161

8.1.2 어드밴tag로컬 제어의 es. . . . . . . . . . . . . . . . . . . . . . . . 161

8.1.3 스마트폰을 통해 제어되는 장치 검색. . . . . . . . . . 161

8.1.4 스마트폰과 장치 간의 데이터 통신. . . . . . . . 162

8.2 일반적인 로컬 검색 방법. . . . . . . . . . . . . . . . . . . . . . . . 162

8.2.1 방송. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

8.2.2 멀티캐스트. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

8.2.3 브로드캐스트와 멀티캐스트의 비교. . . . . . . . . . . . . . 176

8.2.4 로컬 검색을 위한 멀티캐스트 애플리케이션 프로토콜 mDNS. . . . . . . . 176

8.3 로컬 데이터에 대한 공통 통신 프로토콜. . . . . . . . . . . . . . . 179

8.3.1 전송 제어 프로토콜(TCP). . . . . . . . . . . . . . . . . . . 179

8.3.2 하이퍼텍스트 전송 프로토콜(HTTP). . . . . . . . . . . . . . . . . . . 185

8.3.3 사용자 Datag램 프로토콜(UDP). . . . . . . . . . . . . . . . . . . . . . 189

8.3.4 제한된 애플리케이션 프로토콜(CoAP). . . . . . . . . . . . . . . . 192

8.3.5 블루투스 프로토콜. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

8.3.6 데이터 통신 프로토콜 요약. . . . . . . . . . . . . . . 203

8.4 데이터 보안 보장. . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

8.4.1 TLS(전송 계층 보안) 소개. . . . . . . . . . . . . 207

8.4.2 Da 소개tag램 전송 계층 보안(DTLS). . . . . . . 213

8.5 연습: 스마트 조명 프로젝트의 로컬 제어. . . . . . . . . . . . . . . . . . 217

8.5.1 Wi-Fi 기반 로컬 제어 서버 생성. . . . . . . . . . . . . . . 217

8.5.2 스크립트를 사용하여 로컬 제어 기능 확인. . . . . . . . . . . 221

8.5.3 블루투스 기반 로컬 제어 서버 생성. . . . . . . . . . . . 222

8.6 요약. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

9 클라우드 컨트롤

225

9.1 원격 제어 소개. . . . . . . . . . . . . . . . . . . . . . . . . . 225

9.2 클라우드 데이터 통신 프로토콜. . . . . . . . . . . . . . . . . . . . . . 226

9.2.1 MQTT 소개. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 9.2.2 MQTT 원칙. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 9.2.3 MQTT 메시지 형식. . . . . . . . . . . . . . . . . . . . . . . . . . 228 9.2.4 프로토콜 비교. . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 9.2.5 Linux 및 Windows에서 MQTT 브로커 설정 . . . . . . . . . . . . 233 9.2.6 ESP-IDF 기반 MQTT 클라이언트 설정 . . . . . . . . . . . . . . . . 235 9.3 MQTT 데이터 보안 보장. . . . . . . . . . . . . . . . . . . . . . . . . . . 237 9.3.1 인증서의 의미 및 기능. . . . . . . . . . . . . . . . . . . 237 9.3.2 로컬로 인증서 생성. . . . . . . . . . . . . . . . . . . . . . 239 9.3.3 MQTT 브로커 구성 . . . . . . . . . . . . . . . . . . . . . . . . . 241 9.3.4 MQTT 클라이언트 구성 . . . . . . . . . . . . . . . . . . . . . . . . . 241 9.4 연습: ESP RainMaker를 통한 원격 제어 . . . . . . . . . . . . . . . . 243 9.4.1 ESP RainMaker 기본 사항. . . . . . . . . . . . . . . . . . . . . . . . . . . 243 9.4.2 노드 및 클라우드 백엔드 통신 프로토콜. . . . . . . . . . . 244 9.4.3 클라이언트와 클라우드 백엔드 간 통신 . . . . . . . . . . . 249 9.4.4 사용자 역할. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 9.4.5 기본 서비스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 9.4.6 스마트 라이트 Examp르 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 9.4.7 RainMaker 앱 및 타사 통합. . . . . . . . . . . . . . . 262 9.5 요약. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

10 스마트폰 앱 개발

269

10.1 스마트폰 앱 개발 소개. . . . . . . . . . . . . . . . . . 269

10.1.1 이상view 스마트폰 앱 개발의 . . . . . . . . . . . . . . . 270

10.1.2 안드로이드 프로젝트의 구조. . . . . . . . . . . . . . . . . . . . . . 270

10.1.3 iOS 프로젝트의 구조. . . . . . . . . . . . . . . . . . . . . . . . 271

10.1.4 Android 활동의 수명 주기. . . . . . . . . . . . . . . . . . . . . . 272

10.1.5 iOS의 수명주기 View컨트롤러 . . . . . . . . . . . . . . . . . . . . . . 273

10.2 새로운 스마트폰 앱 프로젝트 생성 . . . . . . . . . . . . . . . . . . . . . 275

10.2.1 Android 개발 준비 . . . . . . . . . . . . . . . . . . . 275

10.2.2 새로운 Android 프로젝트 생성. . . . . . . . . . . . . . . . . . . . . . 275

10.2.3 MyRainmaker에 대한 종속성 추가. . . . . . . . . . . . . . . . . 276

10.2.4 Android에서 권한 요청. . . . . . . . . . . . . . . . . . . . . . 277

10.2.5 iOS 개발 준비. . . . . . . . . . . . . . . . . . . . . . 277

10.2.6 새로운 iOS 프로젝트 생성. . . . . . . . . . . . . . . . . . . . . . . . 278

10.2.7 MyRainmaker에 대한 종속성 추가. . . . . . . . . . . . . . . . . 279

10.2.8 iOS의 권한 요청. . . . . . . . . . . . . . . . . . . . . . . . . 280

10.3 앱의 기능적 요구사항 분석. . . . . . . . . . . . . . . . . . 281

10.3.1 프로젝트의 기능적 요구사항 분석. . . . . . . . . . . . 282

10.3.2 사용자 관리 요구사항 분석. . . . . . . . . . . . . . . 282 10.3.3 장치 프로비저닝 및 바인딩 요구 사항 분석. . . . . . . 283 10.3.4 원격 제어 요구 사항 분석. . . . . . . . . . . . . . . . 283 10.3.5 일정 요구 사항 분석 . . . . . . . . . . . . . . . . . . . 284 10.3.6 사용자 센터 요구 사항 분석. . . . . . . . . . . . . . . . . . 285 10.4 사용자 관리 개발. . . . . . . . . . . . . . . . . . . . . . . . 285 10.4.1 RainMaker API 소개. . . . . . . . . . . . . . . . . . . . . . 285 10.4.2 스마트폰을 통해 통신 시작하기 . . . . . . . . . . . . . . . . 286 10.4.3 계정 등록. . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 10.4.4 계정 로그인. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 10.5 장치 프로비저닝 개발. . . . . . . . . . . . . . . . . . . . . . . 292 10.5.1 장치 검색 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 10.5.2 장치 연결. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 10.5.3 비밀 키 생성. . . . . . . . . . . . . . . . . . . . . . . . . . . 298 10.5.4 노드 ID 가져오기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 10.5.5 장치 프로비저닝 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 10.6 장치 제어 개발. . . . . . . . . . . . . . . . . . . . . . . . . . 302 10.6.1 클라우드 계정에 장치 바인딩. . . . . . . . . . . . . . . . . . . . 303 10.6.2 장치 목록 가져오기 . . . . . . . . . . . . . . . . . . . . . . . . . . 305 10.6.3 장치 상태 가져오기 . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 10.6.4 장치 상태 변경. . . . . . . . . . . . . . . . . . . . . . . . . . 310 10.7 스케줄링 및 사용자 센터 개발 . . . . . . . . . . . . . . . . . . . 313 10.7.1 스케줄링 기능 구현 . . . . . . . . . . . . . . . . . . . . 313 10.7.2 사용자 센터 구현 . . . . . . . . . . . . . . . . . . . . . . . . . 315 10.7.3 추가 클라우드 API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 10.8 요약. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

11 펌웨어 업그레이드 및 버전 관리

321

11.1 펌웨어 업그레이드. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

11.1.1 이상view 파티션 테이블의 . . . . . . . . . . . . . . . . . . . . . . . . 322

11.1.2 펌웨어 부팅 프로세스. . . . . . . . . . . . . . . . . . . . . . . . . . . 324

11.1.3 이상view OTA 메커니즘의 . . . . . . . . . . . . . . . . . . . . . 326

11.2 펌웨어 버전 관리. . . . . . . . . . . . . . . . . . . . . . . . . . 329

11.2.1 펌웨어 표시. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

11.2.2 롤백 및 롤백 방지. . . . . . . . . . . . . . . . . . . . . . . . 331

11.3 연습: OTA(Over-the-Air) Examp르 . . . . . . . . . . . . . . . . . . . . . . . 332

11.3.1 로컬 호스트를 통한 펌웨어 업그레이드. . . . . . . . . . . . . . . . . 332

11.3.2 ESP RainMaker를 통한 펌웨어 업그레이드. . . . . . . . . . . . . . . 335

11.4 요약. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342

IV 최적화 및 양산

343

12 전력 관리 및 저전력 최적화

345

12.1 ESP32-C3 전원 관리. . . . . . . . . . . . . . . . . . . . . . . . . . . 345

12.1.1 동적 주파수 스케일링. . . . . . . . . . . . . . . . . . . . . . . . 346

12.1.2 전원 관리 구성. . . . . . . . . . . . . . . . . . . . 348

12.2 ESP32-C3 저전력 모드. . . . . . . . . . . . . . . . . . . . . . . . . . . . 348

12.2.1 모뎀-절전 모드. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

12.2.2 절전 모드. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351

12.2.3 딥슬립 모드. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356

12.2.4 다양한 전력 모드에서의 전류 소비. . . . . . . . . . . . . 358

12.3 전원 관리 및 저전력 디버깅. . . . . . . . . . . . . . . . . 359

12.3.1 로그 디버깅. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360

12.3.2 GPIO 디버깅. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362

12.4 실습: 스마트 조명 프로젝트의 전원 관리 . . . . . . . . . . . . . . . 363

12.4.1 전원 관리 기능 구성. . . . . . . . . . . . . . . . . 364

12.4.2 전원 관리 잠금 사용. . . . . . . . . . . . . . . . . . . . . . 365

12.4.3 전력 소비 확인. . . . . . . . . . . . . . . . . . . . . . . 366

12.5 요약. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367

13 향상된 장치 보안 기능

369

13.1 이상view IoT 디바이스 데이터 보안의 . . . . . . . . . . . . . . . . . . . . . . . 369

13.1.1 IoT 장치 데이터를 보호하는 이유는 무엇입니까? . . . . . . . . . . . . . . . . . . . . . . 370

13.1.2 IoT 장치 데이터 보안을 위한 기본 요구 사항. . . . . . . . . . . . 371

13.2 데이터 무결성 보호. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372

13.2.1 무결성 검증 방법 소개. . . . . . . . . . . . . . 372

13.2.2 펌웨어 데이터의 무결성 검증. . . . . . . . . . . . . . . . . . 373

13.2.3 실amp르 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374

13.3 데이터 기밀성 보호. . . . . . . . . . . . . . . . . . . . . . . . . . 374

13.3.1 데이터 암호화 소개. . . . . . . . . . . . . . . . . . . . . . 374

13.3.2 플래시 암호화 체계 소개. . . . . . . . . . . . . . . . . 376

13.3.3 플래시 암호화 키 저장. . . . . . . . . . . . . . . . . . . . . . . 379

13.3.4 플래시 암호화 작업 모드. . . . . . . . . . . . . . . . . . . . 380

13.3.5 플래시 암호화 프로세스. . . . . . . . . . . . . . . . . . . . . . . . . . 381

13.3.6 NVS 암호화 소개. . . . . . . . . . . . . . . . . . . . . . 383

13.3.7 실amp플래시 암호화 및 NVS 암호화 파일. . . . . . . . . . . 384

13.4 데이터 합법성 보호. . . . . . . . . . . . . . . . . . . . . . . . . . . . 386

13.4.1 디지털 서명 소개. . . . . . . . . . . . . . . . . . . . . 386

13.4.2 이상view 보안 부팅 계획의 . . . . . . . . . . . . . . . . . . . . . 388

13.4.3 소프트웨어 보안 부팅 소개. . . . . . . . . . . . . . . . . . . 388 13.4.4 하드웨어 보안 부팅 소개. . . . . . . . . . . . . . . . . . 390 13.4.5 전amp레. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394 13.5 연습: 대량 생산의 보안 기능 . . . . . . . . . . . . . . . . . . 396 13.5.1 플래시 암호화 및 보안 부팅. . . . . . . . . . . . . . . . . . . . . 396 13.5.2 일괄 플래시 도구를 사용하여 플래시 암호화 및 보안 부팅 활성화 . . 397 13.5.3 스마트 라이트 프로젝트에서 플래시 암호화 및 보안 부팅 활성화 . . . 398 13.6 요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398

14 양산을 위한 펌웨어 버닝 및 테스트

399

14.1 대량 생산 시 펌웨어 버닝 . . . . . . . . . . . . . . . . . . . . . . 399

14.1.1 데이터 파티션 정의. . . . . . . . . . . . . . . . . . . . . . . . . . 399

14.1.2 펌웨어 굽기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402

14.2 대량 생산 테스트. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403

14.3 실습: 스마트 조명 프로젝트의 대량 생산 데이터 . . . . . . . . . . . . . 404

14.4 요약. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404

15 ESP 통찰력: 원격 모니터링 플랫폼

405

15.1 ESP Insights 소개. . . . . . . . . . . . . . . . . . . . . . . . . . . . 405

15.2 ESP Insights 시작하기. . . . . . . . . . . . . . . . . . . . . . . . . 409

15.2.1 esp-insights 프로젝트에서 ESP Insights 시작하기. . . . . . 409

15.2.2 Ex 실행ampesp-insights 프로젝트의 파일입니다. . . . . . . . . . . . . . . 411

15.2.3 코어 덤프 정보 보고. . . . . . . . . . . . . . . . . . . . . 411

15.2.4 관심 로그 사용자 정의. . . . . . . . . . . . . . . . . . . . . . . . 412

15.2.5 재부팅 이유 보고. . . . . . . . . . . . . . . . . . . . . . . . . 413

15.2.6 사용자 정의 지표 보고. . . . . . . . . . . . . . . . . . . . . . . . . 413

15.3 연습: 스마트 조명 프로젝트에서 ESP Insights 사용 . . . . . . . . . . . . . . . 416

15.4 요약. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417

소개
ESP32-C3은 오픈 소스 RISC-V 아키텍처를 기반으로 하는 단일 코어 Wi-Fi 및 Bluetooth 5(LE) 마이크로 컨트롤러 SoC입니다. 전력, I/O 기능 및 보안의 적절한 균형을 유지하여 연결된 장치를 위한 최적의 비용 효율적인 솔루션을 제공합니다. ESP32-C3 제품군의 다양한 애플리케이션을 보여주기 위해 Espressif의 이 책은 IoT 프로젝트 개발 및 환경 설정의 기초부터 실제 실습까지 AIoT를 통한 흥미로운 여정을 안내합니다.amp레. 처음 5개 장에서는 IoT, ESP RainMaker 및 ESP-IDF에 대해 설명합니다. 6장과 XNUMX장은 하드웨어 설계 및 드라이버 개발에 대해 간략히 설명합니다. 진행하면서 Wi-Fi 네트워크와 모바일 앱을 통해 프로젝트를 구성하는 방법을 알게 될 것입니다. 마지막으로, 프로젝트를 최적화하고 대량 생산에 투입하는 방법을 배우게 됩니다.
관련 분야의 엔지니어, 소프트웨어 설계자, 교사, 학생 등 IoT에 관심이 있는 모든 사람이라면 이 책이 도움이 될 것입니다.
ex 코드를 다운로드할 수 있습니다.amp이 책에서는 GitHub의 Espressif 사이트에서 가져온 파일을 사용했습니다. IoT 개발에 대한 최신 정보는 공식 계정을 팔로우하세요.

머리말
정보화되는 세상
사물인터넷(IoT)은 인터넷의 물결을 타고 디지털 경제의 새로운 유형의 인프라로 성대하게 데뷔했습니다. 기술을 대중에게 더 가까이 다가가기 위해 Espressif Systems는 각계각층의 개발자가 IoT를 사용하여 우리 시대의 가장 시급한 문제를 해결할 수 있다는 비전을 위해 노력하고 있습니다. 우리가 미래에 기대하는 것은 '만물지능형 네트워크'의 세상입니다.
자체 칩을 설계하는 것은 해당 비전의 중요한 구성 요소입니다. 기술의 경계를 넘어서는 끊임없는 돌파구가 필요한 마라톤이 되는 것입니다. '게임 체인저' ESP8266부터 Wi-Fi와 블루투스(LE) 연결을 통합한 ESP32 시리즈, AI 가속기를 탑재한 ESP32-S3까지 에스프레시프는 AIoT 솔루션을 위한 제품 연구와 개발을 멈추지 않습니다. IoT 개발 프레임워크 ESP-IDF, 메시 개발 프레임워크 ESP-MDF 및 장치 연결 플랫폼 ESP RainMaker와 같은 오픈 소스 소프트웨어를 사용하여 AIoT 애플리케이션 구축을 위한 독립적인 프레임워크를 만들었습니다.
2022년 800월 현재 Espressif의 IoT 칩셋 누적 출하량은 32억 개를 넘어 Wi-Fi MCU 시장을 선도하고 전 세계적으로 수많은 연결 장치를 지원하고 있습니다. 우수성을 추구하면 모든 Espressif 제품이 높은 수준의 통합성과 비용 효율성으로 인해 큰 인기를 얻게 됩니다. ESP3-C32의 출시는 Espressif 자체 개발 기술의 중요한 이정표입니다. 이는 400MHz에서 실행될 수 있는 160KB SRAM을 갖춘 단일 코어, 2.4비트, RISC-V 기반 MCU입니다. 장거리 지원과 함께 5GHz Wi-Fi 및 Bluetooth 32(LE)가 통합되었습니다. 전력, I/O 기능 및 보안의 균형을 잘 맞춰 연결된 장치를 위한 최적의 비용 효율적인 솔루션을 제공합니다. 이 책은 이렇게 강력한 ESP3-CXNUMX를 바탕으로 상세한 그림과 실습 예제를 통해 독자들이 IoT 관련 지식을 이해할 수 있도록 돕고자 구성되었습니다.amp레.
우리는 왜 이 책을 썼는가?
Espressif Systems는 단순한 반도체 회사가 아닙니다. 기술 분야의 혁신과 혁신을 위해 항상 노력하는 IoT 플랫폼 기업이기도 합니다. 동시에 Espressif는 자체 개발한 운영 체제와 소프트웨어 프레임워크를 오픈 소스로 공개하고 커뮤니티와 공유하여 독특한 생태계를 형성했습니다. 엔지니어, 제작자, 기술 마니아들은 Espressif 제품을 기반으로 새로운 소프트웨어 애플리케이션을 적극적으로 개발하고 자유롭게 소통하며 경험을 공유합니다. 유튜브, 깃허브 등 다양한 플랫폼에서 개발자들의 멋진 아이디어를 늘 만나보실 수 있습니다. Espressif 제품의 인기로 인해 Espressif 칩셋을 기반으로 영어, 중국어, 독일어, 프랑스어, 일본어를 포함한 100개 이상의 언어로 XNUMX권 이상의 책을 제작한 작가의 수가 늘어나고 있습니다.

Espressif의 지속적인 혁신을 장려하는 것은 커뮤니티 파트너의 지원과 신뢰입니다. “우리는 칩, 운영 체제, 프레임워크, 솔루션, 클라우드, 비즈니스 관행, 도구, 문서, 저술, 아이디어 등을 현대 생활의 가장 시급한 문제에 대해 사람들이 필요로 하는 답변과 더욱 관련되게 만들기 위해 노력합니다. 이것이 Espressif의 최고의 야망이자 도덕적 나침반입니다.” Espressif의 설립자이자 CEO인 Mr. Teo Swee Ann은 말했습니다.
Espressif는 독서와 아이디어를 중요하게 생각합니다. IoT 기술의 지속적인 업그레이드로 인해 엔지니어에 대한 요구 사항이 높아지는 상황에서 더 많은 사람들이 IoT 칩, 운영 체제, 소프트웨어 프레임워크, 애플리케이션 체계 및 클라우드 서비스 제품을 빠르게 익힐 수 있도록 어떻게 도울 수 있습니까? 물고기를 주는 것보다 물고기 잡는 법을 가르치는 것이 낫다는 속담이 있습니다. 브레인스토밍을 하던 중, IoT 개발의 핵심 지식을 체계적으로 정리하면 책을 쓸 수 있겠다는 생각이 들었습니다. 우리는 성공하여 신속하게 선임 엔지니어 그룹을 모으고 임베디드 프로그래밍, IoT 하드웨어 및 소프트웨어 개발 분야의 기술 팀의 경험을 결합하여 이 책의 출판에 기여했습니다. 집필 과정에서 우리는 객관적이고 공정하게, 고치를 벗고 간결한 표현을 사용하여 사물 인터넷의 복잡성과 매력을 전달하기 위해 최선을 다했습니다. 개발 과정에서 직면하는 질문에 대한 명확한 답변을 제공하기 위해 커뮤니티의 피드백과 제안을 참조하여 일반적인 질문을 신중하게 요약하고 관련 기술자 및 의사 결정자에게 실용적인 IoT 개발 지침을 제공합니다.
책 구조
이 책은 엔지니어 중심의 관점으로 IoT 프로젝트 개발에 필요한 지식을 단계별로 설명합니다. 이는 다음과 같이 네 부분으로 구성됩니다.
· 준비(1장): 이 부분에서는 IoT 아키텍처, 일반적인 IoT 프로젝트 프레임워크, ESP RainMakerr 클라우드 플랫폼 및 개발 환경 ESP-IDF를 소개하여 IoT 프로젝트 개발을 위한 탄탄한 기반을 마련합니다.
· 하드웨어 및 드라이버 개발(5장): ESP6-C32 칩셋을 기반으로 최소한의 하드웨어 시스템 및 드라이버 개발에 대해 자세히 설명하고 디밍, 컬러 그레이딩, 무선 통신 제어를 구현합니다.
· 무선 통신 및 제어(7장): ESP11-C32 칩, 로컬 및 클라우드 제어 프로토콜, 장치의 로컬 및 원격 제어를 기반으로 하는 지능형 Wi-Fi 구성 방식을 설명합니다. 또한 스마트폰 앱 개발, 펌웨어 업그레이드, 버전 관리를 위한 체계도 제공합니다.
· 최적화 및 대량 생산(12-15장): 이 부분은 고급 IoT 애플리케이션을 대상으로 하며, 전력 관리, 저전력 최적화 및 향상된 보안 분야의 제품 최적화에 중점을 둡니다. 또한 양산 시 펌웨어 버닝 및 테스트 방법, 원격 모니터링 플랫폼 ESP Insights를 통해 기기 펌웨어의 실행 상태 및 로그를 진단하는 방법도 소개합니다.

소스 코드 정보
독자는 ex를 실행할 수 있습니다amp코드를 수동으로 입력하거나 책과 함께 제공되는 소스 코드를 사용하여 이 책에 있는 파일 프로그램을 수정합니다. 이론과 실습의 결합을 강조하여 거의 모든 장에 Smart Light 프로젝트를 기반으로 한 실습 섹션을 설정했습니다. 모든 코드는 오픈 소스입니다. 독자들은 소스 코드를 다운로드하고 GitHub 및 공식 포럼 esp32.com에서 이 책과 관련된 섹션에서 토론할 수 있습니다. 이 책의 오픈 소스 코드에는 Apache License 2.0의 조건이 적용됩니다.
저자의 메모
이 책은 Espressif Systems에서 공식적으로 제작했으며 회사의 수석 엔지니어가 집필했습니다. IoT 관련 산업의 관리자 및 R&D 인력, 관련 전공의 교사 및 학생, 사물 인터넷 분야의 매니아에게 적합합니다. 이 책이 업무 매뉴얼이자 참고서, 머리맡의 책이 되어 좋은 스승이자 친구가 될 수 있기를 바랍니다.
이 책을 편찬하면서 우리는 국내외 전문가, 학자, 기술자들의 관련 연구 결과를 일부 참고했으며, 학문적 규범에 따라 인용하기 위해 최선을 다했습니다. 그러나 일부 누락이 있을 수 있으므로, 관련 저자들 모두에게 깊은 존경과 감사의 말씀을 드립니다. 또한, 인터넷상의 정보를 인용하였기 때문에 원저자와 출판사에게 감사의 말씀을 드리며, 모든 정보의 출처를 밝힐 수 없는 점 사과드립니다.
높은 품질의 책을 만들기 위해 우리는 내부 토론을 조직했으며 시험판 ​​독자와 출판사 편집자의 제안과 피드백을 통해 배웠습니다. 성공적인 작업을 위해 도움을 주신 모든 분들께 다시 한 번 감사의 말씀을 전하고 싶습니다.
마지막으로 가장 중요한 것은, 우리 제품의 탄생과 대중화를 위해 애쓰신 에스프레시프의 모든 분들께 감사의 말씀을 드립니다.
IoT 프로젝트의 개발에는 광범위한 지식이 필요합니다. 책의 길이와 저자의 수준과 경험으로 인해 누락이 불가피합니다. 그러므로 전문가와 독자 여러분께서는 우리의 잘못을 비판하고 바로잡아 주시기를 간곡히 부탁드립니다. 이 책에 대한 제안 사항이 있으면 book@espressif.com으로 문의해 주세요. 우리는 귀하의 피드백을 기대합니다.

이 책을 어떻게 활용하나요?
이 책에 나오는 프로젝트의 코드는 오픈소스로 공개되었습니다. GitHub 저장소에서 다운로드하고 공식 포럼에서 생각과 질문을 공유할 수 있습니다. GitHub: https://github.com/espressif/book-esp32c3-iot-projects 포럼: https://www.esp32.com/bookc3 책 전반에 걸쳐 아래와 같이 강조 표시된 부분이 있습니다.
소스 코드 이 책에서는 이론과 실습의 결합을 강조하여 거의 모든 장에 Smart Light 프로젝트에 대한 실습 섹션을 설정했습니다. 해당 단계와 소스 페이지는 tag 소스 코드.
참고/팁 여기서는 프로그램을 성공적으로 디버깅하기 위한 몇 가지 중요한 정보와 알림을 찾을 수 있습니다. 로 시작하는 두 개의 굵은 선 사이에 표시됩니다. tag 참고 또는 팁.
이 책에 나오는 대부분의 명령은 Linux에서 "$" 문자로 프롬프트되어 실행됩니다. 명령을 실행하려면 수퍼유저 권한이 필요한 경우 프롬프트가 "#"으로 대체됩니다. Mac 시스템의 명령 프롬프트는 섹션 4.2.3 Mac에 ESP-IDF 설치에서 사용된 것처럼 "%"입니다.
이 책의 본문 텍스트는 Charter에 인쇄될 예정이며, 코드 ex는amp파일, 구성요소, 함수, 변수, 코드 file 이름, 코드 디렉토리 및 문자열은 Courier New에 있습니다.
사용자가 입력해야 하는 명령어나 문자, 그리고 “Enter” 키를 눌러 입력할 수 있는 명령어는 Courier New 굵은 글씨로 인쇄됩니다. 로그와 코드 블록은 연한 파란색 상자에 표시됩니다.
Examp르 :
둘째, esp-idf/comComponents/nvs flash/nvs 파티션 생성기/nvs partition gen.py를 사용하여 NVS 파티션 바이너리를 생성합니다. file 다음 명령을 사용하여 개발 호스트에서:
$ python $IDF 경로/구성 요소/nvs 플래시/nvs 파티션 생성기/nvs 파티션 gen.py –입력 대량 prod.csv –출력 대량 prod.bin –size NVS 파티션 크기

제1장

소개

에게

사물인터넷

20세기 말, 컴퓨터 네트워크와 통신 기술의 발달로 인터넷은 급속히 사람들의 삶에 자리 잡았습니다. 인터넷 기술이 계속해서 발전하면서 사물 인터넷(IoT)이라는 개념이 탄생했습니다. IoT는 말 그대로 사물이 연결되는 인터넷을 뜻한다. 원래의 인터넷이 공간과 시간의 한계를 허물고 '사람과 사람' 사이의 거리를 좁혔다면, IoT는 '사물'을 중요한 참여자로 만들어 '사람'과 '사물'을 더 가깝게 만듭니다. 머지않아 IoT는 정보산업의 원동력이 될 것입니다.
그렇다면 사물인터넷이란 무엇인가?
사물인터넷은 그 의미와 범위가 끊임없이 진화하기 때문에 정확하게 정의하기는 어렵습니다. 1995년 빌 게이츠는 자신의 저서 The Road Ahead에서 IoT에 대한 아이디어를 처음으로 언급했습니다. 간단히 말하면, IoT는 사물이 인터넷을 통해 서로 정보를 교환할 수 있게 하는 것입니다. 궁극적인 목표는 '모든 것의 인터넷'을 구축하는 것입니다. 이는 IoT에 대한 초기 해석이자 미래 기술에 대한 환상이다. XNUMX년이 지난 지금, 경제와 기술의 급속한 발전으로 그 환상이 현실로 다가오고 있습니다. 스마트 기기, 스마트 홈, 스마트 시티, 차량 인터넷, 웨어러블 기기부터 IoT 기술이 지원하는 '메타버스'까지 새로운 개념이 끊임없이 등장하고 있습니다. 이번 장에서는 사물 인터넷의 아키텍처에 대한 설명부터 시작하여 가장 일반적인 IoT 애플리케이션인 스마트 홈을 소개하여 IoT에 대한 명확한 이해를 돕습니다.
1.1 IoT 아키텍처
사물 인터넷에는 다양한 산업 분야에서 다양한 애플리케이션 요구 사항과 형태를 갖는 여러 기술이 포함됩니다. IoT의 구조와 핵심기술, 응용특성을 정리하기 위해서는 통일된 아키텍처와 표준기술체계를 확립하는 것이 필요하다. 이 책에서는 IoT의 아키텍처를 인식 및 제어 계층, 네트워크 계층, 플랫폼 계층, 애플리케이션 계층의 네 가지 계층으로 간단히 구분합니다.
인식 및 제어 계층 IoT 아키텍처의 가장 기본 요소인 인식 및 제어 계층은 IoT의 포괄적인 센싱을 구현하는 핵심입니다. 주요 기능은 정보를 수집, 식별 및 제어하는 ​​것입니다. 지각 능력을 갖춘 다양한 장치로 구성되어 있으며,
3

식별, 제어 및 실행을 수행하며 재료 특성, 행동 추세 및 장치 상태와 같은 데이터를 검색하고 분석하는 일을 담당합니다. 이러한 방식으로 IoT는 실제 물리적 세계를 인식하게 됩니다. 게다가, 계층은 장치의 상태를 제어할 수도 있습니다.
이 계층의 가장 일반적인 장치는 정보 수집 및 식별에 중요한 역할을 하는 다양한 센서입니다. 센서는 시각에 해당하는 감광성 센서, 청각에 해당하는 음향 센서, 냄새에 해당하는 가스 센서, 촉각에 해당하는 압력 및 온도 감지 센서 등 인간의 감각 기관과 같습니다. 이러한 모든 "감각 기관"을 통해 물체는 "살아있게" 되고 물리적 세계에 대한 지능적인 인식, 인식 및 조작이 가능해집니다.
네트워크 계층 네트워크 계층의 주요 기능은 인식 및 제어 계층에서 얻은 데이터를 지정된 대상으로 전달하고 애플리케이션 계층에서 내린 명령을 인식 및 제어 계층으로 다시 전송하는 것입니다. 이는 IoT 시스템의 여러 계층을 연결하는 중요한 통신 브리지 역할을 합니다. 사물 인터넷의 기본 모델을 설정하려면 사물을 네트워크에 통합하는 두 단계, 즉 인터넷에 대한 액세스와 인터넷을 통한 전송이 필요합니다.
인터넷 접속 인터넷은 사람과 사람 사이의 상호 연결을 가능하게 하지만 대가족에 사물을 포함시키지는 못합니다. IoT가 출현하기 전에는 대부분의 사물이 "네트워크 가능"하지 않았습니다. 지속적인 기술의 발전 덕분에 IoT는 사물을 인터넷에 연결하여 '사람과 사물', '사물과 사물'의 상호 연결을 실현합니다. 인터넷 연결을 구현하는 일반적인 방법에는 유선 네트워크 액세스와 무선 네트워크 액세스라는 두 가지가 있습니다.
유선 네트워크 접속 방식에는 이더넷, 직렬통신(RS-232, RS-485 등), USB 등이 있으며, 무선 네트워크 접속은 무선통신에 의존하는데, 이는 다시 근거리 무선통신과 장거리 무선통신으로 나눌 수 있다.
단거리 무선 통신에는 ZigBee, Bluetooth, Wi-Fi, NFC(근거리 무선 통신) 및 RFID(무선 주파수 식별)가 포함됩니다. 장거리 무선 통신에는 eMTC(Enhanced Machine Type Communication), LoRa, NB-IoT(협대역 사물 인터넷), 2G, 3G, 4G, 5G 등이 포함됩니다.
인터넷을 통한 전송 인터넷 접속의 다양한 방법은 해당하는 데이터의 물리적 전송 링크로 이어집니다. 다음은 데이터 전송에 사용할 통신 프로토콜을 결정하는 것입니다. 현재 대부분의 IoT 단말기는 인터넷 단말기에 비해 단말기 수가 적습니다.
4 ESP32-C3 무선 모험: IoT에 대한 종합 가이드

처리 성능, 저장 용량, 네트워크 속도 등과 같은 사용 가능한 리소스가 있으므로 IoT 애플리케이션에서는 더 적은 리소스를 차지하는 통신 프로토콜을 선택해야 합니다. 오늘날 널리 사용되는 통신 프로토콜에는 MQTT(Message Queuing Telemetry Transport)와 CoAP(Constrained Application Protocol)라는 두 가지 통신 프로토콜이 있습니다.
플랫폼 계층 플랫폼 계층은 주로 IoT 클라우드 플랫폼을 의미합니다. 모든 IoT 단말기가 네트워크로 연결되면 해당 데이터를 IoT 클라우드 플랫폼에 집계하여 계산하고 저장해야 합니다. 플랫폼 계층은 주로 대규모 장치의 액세스 및 관리를 용이하게 하는 IoT 애플리케이션을 지원합니다. IoT 단말을 클라우드 플랫폼에 연결해 단말 데이터를 수집하고 단말에 명령을 내려 원격제어를 구현한다. 산업용 애플리케이션에 장비를 할당하는 중간 서비스인 플랫폼 계층은 전체 IoT 아키텍처에서 연결 역할을 하며 추상적인 비즈니스 로직과 표준화된 핵심 데이터 모델을 전달하여 장치에 대한 신속한 액세스를 실현할 수 있을 뿐만 아니라 강력한 모듈식 기능도 제공합니다. 산업 응용 시나리오의 다양한 요구를 충족합니다. 플랫폼 계층에는 주로 장치 액세스, 장치 관리, 보안 관리, 메시지 통신, 모니터링 운영 및 유지 관리, 데이터 응용 프로그램과 같은 기능 모듈이 포함됩니다.
· 장치 액세스, 단말기와 IoT 클라우드 플랫폼 간의 연결 및 통신을 실현합니다.
· 장치 생성, 장치 유지 관리, 데이터 변환, 데이터 동기화, 장치 배포 등의 기능을 포함한 장치 관리.
· 보안관리, 보안인증, 통신보안 관점에서 IoT 데이터 전송의 보안을 보장합니다.
· 세 가지 전송 방향을 포함한 메시지 통신, 즉 단말은 IoT 클라우드 플랫폼에 데이터를 보내고, IoT 클라우드 플랫폼은 서버 측 또는 다른 IoT 클라우드 플랫폼에 데이터를 보내고, 서버 측에서는 IoT 장치를 원격으로 제어합니다.
· 모니터링 및 진단, 펌웨어 업그레이드, 온라인 디버깅, 로그 서비스 등을 포함하는 모니터링 O&M
· 데이터의 저장, 분석 및 적용과 관련된 데이터 응용 프로그램.
애플리케이션 계층 애플리케이션 계층은 플랫폼 계층의 데이터를 사용하여 애플리케이션을 관리하고 데이터베이스 및 분석 소프트웨어와 같은 도구를 사용하여 이를 필터링하고 처리합니다. 결과 데이터는 스마트 헬스케어, 스마트 농업, 스마트 홈, 스마트 시티 등 실제 IoT 애플리케이션에 사용될 수 있습니다.
물론 IoT의 아키텍처는 더 많은 레이어로 세분화될 수 있지만, 얼마나 많은 레이어로 구성되더라도 기본 원리는 본질적으로 동일합니다. 학습
1장. IoT 소개 5

IoT 아키텍처에 대한 정보는 IoT 기술에 대한 이해를 심화하고 완전한 기능을 갖춘 IoT 프로젝트를 구축하는 데 도움이 됩니다.
1.2 스마트 홈의 IoT 적용
IoT는 사회 각계각층에 침투했으며, 우리와 가장 밀접하게 관련된 IoT 애플리케이션은 스마트 홈입니다. 현재 많은 기존 가전제품에는 하나 이상의 IoT 장치가 장착되어 있으며, 새로 지어진 많은 주택은 처음부터 IoT 기술로 설계되었습니다. 그림 1.1은 몇 가지 일반적인 스마트 홈 장치를 보여줍니다.
그림 1.1. 일반적인 스마트 홈 기기 스마트 홈의 발전은 간단히 스마트 제품으로 나눌 수 있습니다.tage, 장면 상호 연결tage와 지능형 stage, 그림 1.2에 표시된 대로.
그림 1.2. 개발tag스마트 홈 6 ESP32-C3 무선 모험: IoT에 대한 종합 가이드

첫 번째 stage는 스마트 제품에 관한 것입니다. 기존 가정과 달리 스마트홈에서는 IoT 기기가 센서로 신호를 받고, Wi-Fi, 블루투스 LE, ZigBee 등 무선통신 기술을 통해 네트워크로 연결된다. 사용자는 스마트폰 앱, 음성비서, 스마트 스피커 제어 등 다양한 방법으로 스마트 제품을 제어할 수 있습니다.tage는 장면 상호 연결에 중점을 둡니다. 이번 초에는tag즉, 개발자는 더 이상 단일 스마트 제품 제어를 고려하지 않고 두 개 이상의 스마트 제품을 상호 연결하고 어느 정도 자동화하여 최종적으로 사용자 정의 장면 모드를 구성하는 것을 고려하고 있습니다. 예를 들어amp즉, 사용자가 장면 모드 버튼을 누르면 조명, 커튼, 에어컨이 자동으로 사전 설정에 맞춰 조정됩니다. 물론, 트리거 조건, 실행 동작 등 연계 로직이 쉽게 설정되어 있어야 한다는 전제 조건이 있습니다. 실내 온도가 10°C 미만으로 떨어지면 에어컨 난방 모드가 실행된다고 상상해 보세요. 아침 7시에 음악이 흘러 사용자를 깨우고, 스마트 커튼이 열리고, 스마트 소켓을 통해 밥솥이나 빵 토스터가 작동됩니다. 사용자가 일어나 빨래를 마치면 아침 식사가 이미 제공되므로 출근에 지체되는 일이 없습니다. 우리 생활이 얼마나 편리해졌습니까! 세 번째tage는 지능으로 간다 stag이자형. 더 많은 스마트 홈 장치에 액세스할수록 생성되는 데이터 유형도 늘어납니다. 클라우드 컴퓨팅, 빅데이터 및 인공 지능의 도움으로 더 이상 사용자의 빈번한 명령이 필요하지 않은 스마트 홈에 "더 똑똑한 두뇌"가 심어진 것과 같습니다. 이전 상호 작용에서 데이터를 수집하고 사용자의 행동 패턴과 선호도를 학습하여 의사 결정을 위한 권장 사항 제공을 포함한 활동을 자동화합니다. 현재 대부분의 스마트 홈은 현장 상호 연결에 있습니다.tag이자형. 스마트 제품의 보급률과 지능이 높아지면서 통신 프로토콜 간의 장벽이 사라지고 있습니다. 미래에 스마트 홈은 사용자가 다양한 장치를 제어하고 일상 업무를 처리하는 데 도움을 줄 뿐만 아니라 슈퍼 컴퓨팅 능력과 사고 능력도 갖춘 아이언맨의 AI 시스템 Jarvis처럼 정말 "스마트"해질 것입니다. 지능형S에서는tag즉, 인간은 양적으로나 질적으로나 더 나은 서비스를 받게 될 것입니다.
1장. IoT 소개 7

8 ESP32-C3 무선 모험: IoT에 대한 종합 가이드

2개의 IoT 프로젝트의 장 소개 및 실습
1장에서는 IoT의 아키텍처를 소개하고, 인식 및 제어 계층, 네트워크 계층, 플랫폼 계층, 애플리케이션 계층의 역할과 상호관계, 스마트 홈 개발을 소개했다. 그러나 우리가 그림을 배울 때와 마찬가지로 이론적인 지식만으로는 충분하지 않습니다. 기술을 진정으로 익히려면 IoT 프로젝트를 실제로 실행하기 위해 "손을 더럽혀야" 합니다. 또한, 프로젝트가 양산 단계로 넘어가는 경우tage, 네트워크 연결, 구성, IoT 클라우드 플랫폼 상호 작용, 펌웨어 관리 및 업데이트, 양산 관리, 보안 구성 등 더 많은 요소를 고려해야 합니다. 그렇다면 완전한 IoT 프로젝트를 개발할 때 주의해야 할 점은 무엇입니까? 1장에서 우리는 스마트 홈이 가장 일반적인 IoT 애플리케이션 시나리오 중 하나이며, 스마트 조명은 가정, 호텔, 체육관, 병원 등에서 사용할 수 있는 가장 기본적이고 실용적인 기기 중 하나라고 언급했습니다. 이 책에서는 스마트 조명 프로젝트 구축을 출발점으로 삼아 해당 구성 요소와 기능을 설명하고 프로젝트 개발에 대한 지침을 제공할 것입니다. 이 사례를 통해 추론을 통해 더 많은 IoT 애플리케이션을 만들 수 있기를 바랍니다.
2.1 일반적인 IoT 프로젝트 소개
개발 측면에서 IoT 프로젝트의 기본 기능 모듈은 IoT 디바이스의 소프트웨어 및 하드웨어 개발, 클라이언트 애플리케이션 개발, IoT 클라우드 플랫폼 개발로 분류할 수 있습니다. 이 섹션에서 자세히 설명할 기본 기능 모듈을 명확히 하는 것이 중요합니다.
2.1.1 일반 IoT 장치용 기본 모듈
IoT 장치의 소프트웨어 및 하드웨어 개발에는 다음과 같은 기본 모듈이 포함됩니다. 데이터 수집
IoT 아키텍처의 최하위 계층인 인식 및 제어 계층의 IoT 장치는 칩과 주변 장치를 통해 센서와 장치를 연결하여 데이터 수집 및 작동 제어를 수행합니다.
9

계정 바인딩 및 초기 구성 대부분의 IoT 장치의 경우 계정 바인딩 및 초기 구성은 하나의 운영 프로세스로 완료됩니다.amp즉, Wi-Fi 네트워크를 구성하여 장치와 사용자를 연결합니다.
IoT 클라우드 플랫폼과의 상호 작용 IoT 장치를 모니터링하고 제어하려면 IoT 클라우드 플랫폼에 연결하여 상호 상호 작용을 통해 명령을 내리고 상태를 보고하는 것도 필요합니다.
장치 제어 IoT 클라우드 플랫폼과 연결되면 장치는 클라우드와 통신하고 등록, 바인딩 또는 제어될 수 있습니다. 사용자는 IoT 클라우드 플랫폼이나 로컬 통신 프로토콜을 통해 스마트폰 앱에서 제품 상태를 조회하고 기타 작업을 수행할 수 있습니다.
펌웨어 업그레이드 IoT 장치는 제조업체의 요구에 따라 펌웨어 업그레이드를 수행할 수도 있습니다. 클라우드에서 보낸 명령을 수신하여 펌웨어 업그레이드 및 버전 관리가 실현됩니다. 이 펌웨어 업그레이드 기능을 사용하면 IoT 장치의 기능을 지속적으로 향상시키고 결함을 수정하며 사용자 경험을 향상시킬 수 있습니다.
2.1.2 클라이언트 애플리케이션의 기본 모듈
클라이언트 애플리케이션(예: 스마트폰 앱)에는 주로 다음과 같은 기본 모듈이 포함됩니다.
계정 시스템 및 인증 계정 및 장치 인증을 지원합니다.
기기 제어 스마트폰 앱에는 일반적으로 제어 기능이 탑재되어 있습니다. 사용자는 스마트폰 앱을 통해 언제 어디서나 IoT 기기에 쉽게 연결하고 관리할 수 있습니다. 실제 스마트 홈에서는 대부분 스마트폰 앱을 통해 장치를 제어하므로 장치의 지능적인 관리가 가능해질 뿐만 아니라 인력 비용도 절약됩니다. 따라서 기기 기능 속성 제어, 장면 제어, 스케줄링, 원격 제어, 기기 연동 등 클라이언트 애플리케이션에는 기기 제어가 필수입니다. 스마트 홈 사용자는 조명, 가전제품, 현관 제어 등 개인의 필요에 따라 장면을 맞춤 설정할 수도 있습니다. , 등을 통해 가정생활을 더욱 편안하고 편리하게 만들어 드립니다. 에어컨 시간을 조절하고, 원격으로 끄고, 문이 열리면 자동으로 복도 조명을 켜거나, 버튼 하나로 '극장' 모드로 전환할 수 있습니다.
알림 클라이언트 애플리케이션은 IoT 장치의 실시간 상태를 업데이트하고 장치에 이상이 발생하면 경고를 보냅니다.
10 ESP32-C3 무선 모험: IoT에 대한 종합 가이드

애프터 서비스 고객 서비스 스마트폰 앱은 제품에 대한 애프터 서비스를 제공하여 IoT 기기 고장 및 기술적 운영과 관련된 문제를 적시에 해결할 수 있습니다.
주요 기능 다양한 사용자의 요구를 충족하기 위해 Shake, NFC, GPS 등과 같은 다른 기능이 추가될 수 있습니다. GPS는 위치와 거리에 따라 장면 작동의 정확도를 설정하는 데 도움이 될 수 있으며 Shake 기능을 사용하면 사용자가 원하는 동작을 설정할 수 있습니다. 흔들어서 특정 장치나 장면에 대해 명령을 실행합니다.
2.1.3 일반적인 IoT 클라우드 플랫폼 소개
IoT 클라우드 플랫폼은 디바이스 관리, 데이터 보안 통신, 알림 관리 등의 기능을 통합한 올인원 플랫폼이다. IoT 클라우드 플랫폼은 대상 그룹과 접근성에 따라 퍼블릭 IoT 클라우드 플랫폼(이하 '퍼블릭 클라우드')과 프라이빗 IoT 클라우드 플랫폼(이하 '프라이빗 클라우드')으로 나눌 수 있습니다.
퍼블릭 클라우드는 일반적으로 기업이나 개인을 위한 공유 IoT 클라우드 플랫폼을 의미하며, 플랫폼 제공자가 운영 및 유지관리하고 인터넷을 통해 공유됩니다. 무료 또는 저가일 수 있으며 Alibaba Cloud, Tencent Cloud, Baidu Cloud, AWS IoT, Google IoT 등과 같은 개방형 공용 네트워크 전반에 걸쳐 서비스를 제공합니다. 지원 플랫폼으로서 공용 클라우드는 업스트림 서비스 제공업체와 다운스트림 최종 사용자가 새로운 가치 사슬과 생태계를 창출합니다.
프라이빗 클라우드는 기업용으로만 구축되어 데이터, 보안 및 서비스 품질에 대한 최상의 제어를 보장합니다. 서비스와 인프라는 기업에서 별도로 유지 관리하며 지원 하드웨어와 소프트웨어도 특정 사용자 전용으로 제공됩니다. 기업은 비즈니스 요구 사항에 맞게 클라우드 서비스를 맞춤화할 수 있습니다. 현재 일부 스마트 홈 제조업체는 이미 프라이빗 IoT 클라우드 플랫폼을 보유하고 있으며 이를 기반으로 스마트 홈 애플리케이션을 개발했습니다.
퍼블릭 클라우드와 프라이빗 클라우드에는 각각의 장점이 있습니다tages에 대해서는 나중에 설명하겠습니다.
통신 연결을 위해서는 비즈니스 서버, IoT 클라우드 플랫폼, 스마트폰 앱과 함께 최소한 디바이스 측면에서 임베디드 개발을 완료해야 합니다. 이러한 대규모 프로젝트에 직면한 퍼블릭 클라우드는 일반적으로 프로세스 속도를 높이기 위해 장치 측 및 스마트폰 앱용 소프트웨어 개발 키트를 제공합니다. 퍼블릭 클라우드와 프라이빗 클라우드 모두 장치 액세스, 장치 관리, 장치 섀도우, 운영 및 유지 관리를 포함한 서비스를 제공합니다.
장치 액세스 IoT 클라우드 플랫폼은 프로토콜을 사용하여 장치 액세스를 위한 인터페이스를 제공할 뿐만 아니라
제2장 IoT 프로젝트의 소개와 실천 11

MQTT, CoAP, HTTPS 등 Web소켓뿐만 아니라 장치 보안 인증 기능도 탑재하여 위조 및 불법 장치를 차단하여 침해 위험을 효과적으로 줄입니다. 이러한 인증은 일반적으로 다양한 메커니즘을 지원하므로 장치가 대량 생산되는 경우 선택한 인증 메커니즘에 따라 장치 인증서를 미리 할당하고 이를 장치에 구워야 합니다.
장치 관리 IoT 클라우드 플랫폼에서 제공하는 장치 관리 기능은 제조업체가 장치의 활성화 상태 및 온라인 상태를 실시간으로 모니터링하는 데 도움을 줄 수 있을 뿐만 아니라 장치 추가/제거, 검색, 그룹 추가/삭제, 펌웨어 업그레이드 등의 옵션을 허용합니다. , 버전 관리.
디바이스 섀도우 IoT 클라우드 플랫폼은 각 디바이스에 대한 영구 가상 버전(디바이스 섀도우)을 생성할 수 있으며, 디바이스 섀도우의 상태는 인터넷 전송 프로토콜을 통해 스마트폰 앱이나 기타 디바이스에서 동기화하고 얻을 수 있습니다. 디바이스 섀도우는 각 디바이스의 최근 보고된 상태와 예상 상태를 저장하며, 디바이스가 오프라인인 경우에도 API를 호출하여 상태를 얻을 수 있습니다. 디바이스 섀도우는 Always-On API를 제공하므로 디바이스와 상호 작용하는 스마트폰 앱을 더 쉽게 구축할 수 있습니다.
운영 및 유지 관리 O&M 기능에는 세 가지 측면이 포함됩니다. · IoT 장치 및 알림에 대한 통계 정보를 보여줍니다. · 로그 관리를 통해 장치 동작, 업/다운 메시지 흐름 및 메시지 내용에 대한 정보 검색이 가능합니다. · 장치 디버깅은 명령 전달, 구성 업데이트, IoT 클라우드 플랫폼과 장치 메시지 간의 상호 작용 확인을 지원합니다.
2.2 실습: 스마트 조명 프로젝트
각 장의 이론 소개 후에는 스마트 라이트 프로젝트와 관련된 실습 섹션을 찾아 실습을 통해 도움을 받을 수 있습니다. 이 프로젝트는 Espressif의 ESP32-C3 칩과 ESP RainMaker IoT 클라우드 플랫폼을 기반으로 하며 스마트 조명 제품의 무선 모듈 하드웨어, ESP32C3 기반 스마트 장치용 임베디드 소프트웨어, 스마트폰 앱 및 ESP RainMaker 상호 작용을 다룹니다.
소스 코드 더 나은 학습 및 개발 경험을 위해 이 책의 프로젝트는 오픈 소스로 제공되었습니다. https://github의 GitHub 저장소에서 소스 코드를 다운로드할 수 있습니다. com/espressif/book-esp32c3-iot-projects.
12 ESP32-C3 무선 모험: IoT에 대한 종합 가이드

2.2.1 프로젝트 구조
스마트 라이트 프로젝트는 세 부분으로 구성됩니다: i. IoT 클라우드 플랫폼과 상호 작용하고 LED의 스위치, 밝기 및 색온도를 제어하는 ​​ESP32-C3 기반 스마트 조명 장치 lamp 염주. ii. 스마트 조명 제품의 네트워크 구성과 상태 조회 및 제어를 담당하는 스마트폰 앱(Android 및 iOS에서 실행되는 태블릿 앱 포함)입니다.
iii. ESP RainMaker를 기반으로 한 IoT 클라우드 플랫폼입니다. 단순화를 위해 이 책에서는 IoT 클라우드 플랫폼과 비즈니스 서버를 전체적으로 고려합니다. ESP RainMaker에 대한 자세한 내용은 3장에서 설명합니다.
Smart Light 프로젝트 구조와 IoT 아키텍처 간의 대응 관계는 그림 2.1에 나와 있습니다.
그림 2.1. 스마트 조명 프로젝트의 구조
2.2.2 프로젝트 기능
구조에 따라 나누어지며, 각 부분의 기능은 다음과 같습니다. 스마트 조명 장치
· 네트워크 구성 및 연결. · 스위치, 밝기, 색온도 등 LED PWM 제어. · 시간 스위치 등 자동화 또는 장면 제어. · 플래시의 암호화 및 보안 부팅. · 펌웨어 업그레이드 및 버전 관리.
제2장 IoT 프로젝트의 소개와 실천 13

스마트폰 앱 · 네트워크 구성 및 장치 바인딩. · 스위치, 밝기, 색온도 등 스마트 조명 제품 제어. · 시간 스위치 등 자동화 또는 장면 설정. · 로컬/원격 제어. · 사용자 등록, 로그인 등
ESP RainMaker IoT 클라우드 플랫폼 · IoT 장치 액세스 활성화. · 스마트폰 앱에서 접근 가능한 기기 운용 API를 제공합니다. · 펌웨어 업그레이드 및 버전 관리.
2.2.3 하드웨어 준비
프로젝트를 실제로 실행하는 데 관심이 있다면 스마트 조명, 스마트폰, Wi-Fi 라우터, 개발 환경의 설치 요구 사항을 충족하는 컴퓨터 등의 하드웨어도 필요합니다. 스마트 조명
스마트 조명은 일반 백열전구와 모양이 동일한 새로운 유형의 전구입니다. 스마트 조명은 커패시터 강압 조정 전원 공급 장치, 무선 모듈(ESP32-C3 내장), LED 컨트롤러 및 RGB LED 매트릭스로 구성됩니다. 전원에 연결하면 15V DC voltag커패시터 강압, 다이오드 정류 및 조정 후의 출력은 LED 컨트롤러와 LED 매트릭스에 에너지를 제공합니다. LED 컨트롤러는 RGB LED 매트릭스를 닫힘(켜짐)과 열림(켜짐) 사이에서 전환하여 특정 간격으로 높은 레벨과 낮은 레벨을 자동으로 전송할 수 있으므로 청록색, 노란색, 녹색, 보라색, 파란색, 빨간색 및 파란색을 방출할 수 있습니다. 백색광. 무선 모듈은 Wi-Fi 라우터 연결, 스마트 조명 상태 수신 및 보고, LED 제어 명령 전송을 담당합니다.
그림 2.2. 시뮬레이션된 스마트 조명
초기 개발에서는tage, RGB LED와 연결된 ESP32-C3DevKitM-1 보드를 사용하여 스마트 조명을 시뮬레이션할 수 있습니다.amp 구슬(그림 2.2 참조). 하지만 당신은해야
14 ESP32-C3 무선 모험: IoT에 대한 종합 가이드

이것이 스마트 조명을 조립하는 유일한 방법은 아니라는 점에 유의하십시오. 이 책의 프로젝트 하드웨어 설계에는 무선 모듈(ESP32-C3 내장)만 포함되어 있지만 완전한 스마트 조명 하드웨어 설계는 포함되어 있지 않습니다. 또한 Espressif는 오디오로 조명을 제어하기 위한 ESP32-C3 기반 오디오 개발 보드 ESP32C3-Lyra도 생산합니다. 이 보드에는 마이크와 스피커용 인터페이스가 있으며 LED 스트립을 제어할 수 있습니다. 초저가, 고성능 오디오 방송기, 리듬라이트 스트립 개발에 활용 가능하다. 그림 2.3은 32개의 LED 조명 스트립과 연결된 ESP3-C40Lyra 보드를 보여줍니다.
그림 2.3. 32개의 LED 조명 스트립과 연결된 ESP3-C40-Lyra
스마트폰(Android/iOS) 스마트 라이트 프로젝트에는 스마트 조명 제품을 설정하고 제어하기 위한 스마트폰 앱 개발이 포함됩니다.
Wi-Fi 라우터 Wi-Fi 라우터는 컴퓨터, 스마트폰, 태블릿 및 기타 무선 장치가 네트워크에 연결할 수 있도록 유선 네트워크 신호와 모바일 네트워크 신호를 무선 네트워크 신호로 변환합니다. 예를 들어amp즉, 가정의 광대역은 Wi-Fi 장치의 무선 네트워킹을 구현하기 위해 Wi-Fi 라우터에만 연결하면 됩니다. Wi-Fi 라우터가 지원하는 주류 프로토콜 표준은 IEEE 802.11n이며, 평균 TxRate는 300Mbps 또는 최대 600Mbps입니다. IEEE 802.11b 및 IEEE 802.11g와 역호환됩니다. Espressif의 ESP32-C3 칩은 IEEE 802.11b/g/n을 지원하므로 단일 대역(2.4GHz) 또는 이중 대역(2.4GHz 및 5GHz) Wi-Fi 라우터를 선택할 수 있습니다.
컴퓨터(Linux/macOS/Windows) 개발 환경은 4장에서 소개합니다. Chapter 2. IoT 프로젝트 소개 및 실습 15

2.2.4 개발 프로세스
그림 2.4. 스마트 라이트 프로젝트 개발 단계
하드웨어 설계 IoT 장치의 하드웨어 설계는 IoT 프로젝트에 필수적입니다. 완전한 스마트 조명 프로젝트는 모든 것을 생산하기 위한 것입니다.amp 주 전원 공급 장치에서 작업 중입니다. 다른 제조업체는 l을 생산합니다.amp스타일과 드라이버 유형은 다양하지만 무선 모듈의 기능은 일반적으로 동일합니다. Smart Ligh 프로젝트의 개발 과정을 단순화하기 위해 이 책에서는 무선 모듈의 하드웨어 설계와 소프트웨어 개발만 다루고 있습니다.
IoT 클라우드 플랫폼 구성 IoT 클라우드 플랫폼을 사용하려면 백엔드에서 제품 생성, 디바이스 생성, 디바이스 속성 설정 등의 프로젝트를 구성해야 합니다.
IoT 기기용 임베디드 소프트웨어 개발 IoT 클라우드 플랫폼 연결, LED 드라이버 개발, 펌웨어 업그레이드 등 Espressif의 기기 측 SDK인 ESP-IDF를 통해 기대되는 기능을 구현합니다.
스마트폰 앱 개발 사용자 등록 및 로그인, 장치 제어 및 기타 기능을 구현하기 위해 Android 및 iOS 시스템용 스마트폰 앱을 개발합니다.
IoT 장치 최적화 IoT 장치 기능의 기본 개발이 완료되면 전력 최적화와 같은 최적화 작업으로 전환할 수 있습니다.
양산 테스트 장비 기능 테스트, 노화 테스트, RF 테스트 등 관련 표준에 따라 양산 테스트를 수행합니다.
위에 나열된 단계에도 불구하고 스마트 라이트 프로젝트는 여러 작업을 동시에 수행할 수 있으므로 반드시 이러한 절차를 따르지는 않습니다. 예를 들어amp즉, 임베디드 소프트웨어와 스마트폰 앱을 동시에 개발할 수 있습니다. IoT 장치 최적화 및 대량 생산 테스트와 같은 일부 단계를 반복해야 할 수도 있습니다.
16 ESP32-C3 무선 모험: IoT에 대한 종합 가이드

2.3 요약
본 장에서는 먼저 IoT 프로젝트의 기본 구성 요소와 기능 모듈에 대해 설명한 후, 스마트 라이트의 구조, 기능, 하드웨어 준비 및 개발 프로세스를 참조하여 실습 사례를 소개했습니다. 독자는 실제 사례에서 추론을 도출하고 향후에도 실수를 최소화하면서 IoT 프로젝트를 자신감 있게 수행할 수 있습니다.
제2장 IoT 프로젝트의 소개와 실천 17

18 ESP32-C3 무선 모험: IoT에 대한 종합 가이드

제3장

소개

에게

에스에스피

레인메이커

사물 인터넷(IoT)은 사람들의 생활 방식을 변화시킬 수 있는 무한한 가능성을 제공하지만 IoT 엔지니어링의 개발은 도전으로 가득 차 있습니다. 퍼블릭 클라우드를 사용하면 단말기 제조업체는 다음 솔루션을 통해 제품 기능을 구현할 수 있습니다.
솔루션 제공업체의 클라우드 플랫폼을 기반으로 이러한 방식으로 단말기 제조업체는 제품 하드웨어를 설계한 후 제공된 통신 모듈을 사용하여 하드웨어를 클라우드에 연결하고 가이드라인에 따라 제품 기능을 구성하기만 하면 됩니다. 이는 서버 측 및 애플리케이션 측 개발과 운영 및 유지 관리(O&M)가 필요하지 않기 때문에 효율적인 접근 방식입니다. 이를 통해 단말기 제조업체는 클라우드 구현을 고려할 필요 없이 하드웨어 설계에 집중할 수 있습니다. 그러나 이러한 솔루션(예: 장치 펌웨어 및 앱)은 일반적으로 오픈 소스가 아니므로 제품 기능은 사용자 정의할 수 없는 공급자의 클라우드 플랫폼에 의해 제한됩니다. 한편, 사용자 및 장치 데이터도 클라우드 플랫폼에 속합니다.
클라우드 제품 기반 이 솔루션에서는 단말기 제조업체가 하드웨어 설계를 완료한 후 퍼블릭 클라우드에서 제공하는 하나 이상의 클라우드 제품을 사용하여 클라우드 기능을 구현해야 할 뿐만 아니라 하드웨어를 클라우드와 연결해야 합니다. 예를 들어ample, Amazon에 연결하려면 Web 서비스(AWS), 터미널 제조업체는 Amazon API Gateway, AWS IoT Core, AWS Lambda와 같은 AWS 제품을 사용하여 장치 액세스, 원격 제어, 데이터 저장, 사용자 관리 및 기타 기본 기능을 활성화해야 합니다. 이는 단말기 제조업체에게 깊은 이해와 풍부한 경험을 바탕으로 클라우드 제품을 유연하게 사용하고 구성할 것을 요구할 뿐만 아니라 초기 및 이후 구축 및 유지 관리 비용도 고려해야 합니다.tages 이는 회사의 에너지와 자원에 큰 도전을 제기합니다.
퍼블릭 클라우드와 비교하여 프라이빗 클라우드는 일반적으로 특정 프로젝트 및 제품을 위해 구축됩니다. 프라이빗 클라우드 개발자에게는 프로토콜 설계 및 비즈니스 로직 구현에 있어 최고 수준의 자유가 부여됩니다. 단말기 제조업체는 마음대로 제품과 설계 방식을 만들고 사용자 데이터를 쉽게 통합하고 강화할 수 있습니다. 퍼블릭 클라우드의 높은 보안성, 확장성, 신뢰성을 첨단 기술과 결합tag프라이빗 클라우드의 대명사 Espressif, ESP 출시
19

RainMaker는 Amazon 클라우드를 기반으로 하는 긴밀하게 통합된 프라이빗 클라우드 솔루션입니다. 사용자는 AWS 계정만으로 ESP RainMaker를 배포하고 프라이빗 클라우드를 구축할 수 있습니다.
3.1 ESP RainMaker란 무엇입니까?
ESP RainMaker는 여러 성숙한 AWS 제품으로 구축된 완전한 AIoT 플랫폼입니다. 디바이스 클라우드 접속, 디바이스 업그레이드, 백엔드 관리, 타사 로그인, 음성 통합, 사용자 관리 등 양산에 필요한 다양한 서비스를 제공합니다. AWS에서 제공하는 SAR(Serverless Application Repository)을 사용하면 터미널 제조업체는 ESP RainMaker를 AWS 계정에 신속하게 배포할 수 있으므로 시간 효율적이고 운영이 쉽습니다. Espressif에서 관리 및 유지 관리하는 ESP RainMaker에서 사용하는 SAR은 개발자가 클라우드 유지 관리 비용을 줄이고 AIoT 제품 개발을 가속화하여 안전하고 안정적이며 사용자 정의 가능한 AIoT 솔루션을 구축하는 데 도움이 됩니다. 그림 3.1은 ESP RainMaker의 아키텍처를 보여줍니다.
그림 3.1. ESP RainMaker의 아키텍처
Espressif의 ESP RainMaker 공용 서버는 솔루션 평가를 위해 모든 ESP 애호가, 제조업체 및 교육자에게 무료로 제공됩니다. 개발자는 Apple, Google 또는 GitHub 계정으로 로그인하여 자신만의 IoT 애플리케이션 프로토타입을 빠르게 구축할 수 있습니다. 공용 서버는 Alexa와 Google Home을 통합하고 Alexa Skill 및 Google Actions에서 지원하는 음성 제어 서비스를 제공합니다. 의미 인식 기능도 제20자에 의해 제공됩니다. RainMaker IoT 장치는 특정 작업에만 응답합니다. 지원되는 음성 명령의 전체 목록을 보려면 타사 플랫폼을 확인하세요. 또한 Espressif는 사용자가 스마트폰을 통해 제품을 제어할 수 있는 공개 RainMaker 앱을 제공합니다. 32 ESP3-CXNUMX 무선 모험: IoT에 대한 종합 가이드

3.2 ESP RainMaker 구현
그림 3.2에 표시된 것처럼 ESP RainMaker는 네 부분으로 구성됩니다. · RainMaker 장치가 동적으로 인증서를 얻을 수 있도록 하는 청구 서비스. · RainMaker Cloud(클라우드 백엔드라고도 함)는 메시지 필터링, 사용자 관리, 데이터 저장 및 타사 통합과 같은 서비스를 제공합니다. · RainMaker 에이전트는 RainMaker 장치를 RainMaker Cloud에 연결할 수 있게 해줍니다. · RainMaker 클라이언트(RainMaker 앱 또는 CLI 스크립트), 프로비저닝, 사용자 생성, 장치 연결 및 제어 등을 위한 것입니다.
그림 3.2. ESP RainMaker의 구조
ESP RainMaker는 다음을 포함하여 제품 개발 및 대량 생산을 위한 완전한 도구 세트를 제공합니다. RainMaker SDK
RainMaker SDK는 ESP-IDF를 기반으로 하며, 펌웨어 개발을 위한 Device-side Agent의 소스코드와 관련 C API를 제공합니다. 개발자는 애플리케이션 로직만 작성하고 나머지는 RainMaker 프레임워크에 맡기면 됩니다. C API에 대한 자세한 내용을 보려면 https://bookc3.espressif.com/rm/c-api-reference를 방문하세요. RainMaker 앱 RainMaker 앱의 공개 버전을 사용하면 개발자가 장치 프로비저닝을 완료하고 장치 상태(예: 스마트 조명 제품)를 제어 및 쿼리할 수 있습니다. iOS 및 Android 앱 스토어 모두에서 사용할 수 있습니다. 자세한 내용은 10장을 참조하십시오. REST API REST API는 사용자가 RainMaker 앱과 유사한 자신만의 애플리케이션을 구축하는 데 도움이 됩니다. 자세한 내용은 https://swaggerapis.rainmaker.espressif.com/을 방문하세요.
3장. ESP RainMaker 소개 21

Python API RainMaker SDK와 함께 제공되는 Python 기반의 CLI를 제공하여 스마트폰 기능과 유사한 모든 기능을 구현합니다. Python API에 대한 자세한 내용을 보려면 https://bookc3.espressif.com/rm/python-api-reference를 방문하세요.
Admin CLI Admin CLI는 ESP RainMaker 개인 배포를 위해 더 높은 수준의 액세스 권한을 제공하여 장치 인증서를 대량으로 생성합니다.
3.2.1 서비스 청구
RainMaker 장치와 클라우드 백엔드 간의 모든 통신은 MQTT+TLS를 통해 수행됩니다. ESP RainMaker의 맥락에서 "청구"는 장치가 클라우드 백엔드에 연결하기 위해 청구 서비스로부터 인증서를 얻는 프로세스입니다. 청구 서비스는 공용 RainMaker 서비스에만 적용할 수 있는 반면, 개인 배포의 경우 장치 인증서는 Admin CLI를 통해 대량으로 생성해야 합니다. ESP RainMaker는 세 가지 유형의 청구 서비스를 지원합니다.
장치 자체는 인터넷에 연결한 후 eFuse에 미리 프로그래밍된 비밀 키를 통해 인증서를 가져옵니다. 호스트 기반 청구 인증서는 RainMaker 계정을 사용하여 개발 호스트로부터 얻습니다. 지원 청구 인증서는 프로비저닝 중에 스마트폰 애플리케이션을 통해 획득됩니다.
3.2.2 RainMaker 에이전트
그림 3.3. RainMaker SDK의 구조 RainMaker Agent의 주요 기능은 연결을 제공하고 애플리케이션 계층이 업링크/다운링크 클라우드 데이터를 처리하도록 지원하는 것입니다. RainMaker SDK 22 ESP32-C3 무선 모험: IoT에 대한 종합 가이드를 통해 구축되었습니다.

검증된 ESP-IDF 프레임워크를 기반으로 RTOS, NVS, MQTT 등 ESP-IDF 구성 요소를 사용하여 개발되었습니다. 그림 3.3은 RainMaker SDK의 구조를 보여줍니다.
RainMaker SDK에는 두 가지 주요 기능이 포함되어 있습니다.
연결
나. 장치 인증서를 얻기 위해 청구 서비스에 협력합니다.
ii. 보안 MQTT 프로토콜을 사용하여 클라우드 백엔드에 연결하여 원격 연결을 제공하고 원격 제어, 메시지 보고, 사용자 관리, 장치 관리 등을 구현합니다. 기본적으로 ESP-IDF의 MQTT 구성 요소를 사용하고 다른 인터페이스와 인터페이스하기 위한 추상화 계층을 제공합니다. 프로토콜 스택.
iii. Wi-Fi 연결 및 프로비저닝을 위한 Wi-Fi 프로비저닝 구성 요소, OTA 업그레이드를 위한 esp https ota 구성 요소, 로컬 장치 검색 및 연결을 위한 esp local ctrl 구성 요소를 제공합니다. 이러한 모든 목표는 간단한 구성을 통해 달성할 수 있습니다.
데이터 처리
나. Claiming Service에서 발급한 기기 인증서와 RainMaker 실행 시 필요한 데이터를 기본적으로 nvs flash 구성 요소에서 제공하는 인터페이스를 사용하여 저장하고, 개발자가 직접 사용할 수 있도록 API를 제공합니다.
ii. 콜백 메커니즘을 사용하여 업링크/다운링크 클라우드 데이터를 처리하고 개발자가 쉽게 처리할 수 있도록 애플리케이션 계층에 대한 데이터 차단을 자동으로 해제합니다. 예를 들어amp즉, RainMaker SDK는 IoT 장치를 설명하고 타이밍, 카운트다운, 음성 제어와 같은 기능을 구현하기 위해 TSL 모델을 정의하는 데 필요한 TSL(사물 사양 언어) 데이터 설정을 위한 풍부한 인터페이스를 제공합니다. 타이밍과 같은 기본적인 대화형 기능의 경우 RainMaker SDK는 필요할 때 간단히 활성화할 수 있는 개발이 필요 없는 솔루션을 제공합니다. 그런 다음 RainMaker 에이전트는 데이터를 직접 처리하고 관련 MQTT 주제를 통해 클라우드로 전송하며 콜백 메커니즘을 통해 클라우드 백엔드의 데이터 변경 사항을 피드백합니다.
3.2.3 클라우드 백엔드
클라우드 백엔드는 AWS 서버리스 컴퓨팅을 기반으로 구축되었으며 AWS Cognito(ID 관리 시스템), Amazon API Gateway, AWS Lambda(서버리스 컴퓨팅 서비스), Amazon DynamoDB(NoSQL 데이터베이스), AWS IoT Core(MQTT 액세스를 제공하는 IoT 액세스 코어)를 통해 구현됩니다. 및 규칙 필터링), Amazon Simple Email Service(SES 단순 메일 서비스), Amazon CloudFront(빠른 전송 네트워크), Amazon Simple Queue Service(SQS 메시지 대기열) 및 Amazon S3(버킷 스토리지 서비스). 확장성과 보안을 최적화하는 것이 목표입니다. ESP RainMaker를 사용하면 개발자는 클라우드에 코드를 작성하지 않고도 장치를 관리할 수 있습니다. 기기에서 보고된 메시지는 투명하게 전송됩니다.
3장. ESP RainMaker 소개 23

응용 프로그램 클라이언트 또는 기타 타사 서비스. 표 3.1에는 클라우드 백엔드에서 사용되는 AWS 클라우드 제품 및 기능과 개발 중인 더 많은 제품 및 기능이 나와 있습니다.
표 3.1. 클라우드 백엔드에서 사용되는 AWS 클라우드 제품 및 기능

RainMaker에서 사용하는 AWS 클라우드 제품

기능

AWS 인지

사용자 자격 증명 관리 및 타사 로그인 지원

AWS 람다

클라우드 백엔드의 핵심 비즈니스 로직 구현

Amazon Timestream 시계열 데이터 저장

Amazon DynamoDB 고객의 개인정보 저장

AWS IoT 코어

MQTT 통신 지원

아마존 SES

이메일 전송 서비스 제공

Amazon CloudFront 백엔드 관리 가속화 web사이트 액세스

아마존 SQS

AWS IoT Core에서 메시지 전달

3.2.4 RainMaker 클라이언트
App, CLI와 같은 RainMaker 클라이언트는 REST API를 통해 클라우드 백엔드와 통신합니다. REST API에 대한 자세한 정보와 지침은 Espressif에서 제공하는 Swagger 설명서에서 확인할 수 있습니다. RainMaker의 모바일 애플리케이션 클라이언트는 iOS 및 Android 시스템 모두에서 사용할 수 있습니다. 이를 통해 장치 프로비저닝, 제어 및 공유는 물론 카운트다운 작업 생성 및 활성화, 타사 플랫폼 연결이 가능합니다. 장치에서 보고한 구성에 따라 UI와 아이콘을 자동으로 로드하고 장치 TSL을 완전히 표시할 수 있습니다.
예를 들어ample, RainMaker SDK에서 제공하는 ex에 스마트 조명을 구축한 경우amp파일을 사용하면 프로비저닝이 완료되면 전구 조명의 아이콘과 UI가 자동으로 로드됩니다. 사용자는 인터페이스를 통해 조명의 색상과 밝기를 변경하고 Alexa Smart Home Skill 또는 Google Smart Home Actions를 ESP RainMaker 계정에 연결하여 타사 제어를 수행할 수 있습니다. 그림 3.4는 아이콘과 UI를 보여줍니다.ampAlexa, Google Home 및 ESP RainMaker 앱의 전구 조명 파일.

24 ESP32-C3 무선 모험: IoT에 대한 종합 가이드

(가) 예amp르 – 알렉사

(b) 예amp르 – 구글 홈

(c) 예amp르 – ESP RainMaker
그림 3.4. 예ampAlexa, Google Home 및 ESP RainMaker 앱의 전구 조명 아이콘 및 UI 파일
3.3 실습: ESP RainMaker 개발의 핵심 사항
장치 드라이버 계층이 완성되면 개발자는 RainMaker SDK에서 제공하는 API를 사용하여 TSL 모델 생성 및 다운링크 데이터 처리를 시작할 수 있으며 제품 정의 및 요구 사항에 따라 ESP RainMaker 기본 서비스를 활성화할 수 있습니다.
3장. ESP RainMaker 소개 25

이 책의 섹션 9.4에서는 RainMaker의 LED 스마트 조명 구현에 대해 설명합니다. 디버깅하는 동안 개발자는 RainMaker SDK의 CLI 도구를 사용하여 스마트 조명과 통신할 수 있습니다(또는 Swagger에서 REST API를 호출).
10장에서는 스마트폰 애플리케이션 개발에 REST API를 사용하는 방법을 자세히 설명합니다. LED 스마트 조명의 OTA 업그레이드는 11장에서 다룹니다. 개발자가 ESP Insights 원격 모니터링을 활성화한 경우 ESP RainMaker 관리 백엔드에 ESP Insights 데이터가 표시됩니다. 자세한 내용은 15장에서 설명합니다.
ESP RainMaker는 다음과 같은 방식으로 공용 RainMaker 서버와 다른 개인 배포를 지원합니다.
청구 서비스 개인 배포에서 인증서를 생성하려면 청구 대신 RainMaker Admin CLI를 사용해야 합니다. 공용 서버의 경우 펌웨어 업그레이드를 구현하려면 개발자에게 관리자 권한을 부여해야 하지만 상용 배포에서는 바람직하지 않습니다. 따라서 자체 청구를 위한 별도의 인증 서비스를 제공할 수 없으며, 호스트 기반 또는 지원 청구를 위한 관리자 권한도 제공할 수 없습니다.
전화 앱 비공개 배포에서는 계정 시스템이 상호 운용되지 않도록 애플리케이션을 별도로 구성하고 컴파일해야 합니다.
타사 로그인 및 음성 통합 개발자는 타사 로그인은 물론 Alexa Skill 및 Google Voice Assistant 통합을 활성화하려면 Google 및 Apple 개발자 계정을 통해 별도로 구성해야 합니다.
TIPS 클라우드 배포에 대한 자세한 내용을 보려면 https://customer.rainmaker.espressif를 방문하세요. com.com. 펌웨어 측면에서 공용 서버에서 개인 서버로 마이그레이션하려면 장치 인증서만 교체하면 되므로 마이그레이션 효율성이 크게 향상되고 마이그레이션 및 2차 디버깅 비용이 절감됩니다.
3.4 ESP RainMaker의 특징
ESP RainMaker 기능은 주로 사용자 관리, 최종 사용자 및 관리자의 세 가지 측면을 대상으로 합니다. 달리 명시되지 않는 한 모든 기능은 공용 및 개인 서버 모두에서 지원됩니다.
3.4.1 사용자 관리
사용자 관리 기능을 통해 최종 사용자는 등록, 로그인, 비밀번호 변경, 비밀번호 검색 등을 수행할 수 있습니다.
26 ESP32-C3 무선 모험: IoT에 대한 종합 가이드

등록 및 로그인 RainMaker에서 지원하는 등록 및 로그인 방법은 다음과 같습니다. · 이메일 ID + 비밀번호 · 전화번호 + 비밀번호 · Google 계정 · Apple 계정 · GitHub 계정(공용 서버 전용) · Amazon 계정(개인 서버 전용)
참고 Google/Amazon을 사용하여 가입하면 사용자의 이메일 주소가 RainMaker와 공유됩니다. Apple을 사용하여 가입하면 Apple이 RainMaker 서비스를 위해 특별히 사용자에게 할당하는 더미 주소를 공유합니다. Google, Apple 또는 Amazon 계정으로 처음 로그인하는 사용자의 경우 RainMaker 계정이 자동으로 생성됩니다.
비밀번호 변경 이메일 ID/전화번호 기반 로그인에만 유효합니다. 비밀번호가 변경되면 다른 모든 활성 세션은 로그아웃됩니다. AWS Cognito 동작에 따라 로그아웃된 세션은 최대 1시간 동안 활성 상태를 유지할 수 있습니다.
비밀번호 찾기 이메일 ID/전화번호 기반 로그인에만 유효합니다.
3.4.2 최종 사용자 기능
최종 사용자에게 공개된 기능에는 로컬 및 원격 제어와 모니터링, 예약, 장치 그룹화, 장치 공유, 푸시 알림 및 타사 통합이 포함됩니다.
원격 제어 및 모니터링 · 하나 또는 모든 장치에 대한 구성, 매개변수 값 및 연결 상태를 쿼리합니다. · 단일 또는 다중 장치에 대한 매개변수를 설정합니다.
로컬 제어 및 모니터링 로컬 제어를 위해서는 휴대폰과 장치가 동일한 네트워크에 연결되어 있어야 합니다.
예약 · 사용자는 특정 시간에 특정 작업을 미리 설정했습니다. · 일정을 실행하는 동안 장치에 인터넷 연결이 필요하지 않습니다. · 단일 또는 여러 장치에 대해 한 번 또는 반복(요일 지정).
장치 그룹화 다단계 추상 그룹화 지원 그룹 메타데이터를 사용하여 홈룸 구조를 생성할 수 있습니다.
3장. ESP RainMaker 소개 27

장치 공유 하나 이상의 장치를 한 명 이상의 사용자와 공유할 수 있습니다.
푸시 알림 최종 사용자는 다음과 같은 이벤트에 대해 푸시 알림을 받습니다. · 새 장치 추가/제거 · 클라우드에 연결된 장치 · 클라우드에서 연결 해제된 장치 · 장치 공유 요청 생성/수락/거절 · 장치에서 보고된 경고 메시지
타사 통합 Alexa 및 Google Voice Assistant는 조명, 스위치, 소켓, 팬 및 온도 센서를 포함한 RainMaker 장치를 제어하도록 지원됩니다.
3.4.3 관리 기능
관리자 기능을 통해 관리자는 장치 등록, 장치 그룹화, OTA 업그레이드를 구현하고 다음을 수행할 수 있습니다. view 통계 및 ESP Insights 데이터.
장치 등록 장치 인증서를 생성하고 Admin CLI에 등록합니다(개인 서버만 해당).
장치 그룹화 장치 정보를 기반으로 추상 또는 구조화된 그룹을 만듭니다(개인 서버에만 해당).
OTA(Over-the-Air) 업그레이드 버전 및 모델을 기반으로 펌웨어를 하나 이상의 장치 또는 그룹에 업로드하고 OTA 작업을 모니터링, 취소 또는 보관합니다.
View 통계 View가능한 통계에는 다음이 포함됩니다. · 장치 등록(관리자가 등록한 인증서) · 장치 활성화(처음 연결된 장치) · 사용자 계정 · 사용자-장치 연결
View ESP 인사이트 데이터 ViewESP Insights 데이터에는 다음이 포함됩니다. · 오류, 경고 및 사용자 정의 로그 · 충돌 보고서 및 분석 · 재부팅 이유 · 메모리 사용량, RSSI 등과 같은 메트릭 · 사용자 정의 메트릭 및 변수
28 ESP32-C3 무선 모험: IoT에 대한 종합 가이드

3.5 요약
이 장에서는 공개 RainMaker 배포와 비공개 배포 간의 몇 가지 주요 차이점을 소개했습니다. Espressif가 출시한 비공개 ESP RainMaker 솔루션은 안정성과 확장성이 뛰어납니다. 모든 ESP32 시리즈 칩은 AWS에 연결 및 적용되어 비용이 크게 절감됩니다. 개발자는 AWS 클라우드 제품에 대해 배우지 않고도 프로토타입 검증에 집중할 수 있습니다. 또한 ESP RainMaker의 구현과 기능, 그리고 플랫폼을 활용한 개발을 위한 몇 가지 핵심 사항에 대해 설명했습니다.
스캔하여 Android용 ESP RainMaker를 다운로드하려면 스캔하여 iOS용 ESP RainMaker를 다운로드하세요.
3장. ESP RainMaker 소개 29

30 ESP32-C3 무선 모험: IoT에 대한 종합 가이드

4장 개발 환경 설정
이 장에서는 ESP32-C3의 공식 소프트웨어 개발 프레임워크인 ESP-IDF에 중점을 둡니다. 다양한 운영체제에서 환경을 구성하는 방법을 설명하고, ESP-IDF의 프로젝트 구조와 빌드 시스템, 관련 개발 도구의 사용법을 소개합니다. 그런 다음 ex의 컴파일 및 실행 프로세스를 소개하겠습니다.amp파일 프로젝트에서 각 프로젝트의 출력 로그에 대한 자세한 설명을 제공합니다.tage.
4.1 ESP-IDF 이상view
ESP-IDF(Espressif IoT Development Framework)는 Espressif Technology에서 제공하는 원스톱 IoT 개발 프레임워크입니다. C/C++를 주요 개발 언어로 사용하며 Linux, Mac, Windows 등 주류 운영 체제에서 크로스 컴파일을 지원합니다. 전직amp이 책에 포함된 파일 프로그램은 다음 기능을 제공하는 ESP-IDF를 사용하여 개발되었습니다. · SoC 시스템 수준 드라이버. ESP-IDF에는 ESP32, ESP32-S2, ESP32-C3용 드라이버가 포함되어 있습니다.
그리고 다른 칩. 이러한 드라이버에는 주변 장치 저수준(LL) 라이브러리, 하드웨어 추상화 계층(HAL) 라이브러리, RTOS 지원 및 상위 계층 드라이버 소프트웨어 등이 포함됩니다. · 필수 구성 요소. ESP-IDF에는 IoT 개발에 필요한 기본 구성 요소가 통합되어 있습니다. 여기에는 HTTP 및 MQTT와 같은 다중 네트워크 프로토콜 스택, 동적 주파수 변조를 갖춘 전원 관리 프레임워크, 플래시 암호화 및 보안 부팅 등과 같은 기능이 포함됩니다. · 개발 및 생산 도구. ESP-IDF는 CMake 기반 빌드 시스템, GCC 기반 크로스 컴파일 도구 체인, J 라이브러리 등 개발 및 대량 생산 과정에서 빌드, 플래시, 디버깅을 위해 일반적으로 사용되는 도구를 제공합니다(그림 4.1 참조).TAG OpenOCD 등을 기반으로 한 디버깅 도구입니다. ESP-IDF 코드가 주로 Apache 2.0 오픈 소스 라이선스를 준수한다는 점은 주목할 가치가 있습니다. 사용자는 오픈 소스 라이선스 조건을 준수하면서 제한 없이 개인용 또는 상업용 소프트웨어를 개발할 수 있습니다. 또한 사용자에게는 소스 코드 수정 사항을 오픈 소스로 제공할 의무 없이 영구 특허 라이선스가 무료로 부여됩니다.
31

그림 4.1.

빌드, 플래싱 및 디버그-

개발 및 대량생산을 위한 Ging Tool

4.1.1 ESP-IDF 버전
ESP-IDF 코드는 GitHub에서 오픈 소스 프로젝트로 호스팅됩니다. 현재 v3, v4, v5의 세 가지 주요 버전을 사용할 수 있습니다. 각 주요 버전에는 일반적으로 v4.2, v4.3 등과 같은 다양한 하위 버전이 포함되어 있습니다. Espressif Systems는 출시된 각 하위 버전에 대한 버그 수정 및 보안 패치에 대한 30개월 지원을 보장합니다. 따라서 v4.3.1, v4.2.2 등과 같은 하위 버전 개정판도 정기적으로 릴리스됩니다. 표 4.1은 Espressif 칩에 대한 다양한 ESP-IDF 버전의 지원 상태를 보여줍니다.view stage(사전 지원 제공view 특정 기능이나 문서가 부족한 버전) 또는 공식적으로 지원됩니다.

표 4.1. Espressif 칩에 대한 다양한 ESP-IDF 버전의 지원 상태

시리즈 ESP32 ESP32-S2 ESP32-C3 ESP32-S3 ESP32-C2 ESP32-H2

v4.1 지원

v4.2 지원 지원

v4.3 지원 지원 지원

v4.4 지원 지원 지원 지원
사전view

v5.0 지원 지원 지원 지원 사전 지원view

32 ESP32-C3 무선 모험: IoT에 대한 종합 가이드

주요 버전의 반복에는 프레임워크 구조 조정과 컴파일 시스템 업데이트가 포함되는 경우가 많습니다. 예를 들어amp즉, v3.*에서 v4.*로의 주요 변경 사항은 빌드 시스템이 Make에서 CMake로 점진적으로 마이그레이션되었다는 것입니다. 반면, 마이너 버전의 반복에는 일반적으로 새로운 기능이 추가되거나 새로운 칩에 대한 지원이 수반됩니다.
안정적인 버전과 GitHub 브랜치 간의 관계를 구별하고 이해하는 것이 중요합니다. v*.* 또는 v*.*.*로 표시된 버전은 Espressif의 완전한 내부 테스트를 통과한 안정적인 버전을 나타냅니다. 일단 수정되면 동일한 버전의 코드, 도구 체인 및 릴리스 문서는 변경되지 않습니다. 그러나 GitHub 분기(예: release/v4.3 분기)에서는 종종 매일 코드 커밋이 자주 발생합니다. 따라서 동일한 분기에 있는 두 개의 코드 조각이 다를 수 있으므로 개발자는 그에 따라 코드를 즉시 업데이트해야 합니다.
4.1.2 ESP-IDF Git 워크플로
Espressif는 다음과 같이 설명된 ESP-IDF에 대한 특정 Git 워크플로를 따릅니다.
· 주요 개발 브랜치 역할을 하는 마스터 브랜치에 새로운 변경 사항이 적용됩니다. 마스터 브랜치의 ESP-IDF 버전은 항상 -dev를 전달합니다. tag v4.3-dev와 같이 현재 개발 중임을 나타냅니다. 마스터 브랜치의 변경 사항이 먼저 다시 적용됩니다.viewEspressif의 내부 저장소에서 편집 및 테스트한 후 자동화된 테스트가 완료된 후 GitHub로 푸시됩니다.
· 새 버전이 마스터 브랜치에서 기능 개발을 완료하고 베타 테스트 시작 기준을 충족하면 release/v4.3과 같은 새 브랜치로 전환됩니다. 게다가 이번 신규 지점은 tagv4.3-beta1과 같은 시험판 버전으로 제공됩니다. 개발자는 GitHub 플랫폼을 참조하여 전체 지점 목록에 액세스하고 tags ESP-IDF의 경우. 베타 버전(시험판 버전)에는 여전히 상당수의 알려진 문제가 있을 수 있다는 점에 유의하는 것이 중요합니다. 베타 버전이 지속적인 테스트를 거치면서 버그 수정이 이 버전과 마스터 브랜치 모두에 동시에 추가됩니다. 한편, 마스터 브랜치는 이미 다음 버전을 위한 새로운 기능 개발을 시작했을 수도 있습니다. 테스트가 거의 완료되면 v4.3-rc1과 같은 공식 릴리스의 잠재적 후보임을 나타내는 릴리스 후보(rc) 레이블이 분기에 추가됩니다. 이 시간에tage, 분기는 시험판 버전으로 유지됩니다.
· 주요 버그가 발견되거나 보고되지 않은 경우 시험판 버전은 결국 주 버전 라벨(예: v5.0) 또는 부 버전 라벨(예: v4.3)을 받고 공식 릴리스 버전이 되며 이를 문서화합니다. 릴리스 노트 페이지에서. 이후에 이 버전에서 확인된 모든 버그는 릴리스 분기에서 수정되었습니다. 수동 테스트가 완료되면 브랜치에 버그 수정 버전 라벨(예: v4.3.2)이 할당되며 이는 릴리스 정보 페이지에도 반영됩니다.
4장. 개발 환경 설정 33

4.1.3 적합한 버전 선택
ESP-IDF는 v32 버전부터 ESP3-C4.3를 공식적으로 지원하기 시작했고, 이 책을 집필하는 시점에서는 v4.4가 아직 공식적으로 출시되지 않았기 때문에 이 책에서 사용하는 버전은 개정판인 v4.3.2이다. v4.3의. 그러나 이 책을 읽을 때쯤에는 v4.4 또는 최신 버전이 이미 사용 가능할 수도 있다는 점을 기억하는 것이 중요합니다. 버전을 선택할 때 다음을 권장합니다.
· 초보 개발자의 경우 stable v4.3 버전이나 ex에 맞는 개정 버전을 선택하는 것이 좋습니다.amp이 책에 사용된 le 버전입니다.
· 대량 생산을 위해서는 최신 기술 지원을 받기 위해 최신 안정 버전을 사용하는 것이 좋습니다.
· 새로운 칩을 실험하거나 새로운 제품 기능을 탐색하려는 경우 마스터 브랜치를 사용하세요. 최신 버전에는 모든 최신 기능이 포함되어 있지만 알려지거나 알려지지 않은 버그가 있을 수 있다는 점을 명심하세요.
· 사용 중인 안정 버전에 원하는 새 기능이 포함되어 있지 않고 마스터 분기와 관련된 위험을 최소화하려는 경우 release/v4.4 분기와 같은 해당 릴리스 분기 사용을 고려하십시오. Espressif의 GitHub 저장소는 먼저 release/v4.4 분기를 생성한 다음 모든 기능 개발 및 테스트를 완료한 후 이 분기의 특정 기록 스냅샷을 기반으로 안정적인 v4.4 버전을 릴리스합니다.
4.1.4 이상view ESP-IDF SDK 디렉토리
ESP-IDF SDK는 esp-idf와 .espressif라는 두 개의 주요 디렉터리로 구성됩니다. 전자에는 ESP-IDF 저장소의 소스 코드가 포함되어 있습니다. files 및 컴파일 스크립트를 저장하는 반면, 후자는 주로 컴파일 도구 체인 및 기타 소프트웨어를 저장합니다. 이 두 디렉토리에 익숙해지면 개발자가 사용 가능한 리소스를 더 잘 활용하고 개발 프로세스 속도를 높이는 데 도움이 됩니다. ESP-IDF의 디렉토리 구조는 다음과 같습니다.
(1) ESP-IDF 저장소 코드 디렉터리(/esp/esp-idf)(그림 4.2 참조).
ㅏ. 구성요소 디렉토리 구성요소
이 핵심 디렉터리에는 ESP-IDF의 수많은 필수 소프트웨어 구성 요소가 통합되어 있습니다. 이 디렉터리 내의 구성 요소에 의존하지 않고는 프로젝트 코드를 컴파일할 수 없습니다. 여기에는 다양한 Espressif 칩에 대한 드라이버 지원이 포함됩니다. 주변기기용 LL 라이브러리 및 HAL 라이브러리 인터페이스부터 상위 레벨 드라이버 및 가상 라이브러리까지 File 시스템(VFS) 레이어 지원을 통해 개발자는 개발 요구 사항에 따라 다양한 수준에서 적절한 구성 요소를 선택할 수 있습니다. ESP-IDF는 또한 TCP/IP, HTTP, MQTT와 같은 여러 표준 네트워크 프로토콜 스택을 지원합니다. Web소켓 등 개발자는 소켓과 같은 친숙한 인터페이스를 활용하여 네트워크 애플리케이션을 구축할 수 있습니다. 구성요소는 포괄적인 기능을 제공합니다.
34 ESP32-C3 무선 모험: IoT에 대한 종합 가이드

그림 4.2. ESP-IDF 저장소 코드 디렉토리
기능이 풍부하고 애플리케이션에 쉽게 통합될 수 있으므로 개발자는 비즈니스 로직에만 집중할 수 있습니다. 몇 가지 일반적인 구성 요소는 다음과 같습니다. · 드라이버: 이 구성 요소에는 다양한 Espressif용 주변 장치 드라이버 프로그램이 포함되어 있습니다.
GPIO, I2C, SPI, UART, LEDC(PWM) 등과 같은 칩 시리즈. 이 구성 요소의 주변 장치 드라이버 프로그램은 칩 독립적인 추상 인터페이스를 제공합니다. 각 주변 장치에는 공통 헤더가 있습니다. file (예: gpio.h), 다양한 칩별 지원 질문을 처리할 필요가 없습니다. · esp_wifi: Wi-Fi는 특별한 주변기기로서 별도의 구성요소로 취급됩니다. 여기에는 다양한 Wi-Fi 드라이버 모드 초기화, 매개변수 구성, 이벤트 처리 등 여러 API가 포함되어 있습니다. 이 구성 요소의 특정 기능은 정적 링크 라이브러리 형태로 제공됩니다. ESP-IDF는 또한 사용 편의성을 위해 포괄적인 드라이버 문서를 제공합니다.
4장. 개발 환경 설정 35

· freertos: 이 구성 요소에는 전체 FreeRTOS 코드가 포함되어 있습니다. Espressif는 이 운영 체제에 대한 포괄적인 지원을 제공하는 것 외에도 듀얼 코어 칩에 대한 지원도 확장했습니다. ESP32 및 ESP32-S3과 같은 듀얼 코어 칩의 경우 사용자는 특정 코어에서 작업을 생성할 수 있습니다.
비. 문서 디렉토리 문서
이 디렉토리에는 시작 가이드, API 참조 매뉴얼, 개발 가이드 등을 포함하여 ESP-IDF 관련 개발 문서가 포함되어 있습니다.
참고 자동화된 도구로 컴파일된 후 이 디렉터리의 내용은 https://docs.espressif.com/projects/esp-idf에 배포됩니다. 문서 대상을 ESP32-C3으로 전환하고 지정된 ESP-IDF 버전을 선택하십시오.
씨. 스크립트 도구 도구
이 디렉터리에는 idf.py와 같이 일반적으로 사용되는 컴파일 프런트엔드 도구와 모니터 터미널 도구 idf_monitor.py 등이 포함되어 있습니다. 하위 디렉터리인 cmake에는 핵심 스크립트도 포함되어 있습니다. fileESP-IDF 컴파일 규칙을 구현하기 위한 기반 역할을 하는 컴파일 시스템입니다. 환경 변수를 추가하면 tools 디렉터리의 내용이 시스템 환경 변수에 추가되어 프로젝트 경로 아래에서 직접 idf.py를 실행할 수 있습니다.
디. 전amp파일 프로그램 디렉토리 examp레
이 디렉토리는 ESP-IDF ex의 방대한 컬렉션으로 구성됩니다.amp구성 요소 API의 사용법을 보여주는 파일 프로그램입니다. 전직amp파일은 해당 범주에 따라 다양한 하위 디렉터리로 구성됩니다.
· get-started: 이 하위 디렉토리에는 엔트리 레벨 ex가 포함되어 있습니다.amp사용자가 기본 사항을 이해하는 데 도움이 되는 "hello world" 및 "blink"와 같은 파일입니다.
· 블루투스 : 블루투스 관련 ex를 찾아보실 수 있습니다.ampBluetooth LE Mesh, Bluetooth LE HID, BluFi 등을 포함한 파일이 여기에 있습니다.
· wifi: 이 하위 디렉토리는 Wi-Fi ex에 중점을 둡니다.ampWi-Fi SoftAP, Wi-Fi Station, espnow와 같은 기본 프로그램과 독점 통신 프로토콜을 포함한 파일ampEspressif의 레. 또한 여러 애플리케이션 계층을 포함합니다.ampIperf, Sniffer, Smart Config 등 Wi-Fi 기반 파일을 제공합니다.
· 주변 장치: 이 광범위한 하위 디렉터리는 주변 장치 이름을 기준으로 수많은 하위 폴더로 더 나뉩니다. 주로 주변 드라이버 ex가 포함되어 있습니다.ampEspressif 칩에 대한 파일(각 ex 포함)amp여러 하위 ex가 포함된 leamp레. 예를 들어 gpio 하위 디렉터리에는 두 개의 ex가 포함되어 있습니다.amp파일: GPIO 및 GPIO 매트릭스 키보드. 전직이 모두 그런 것은 아니라는 점에 유의하는 것이 중요합니다.amp이 디렉토리의 파일은 ESP32-C3에 적용 가능합니다.
36 ESP32-C3 무선 모험: IoT에 대한 종합 가이드

예를 들어amp르, 전ampusb/host의 파일은 USB 호스트 하드웨어(예: ESP32-S3)가 있는 주변 장치에만 적용 가능하며 ESP32-C3에는 이 주변 장치가 없습니다. 컴파일 시스템은 일반적으로 대상을 설정할 때 프롬프트를 제공합니다. 읽어보기 file 각 전 애인의amp파일에는 지원되는 칩이 나열되어 있습니다. · 프로토콜: 이 하위 디렉터리에는 ex가 포함되어 있습니다.ampMQTT, HTTP, HTTP Server, PPPoS, Modbus, mDNS, SNTP를 포함한 다양한 통신 프로토콜에 대한 파일로 광범위한 통신 프로토콜을 포괄합니다.ampIoT 개발에 필요한 파일입니다. · 프로비저닝: 여기서는 프로비저닝 예를 찾을 수 있습니다.ampWi-Fi 프로비저닝, Bluetooth LE 프로비저닝 등 다양한 방법에 대한 파일을 제공합니다. · system: 이 하위 디렉터리에는 시스템 디버깅이 포함됩니다.amp파일(예: 스택 추적, 런타임 추적, 작업 모니터링), 전원 관리 examp파일(예: 다양한 절전 모드, 보조 프로세서) 및 examp콘솔 터미널, 이벤트 루프 및 시스템 타이머와 같은 일반적인 시스템 구성 요소와 관련된 파일입니다. · 저장: 이 하위 디렉터리 내에서 다음을 발견할 수 있습니다.amp모두의 레 file ESP-IDF가 지원하는 시스템 및 저장 메커니즘(예: 플래시, SD 카드 및 기타 저장 매체 읽기 및 쓰기)뿐만 아니라amp비휘발성 스토리지(NVS), FatFS, SPIFFS 및 기타 파일 file 시스템 운영. · 보안: 이 하위 디렉터리에는 ex가 포함되어 있습니다.amp플래시 암호화와 관련된 파일입니다. (2) ESP-IDF 컴파일 도구 체인 디렉터리(/.espressif)(그림 4.3 참조).
그림 4.3. ESP-IDF 컴파일 도구 체인 디렉터리
4장. 개발 환경 설정 37

ㅏ. 소프트웨어 배포 디렉터리 dist
ESP-IDF 도구 체인 및 기타 소프트웨어는 압축된 패키지 형태로 배포됩니다. 설치 프로세스 중에 설치 도구는 먼저 압축된 패키지를 dist 디렉터리에 다운로드한 다음 지정된 디렉터리에 추출합니다. 설치가 완료되면 이 디렉터리의 내용을 안전하게 제거할 수 있습니다.
비. Python 가상 환경 디렉터리 python env
다양한 버전의 ESP-IDF는 특정 버전의 Python 패키지에 의존합니다. 이러한 패키지를 동일한 호스트에 직접 설치하면 패키지 버전 간에 충돌이 발생할 수 있습니다. 이 문제를 해결하기 위해 ESP-IDF는 Python 가상 환경을 활용하여 다양한 패키지 버전을 격리합니다. 이 메커니즘을 통해 개발자는 동일한 호스트에 여러 버전의 ESP-IDF를 설치하고 서로 다른 환경 변수를 가져와 쉽게 전환할 수 있습니다.
씨. ESP-IDF 컴파일 도구 체인 디렉터리 도구
이 디렉터리에는 CMake 도구, Ninja 빌드 도구, 최종 실행 프로그램을 생성하는 gcc 도구 체인 등 ESP-IDF 프로젝트를 컴파일하는 데 필요한 크로스 컴파일 도구가 주로 포함되어 있습니다. 또한 이 디렉토리에는 해당 헤더와 함께 C/C++ 언어의 표준 라이브러리가 들어 있습니다. file에스. 프로그램이 시스템 헤더를 참조하는 경우 file #include 처럼 , 컴파일 도구 체인은 stdio.h를 찾습니다. file 이 디렉토리 내에서.
4.2 ESP-IDF 개발 환경 설정
ESP-IDF 개발 환경은 Windows, Linux, macOS와 같은 주류 운영 체제를 지원합니다. 이 섹션에서는 각 시스템에서 개발 환경을 설정하는 방법을 소개합니다. Linux 시스템에서 ESP32-C3을 개발하는 것이 권장되며, 이에 대해서는 여기에서 자세히 소개하겠습니다. 개발 도구의 유사성으로 인해 여러 플랫폼에 걸쳐 많은 지침을 적용할 수 있습니다. 따라서 이 섹션의 내용을 주의 깊게 읽어 보시기 바랍니다.
참고 이 섹션에 언급된 명령을 제공하는 https://bookc3.espressif.com/esp32c3에서 사용 가능한 온라인 문서를 참조할 수 있습니다.
4.2.1 Linux에서 ESP-IDF 개발 환경 설정
ESP-IDF 개발 환경에 필요한 GNU 개발 및 디버깅 도구는 Linux 시스템에 기본적으로 제공됩니다. 또한 Linux의 명령줄 터미널은 강력하고 사용자 친화적이므로 ESP32-C3 개발에 이상적인 선택입니다. 당신은 할 수 있습니다
38 ESP32-C3 무선 모험: IoT에 대한 종합 가이드

선호하는 Linux 배포판을 선택하세요. 하지만 Ubuntu나 기타 Debian 기반 시스템을 사용하는 것이 좋습니다. 이 섹션에서는 Ubuntu 20.04에서 ESP-IDF 개발 환경을 설정하는 방법에 대한 지침을 제공합니다.
1. 필수 패키지 설치
새 터미널을 열고 다음 명령을 실행하여 필요한 모든 패키지를 설치하십시오. 이 명령은 이미 설치된 패키지를 자동으로 건너뜁니다.
$ sudo apt-get 설치 git wget flex bison gperf python3 python3-pip python3setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
TIPS 위 명령에는 관리자 계정과 비밀번호를 사용해야 합니다. 기본적으로 비밀번호를 입력해도 정보가 표시되지 않습니다. 절차를 계속하려면 "Enter" 키를 누르기만 하면 됩니다.
Git은 ESP-IDF의 핵심 코드 관리 도구입니다. 개발 환경을 성공적으로 설정한 후 git log 명령을 사용하여 다음 작업을 수행할 수 있습니다. view ESP-IDF 생성 이후 모든 코드 변경 사항. 또한 Git은 특정 버전에 해당하는 올바른 도구 체인을 설치하는 데 필요한 버전 정보를 확인하기 위해 ESP-IDF에서도 사용됩니다. Git과 함께 다른 중요한 시스템 도구로는 Python이 있습니다. ESP-IDF에는 Python으로 작성된 수많은 자동화 스크립트가 통합되어 있습니다. CMake, Ninja-build 및 Ccache와 같은 도구는 C/C++ 프로젝트에서 널리 사용되며 ESP-IDF에서 기본 코드 컴파일 및 빌드 도구 역할을 합니다. libusb-1.0-0 및 dfu-util은 USB 직렬 통신 및 펌웨어 굽기에 사용되는 주요 드라이버입니다. 소프트웨어 패키지가 설치되면 apt show를 사용할 수 있습니다. 각 패키지에 대한 자세한 설명을 얻는 명령입니다. 예를 들어amp파일에서 apt show git을 사용하여 Git 도구에 대한 설명 정보를 인쇄합니다.
Q: Python 버전이 지원되지 않으면 어떻게 해야 합니까? A: ESP-IDF v4.3에는 v3.6 이상의 Python 버전이 필요합니다. 이전 버전의 Ubuntu의 경우 상위 버전의 Python을 수동으로 다운로드하여 설치하고 Python3을 기본 Python 환경으로 설정하세요. update-alternatives python 키워드를 검색하면 자세한 지침을 찾을 수 있습니다.
2. ESP-IDF 저장소 코드 다운로드
터미널을 열고 mkdir 명령을 사용하여 홈 디렉터리에 esp라는 폴더를 만듭니다. 원하는 경우 폴더에 다른 이름을 선택할 수 있습니다. cd 명령을 사용하여 폴더를 입력하십시오.
4장. 개발 환경 설정 39

$ mkdir -p /esp $ cd /esp
아래와 같이 git clone 명령을 사용하여 ESP-IDF 저장소 코드를 다운로드합니다.
$ git clone -b v4.3.2 –재귀 https://github.com/espressif/esp-idf.git
위 명령에서 -b v4.3.2 매개변수는 다운로드할 버전(이 경우 버전 4.3.2)을 지정합니다. –recursive 매개변수는 ESP-IDF의 모든 하위 저장소가 반복적으로 다운로드되도록 보장합니다. 하위 저장소에 대한 정보는 .gitmodules에서 찾을 수 있습니다. file.
3. ESP-IDF 개발 도구 체인 설치
Espressif는 도구 체인을 다운로드하고 설치하기 위한 자동화된 스크립트 install.sh를 제공합니다. 이 스크립트는 현재 ESP-IDF 버전과 운영 체제 환경을 확인한 다음 적절한 버전의 Python 도구 패키지 및 컴파일 도구 체인을 다운로드하여 설치합니다. 도구 체인의 기본 설치 경로는 /.espressif입니다. esp-idf 디렉토리로 이동하여 install.sh를 실행하기만 하면 됩니다.
$ cd /esp/esp-idf $ ./install.sh
도구 체인을 성공적으로 설치하면 터미널에 다음이 표시됩니다.
완료!
이제 ESP-IDF 개발 환경이 성공적으로 설정되었습니다.
4.2.2 Windows에서 ESP-IDF 개발 환경 설정
1. ESP-IDF 도구 설치 프로그램 다운로드
TIPS ESP-IDF 개발 환경은 Windows 10 이상에서 설정하는 것을 권장합니다. https://dl.espressif.com/dl/esp-idf/에서 설치 프로그램을 다운로드할 수 있습니다. 설치 프로그램은 오픈 소스 소프트웨어이기도 하며 소스 코드는 다음과 같습니다. viewed at https: //github.com/espressif/idf-installer.
· 온라인 ESP-IDF 도구 설치 프로그램
이 설치 프로그램은 크기가 약 4MB로 상대적으로 작으며 설치 프로세스 중에 다른 패키지와 코드가 다운로드됩니다. 어드밴스tag온라인 설치 프로그램의 장점은 설치 과정 중 필요에 따라 소프트웨어 패키지와 코드를 다운로드할 수 있을 뿐만 아니라 ESP-IDF의 사용 가능한 모든 릴리스와 GitHub 코드의 최신 분기(예: 마스터 분기)를 설치할 수 있다는 것입니다. . 불이익tage는 설치 과정에서 네트워크 연결이 필요하기 때문에 네트워크 문제로 인해 설치가 실패할 수 있다는 점입니다.
40 ESP32-C3 무선 모험: IoT에 대한 종합 가이드

· 오프라인 ESP-IDF 도구 설치 프로그램 이 설치 프로그램은 크기가 약 1GB로 더 크며 환경 설정에 필요한 모든 소프트웨어 패키지와 코드가 포함되어 있습니다. 주요 이점tag오프라인 설치 프로그램의 장점은 인터넷에 연결되지 않은 컴퓨터에서도 사용할 수 있으며 일반적으로 설치 성공률이 더 높다는 것입니다. 오프라인 설치 프로그램은 v*.* 또는 v*.*.*로 식별되는 ESP-IDF의 안정적인 릴리스만 설치할 수 있다는 점에 유의하세요.
2. 적절한 버전의 설치 프로그램을 다운로드한 후 ESP-IDF 도구 설치 프로그램을 실행합니다(예: ESP-IDF 도구 오프라인 4.3.2 사용).amp파일은 여기), exe를 두 번 클릭하십시오. file ESP-IDF 설치 인터페이스를 시작합니다. 다음은 오프라인 설치 프로그램을 사용하여 ESP-IDF 안정 버전 v4.3.2를 설치하는 방법을 보여줍니다.
(1) 그림 4.4의 “설치 언어 선택” 인터페이스의 드롭다운 목록에서 사용할 언어를 선택합니다.
그림 4.4. “설치 언어 선택” 인터페이스 (2) 언어를 선택한 후 “확인”을 클릭하면 “사용권 계약” 인터페이스가 나타납니다.
(그림 4.5 참조) 설치 라이센스 계약을 주의 깊게 읽어보신 후 “동의함”을 선택하고 “다음”을 클릭하세요.
그림 4.5. “라이센스 계약” 인터페이스 4장. 개발 환경 설정 41

(3) 재view "설치 전 시스템 확인" 인터페이스에서 시스템 구성을 확인합니다(그림 4.6 참조). Windows 버전과 설치된 바이러스 백신 소프트웨어 정보를 확인하세요. 모든 구성 항목이 정상이면 “다음”을 클릭하세요. 그렇지 않은 경우에는 “전체 로그”를 클릭하여 주요 항목에 따른 솔루션을 확인할 수 있습니다.
그림 4.6. “설치 전 시스템 확인” 인터페이스 TIPS
도움이 필요하면 https://github.com/espressif/idf-installer/issues에 로그를 제출할 수 있습니다. (4) ESP-IDF 설치 디렉터리를 선택합니다. 여기에서 다음과 같이 D:/.espressif를 선택합니다.
그림 4.7을 보고 “Next”를 클릭합니다. 여기서 .espressif는 숨겨진 디렉터리입니다. 설치가 완료되면 다음을 수행할 수 있습니다. view 다음을 열어 이 디렉토리의 특정 내용을 확인하세요. file 관리자 및 숨겨진 항목 표시.
그림 4.7. ESP-IDF 설치 디렉터리 선택 42 ESP32-C3 무선 모험: IoT 종합 가이드

(5) 그림 4.8과 같이 설치해야 할 구성요소를 확인합니다. 기본 옵션, 즉 설치를 완료한 후 “다음”을 클릭하는 것을 권장합니다.
그림 4.8. 설치할 구성요소 선택 (6) 설치할 구성요소를 확인하고 “설치”를 클릭하면 자동 설치가 시작됩니다.
그림 4.9와 같이 정지 프로세스. 설치 프로세스는 수십 분 동안 지속될 수 있으며 설치 프로세스의 진행률 표시줄은 그림 4.10에 표시됩니다. 참을성있게 기다려주십시오.
그림 4.9. 설치 준비 (7) 설치가 완료되면 “ESP-IDF 등록”을 확인하는 것이 좋습니다.
바이러스 백신 소프트웨어가 삭제되는 것을 방지하기 위해 Windows Defender 제외로 도구 실행 파일… file에스. 제외 항목을 추가하면 바이러스 백신의 빈번한 검사를 건너뛸 수도 있습니다.
4장. 개발 환경 설정 43

그림 4.10. 설치 진행률 표시줄 소프트웨어는 Windows 시스템의 코드 컴파일 효율성을 크게 향상시킵니다. 그림 4.11과 같이 “Finish”를 클릭하여 개발 환경 설치를 완료합니다. "ESP-IDF PowerShell 환경 실행" 또는 "ESP-IDF 명령 프롬프트 실행"을 선택하도록 선택할 수 있습니다. 설치 후 바로 컴파일 창을 실행하여 개발 환경이 정상적으로 작동하는지 확인하세요.
그림 4.11. 설치 완료 (8) 프로그램 목록에서 설치된 개발 환경(ESP-IDF 4.3 중 하나)을 엽니다.
CMD 또는 ESP-IDF 4.3 PowerShell 터미널(그림 4.12 참조), ESP-IDF 환경 변수는 터미널에서 실행 시 자동으로 추가됩니다. 그 후에는 idf.py 명령을 사용하여 작업할 수 있습니다. 열린 ESP-IDF 4.3 CMD는 그림 4.13에 나와 있습니다. 44 ESP32-C3 무선 모험: IoT에 대한 종합 가이드

그림 4.12. 개발 환경 설치됨
그림 4.13. ESP-IDF 4.3 CMD
4.2.3 Mac에서 ESP-IDF 개발 환경 설정
Mac 시스템에 ESP-IDF 개발 환경을 설치하는 과정은 Linux 시스템과 동일합니다. 저장소 코드를 다운로드하고 도구 체인을 설치하는 명령은 완전히 동일합니다. 종속성 패키지 설치 명령만 약간 다릅니다. 1. 종속성 패키지 설치 터미널을 열고 다음 명령을 실행하여 Python 패키지 관리 도구인 pip를 설치합니다.
% sudo 쉬운 설치 pip
다음 명령을 실행하여 macOS용 패키지 관리 도구인 Homebrew를 설치합니다.
% /bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
다음 명령을 실행하여 필수 종속성 패키지를 설치합니다.
% Brew Python3 설치 cmake ninja ccache dfu-util
2. ESP-IDF 저장소 코드 다운로드 섹션 4.2.1에 제공된 지침에 따라 ESP-IDF 저장소 코드를 다운로드합니다. 단계는 Linux 시스템에서 다운로드하는 단계와 동일합니다.
4장. 개발 환경 설정 45

3. ESP-IDF 개발 도구 체인 설치
ESP-IDF 개발 도구 체인을 설치하려면 섹션 4.2.1에 제공된 지침을 따르십시오. 단계는 Linux 시스템에 설치하는 경우와 동일합니다.
4.2.4 VS 코드 설치
기본적으로 ESP-IDF SDK에는 코드 편집 도구가 포함되어 있지 않습니다(Windows용 최신 ESP-IDF 설치 프로그램은 ESP-IDF Eclipse 설치 옵션을 제공하지만). 원하는 텍스트 편집 도구를 사용하여 코드를 편집한 다음 터미널 명령을 사용하여 컴파일할 수 있습니다.
널리 사용되는 코드 편집 도구 중 하나는 사용자 친화적인 인터페이스를 갖춘 풍부한 기능의 무료 코드 편집기인 VS Code(Visual Studio Code)입니다. 다양한 서비스를 제공합니다 plugins 코드 탐색, 구문 강조, Git 버전 제어 및 터미널 통합과 같은 기능을 제공합니다. 또한 Espressif는 프로젝트 구성 및 디버깅을 단순화하는 VS Code용 Espressif IDF라는 전용 플러그인을 개발했습니다.
터미널에서 code 명령을 사용하여 VS Code에서 현재 폴더를 빠르게 열 수 있습니다. 또는 단축키 Ctrl+를 사용하여 VS Code 내에서 시스템의 기본 터미널 콘솔을 열 수 있습니다.
TIPS ESP32-C3 코드 개발에는 VS Code를 사용하는 것이 좋습니다. https://code.visualstudio.com/에서 최신 버전의 VS Code를 다운로드하여 설치하세요.
4.2.5 타사 개발 환경 소개
주로 C 언어를 사용하는 공식 ESP-IDF 개발 환경 외에도 ESP32-C3은 다른 주류 프로그래밍 언어와 광범위한 타사 개발 환경도 지원합니다. 몇 가지 주목할만한 옵션은 다음과 같습니다.
Arduino: ESP32-C3을 포함한 다양한 마이크로컨트롤러를 지원하는 하드웨어와 소프트웨어 모두를 위한 오픈 소스 플랫폼입니다.
C++ 언어를 사용하며 일반적으로 Arduino 언어라고 하는 단순화되고 표준화된 API를 제공합니다. Arduino는 프로토타입 개발 및 교육 환경에서 널리 사용됩니다. 이는 쉽게 컴파일하고 플래싱할 수 있는 확장 가능한 소프트웨어 패키지와 IDE를 제공합니다.
MicroPython: 임베디드 마이크로컨트롤러 플랫폼에서 실행되도록 설계된 Python 3 언어 인터프리터입니다.
간단한 스크립트 언어를 사용하여 ESP32-C3의 주변 리소스(예: UART, SPI, I2C) 및 통신 기능(예: Wi-Fi 및 Bluetooth LE)에 직접 액세스할 수 있습니다.
46 ESP32-C3 무선 모험: IoT에 대한 종합 가이드

이는 하드웨어 상호 작용을 단순화합니다. Python의 광범위한 수학 연산 라이브러리와 결합된 MicroPython을 사용하면 ESP32-C3에서 복잡한 알고리즘을 구현하여 AI 관련 애플리케이션 개발을 촉진할 수 있습니다. 스크립트 언어로서 반복적인 컴파일이 필요하지 않습니다. 수정이 가능하고 스크립트를 직접 실행할 수 있습니다.
NodeMCU: ESP 시리즈 칩용으로 개발된 LUA 언어 해석기입니다.
ESP 칩의 거의 모든 주변 기능을 지원하며 MicroPython보다 가볍습니다. MicroPython과 유사하게 NodeMCU는 스크립트 언어를 사용하므로 반복적인 컴파일이 필요하지 않습니다.
또한 ESP32-C3은 NuttX 및 Zephyr 운영 체제도 지원합니다. NuttX는 POSIX 호환 인터페이스를 제공하여 애플리케이션 이식성을 향상시키는 실시간 운영 체제입니다. Zephyr는 IoT 애플리케이션을 위해 특별히 설계된 소형 실시간 운영 체제입니다. IoT 개발에 필요한 수많은 소프트웨어 라이브러리가 포함되어 있으며 점차 종합적인 소프트웨어 생태계로 발전하고 있습니다.
이 책에서는 앞서 언급한 개발 환경에 대한 자세한 설치 지침을 제공하지 않습니다. 해당 문서와 지침에 따라 요구 사항에 따라 개발 환경을 설치할 수 있습니다.
4.3 ESP-IDF 컴파일 시스템
4.3.1 컴파일 시스템의 기본 개념
ESP-IDF 프로젝트는 입력 기능과 여러 개의 독립적인 기능 구성 요소를 갖춘 기본 프로그램의 모음입니다. 예를 들어ample, LED 스위치를 제어하는 ​​프로젝트는 주로 엔트리 프로그램 메인과 GPIO를 제어하는 ​​드라이버 컴포넌트로 구성됩니다. LED 원격 제어를 실현하려면 Wi-Fi, TCP/IP 프로토콜 스택 등도 추가해야 합니다.
컴파일 시스템은 실행 파일을 컴파일, 링크 및 생성할 수 있습니다. files(.bin)은 일련의 구축 규칙을 통해 코드를 생성합니다. ESP-IDF v4.0 이상 버전의 컴파일 시스템은 기본적으로 CMake를 기반으로 하며, 컴파일 스크립트 CMakeLists.txt를 사용하여 코드의 컴파일 동작을 제어할 수 있습니다. ESP-IDF 컴파일 시스템은 CMake의 기본 구문을 지원하는 것 외에도 기본 컴파일 규칙 및 CMake 함수 집합을 정의하며 간단한 문으로 컴파일 스크립트를 작성할 수 있습니다.
4.3.2 프로젝트 File 구조
프로젝트는 엔트리 프로그램 메인, 사용자 정의 컴포넌트, file컴파일 스크립트, 구성 등 실행 가능한 애플리케이션을 구축하는 데 필요합니다.
4장. 개발 환경 설정 47

files, 파티션 테이블 등. 프로젝트를 복사하여 전달할 수 있으며 동일한 실행 파일 file 동일한 버전의 ESP-IDF 개발 환경을 사용하는 시스템에서 컴파일하고 생성할 수 있습니다. 일반적인 ESP-IDF 프로젝트 file 구조는 그림 4.14에 나와 있습니다.
그림 4.14. 일반적인 ESP-IDF 프로젝트 file 구조 ESP-IDF는 ESP32, ESP32-S 시리즈, ESP32-C 시리즈, ESP32-H 시리즈 등을 포함하여 Espressif의 여러 IoT 칩을 지원하므로 코드를 컴파일하기 전에 대상을 결정해야 합니다. 대상은 응용 프로그램을 실행하는 하드웨어 장치이자 컴파일 시스템의 빌드 대상입니다. 필요에 따라 프로젝트에 하나 이상의 대상을 지정할 수 있습니다. 예를 들어amp파일에서 idf.py set-target esp32c3 명령을 통해 컴파일 대상을 ESP32-C3으로 설정할 수 있으며, 그 동안 ESP32C3의 기본 매개변수와 컴파일 도구 체인 경로가 로드됩니다. 컴파일 후 ESP32C3에 대한 실행 프로그램이 생성될 수 있습니다. set-target 명령을 다시 실행하여 다른 대상을 설정할 수도 있으며, 그러면 컴파일 시스템이 자동으로 정리 및 재구성됩니다. 구성요소
ESP-IDF의 구성 요소는 컴파일 시스템 내에서 관리되는 모듈식 및 독립 코드 단위입니다. 기본적으로 구성 요소 이름을 나타내는 폴더 이름을 사용하여 폴더로 구성됩니다. 각 구성 요소에는 ESP48-C32 무선 모험: IoT 종합 가이드를 실행하는 자체 컴파일 스크립트가 있습니다.

컴파일 매개변수와 종속성을 지정합니다. 컴파일 프로세스 중에 구성 요소는 별도의 정적 라이브러리(.a)로 컴파일됩니다. files) 결국에는 다른 구성 요소와 결합하여 응용 프로그램을 형성합니다.
ESP-IDF는 운영 체제, 주변 장치 드라이버, 네트워크 프로토콜 스택 등 필수 기능을 구성 요소 형태로 제공합니다. 이러한 구성 요소는 ESP-IDF 루트 디렉터리에 있는 구성 요소 디렉터리에 저장됩니다. 개발자는 이러한 구성 요소를 myProject의 구성 요소 디렉터리에 복사할 필요가 없습니다. 대신 프로젝트의 CMakeLists.txt에서 이러한 구성 요소의 종속성 관계만 지정하면 됩니다. file REQUIRES 또는 PRIV_REQUIRES 지시문을 사용합니다. 컴파일 시스템은 필요한 구성 요소를 자동으로 찾아 컴파일합니다.
따라서 myProject 아래의 구성 요소 디렉터리는 필요하지 않습니다. 이는 타사 라이브러리 또는 사용자 정의 코드일 수 있는 프로젝트의 일부 사용자 정의 구성 요소를 포함하는 데에만 사용됩니다. 또한 구성 요소는 ESP-IDF 이외의 디렉터리나 현재 프로젝트(예: 다른 디렉터리에 저장된 오픈 소스 프로젝트)에서 소싱될 수 있습니다. 이 경우 루트 디렉터리 아래 CMakeLists.txt에 EXTRA_COMPONENT_DIRS 변수를 설정하여 구성 요소의 경로를 추가하기만 하면 됩니다. 이 디렉터리는 동일한 이름을 가진 모든 ESP-IDF 구성 요소를 재정의하여 올바른 구성 요소가 사용되도록 합니다.
Entry 프로그램 main 프로젝트 내 메인 디렉토리는 다음과 같습니다. file 다른 구성 요소(예: 구성 요소 1)와 같은 구조입니다. 하지만 모든 프로젝트에 반드시 존재해야 하는 필수 구성요소라는 점에서 특별한 의미를 갖습니다. 기본 디렉터리에는 프로젝트의 소스 코드와 일반적으로 app_main이라는 사용자 프로그램의 진입점이 포함되어 있습니다. 기본적으로 사용자 프로그램의 실행은 이 진입점에서 시작됩니다. 또한 기본 구성 요소는 검색 경로 내의 모든 구성 요소에 자동으로 종속된다는 점에서 다릅니다. 따라서 CMakeLists.txt의 REQUIRES 또는 PRIV_REQUIRES 지시문을 사용하여 종속성을 명시적으로 나타낼 필요가 없습니다. file.
구성 file 프로젝트의 루트 디렉터리에는 구성이 포함되어 있습니다. file 프로젝트 내의 모든 구성요소에 대한 구성 매개변수가 포함된 sdkconfig라고 합니다. SDK 구성 file 컴파일 시스템에 의해 자동으로 생성되며 idf.py menuconfig 명령으로 수정 및 재생성될 수 있습니다. menuconfig 옵션은 주로 프로젝트의 Kconfig.projbuild와 구성 요소의 Kconfig에서 유래합니다. 구성 요소 개발자는 일반적으로 Kconfig에 구성 항목을 추가하여 구성 요소를 유연하고 구성 가능하게 만듭니다.
빌드 디렉터리 기본적으로 프로젝트 내의 빌드 디렉터리에는 중간 내용이 저장됩니다. files와 fi-
4장. 개발 환경 설정 49

idf.py 빌드 명령으로 생성된 최종 실행 프로그램입니다. 일반적으로 빌드 디렉터리의 내용에 직접 액세스할 필요는 없습니다. ESP-IDF는 idf.py 플래시 명령을 사용하여 컴파일된 바이너리를 자동으로 찾는 등 디렉터리와 상호 작용하기 위한 사전 정의된 명령을 제공합니다. file 지정된 플래시 주소로 플래시하거나 idf.py fullclean 명령을 사용하여 전체 빌드 디렉터리를 정리합니다.
파티션 테이블(partitions.csv) 각 프로젝트에는 플래시의 공간을 분할하고 실행 프로그램의 크기와 시작 주소, 사용자 데이터 공간을 지정하기 위한 파티션 테이블이 필요합니다. idf.py flash 명령 또는 OTA 업그레이드 프로그램은 이 표에 따라 해당 주소로 펌웨어를 플래시합니다. ESP-IDF는 menuconfig에서 선택할 수 있는 partitions_singleapp.csv 및 partitions_two_ota.csv와 같은 여러 기본 파티션 테이블을 구성 요소/partition_table에 제공합니다.
시스템의 기본 파티션 테이블이 프로젝트 요구 사항을 충족할 수 없는 경우 사용자 지정 partitions.csv를 프로젝트 디렉터리에 추가하고 menuconfig에서 선택할 수 있습니다.
4.3.3 컴파일 시스템의 기본 빌드 규칙
동일한 이름을 가진 구성 요소를 재정의하는 규칙 구성 요소 검색 프로세스 중에 컴파일 시스템은 특정 순서를 따릅니다. 먼저 ESP-IDF의 내부 구성 요소를 검색한 다음 사용자 프로젝트의 구성 요소를 찾고 마지막으로 EXTRA_COMPONENT_DIRS에서 구성 요소를 검색합니다. 여러 디렉터리에 동일한 이름을 가진 구성 요소가 포함되어 있는 경우 마지막 디렉터리에 있는 구성 요소가 동일한 이름을 가진 이전 구성 요소를 재정의합니다. 이 규칙을 사용하면 원래 ESP-IDF 코드를 그대로 유지하면서 사용자 프로젝트 내에서 ESP-IDF 구성 요소를 사용자 정의할 수 있습니다.
기본적으로 공통 구성 요소를 포함하는 규칙 섹션 4.3.2에서 언급했듯이 구성 요소는 CMakeLists.txt에서 다른 구성 요소에 대한 종속성을 명시적으로 지정해야 합니다. 그러나 Freertos와 같은 공통 구성 요소는 해당 종속성 관계가 컴파일 스크립트에 명시적으로 정의되지 않은 경우에도 기본적으로 빌드 시스템에 자동으로 포함됩니다. ESP-IDF 공통 구성 요소에는 freertos, Newlib, heap, log, soc, esp_rom, esp_common, xtensa/riscv 및 cxx가 포함됩니다. 이러한 공통 구성 요소를 사용하면 CMakeLists.txt를 작성할 때 반복적인 작업을 방지하고 더 간결하게 만들 수 있습니다.
구성 항목 재정의 규칙 개발자는 기본 구성을 추가하여 기본 구성 매개변수를 추가할 수 있습니다. file 프로젝트에 sdkconfig.defaults라는 이름을 붙였습니다. 예를 들어amp파일, CONFIG_LOG_ 추가
50 ESP32-C3 무선 모험: IoT에 대한 종합 가이드

DEFAULT_LEVEL_NONE = 기본적으로 로그 데이터를 인쇄하지 않도록 UART 인터페이스를 구성할 수 있습니다. 또한 특정 대상에 대해 특정 매개변수를 설정해야 하는 경우 구성 file sdkconfig.defaults.TARGET_NAME이라는 이름을 추가할 수 있습니다. 여기서 TARGET_NAME은 esp32s2, esp32c3 등이 될 수 있습니다. 이러한 구성 files는 컴파일 중에 일반 기본 구성을 사용하여 sdkconfig로 가져옵니다. file sdkconfig.defaults를 먼저 가져온 다음 대상별 구성을 가져옵니다. file, sdkconfig.defaults.esp32c3 등. 동일한 이름의 구성 항목이 있는 경우 후자의 구성 file 전자를 재정의합니다.
4.3.4 컴파일 스크립트 소개
ESP-IDF를 사용하여 프로젝트를 개발할 때 개발자는 소스 코드를 작성해야 할 뿐만 아니라 프로젝트 및 구성 요소에 대한 CMakeLists.txt도 작성해야 합니다. CMakeLists.txt는 텍스트입니다. file, 일련의 컴파일 개체, 컴파일 구성 항목 및 소스 코드의 컴파일 프로세스를 안내하는 명령을 정의하는 컴파일 스크립트라고도 합니다. ESP-IDF v4.3.2의 컴파일 시스템은 CMake를 기반으로 합니다. 기본 CMake 함수 및 명령을 지원하는 것 외에도 일련의 사용자 지정 함수도 정의하므로 컴파일 스크립트를 훨씬 쉽게 작성할 수 있습니다.
ESP-IDF의 컴파일 스크립트에는 주로 프로젝트 컴파일 스크립트와 구성 요소 컴파일 스크립트가 포함됩니다. 프로젝트 루트 디렉터리에 있는 CMakeLists.txt를 프로젝트 컴파일 스크립트라고 하며, 전체 프로젝트의 컴파일 프로세스를 안내합니다. 기본 프로젝트 컴파일 스크립트에는 일반적으로 다음 세 줄이 포함됩니다.
1. cmake_minimum_required(버전 3.5) 2. include($ENV{IDF_PATH}/tools/cmake/project.cmake) 3. 프로젝트(myProject)
그중 cmake_minimum_required(VERSION 3.5)는 첫 번째 줄에 배치되어야 하며, 이는 프로젝트에 필요한 최소 CMake 버전 번호를 나타내는 데 사용됩니다. 최신 버전의 CMake는 일반적으로 이전 버전과 호환되므로 최신 CMake 명령을 사용할 때 호환성을 보장하기 위해 그에 따라 버전 번호를 조정하세요.
include($ENV {IDF_PATH}/tools/cmake/project.cmake)는 섹션 4.3.3에 설명된 컴파일 시스템의 기본 빌드 규칙을 포함하여 ESP-IDF 컴파일 시스템의 사전 정의된 구성 항목과 명령을 가져옵니다. project(myProject)는 프로젝트 자체를 생성하고 해당 이름을 지정합니다. 이 이름은 최종 출력 바이너리로 사용됩니다. file 이름, 즉 myProject.elf 및 myProject.bin.
프로젝트에는 기본 구성 요소를 포함하여 여러 구성 요소가 있을 수 있습니다. 각 구성 요소의 최상위 디렉터리에는 CMakeLists.txt가 포함되어 있습니다. file, 이를 구성요소 컴파일 스크립트라고 합니다. 구성요소 컴파일 스크립트는 주로 구성요소 종속성, 구성 매개변수, 소스 코드를 지정하는 데 사용됩니다. files 및 포함된 헤더 files를 위한
4장. 개발 환경 설정 51

편집. ESP-IDF의 사용자 정의 함수 idf_comComponent_register를 사용하면 구성 요소 컴파일 스크립트에 필요한 최소 코드는 다음과 같습니다.

1. idf_comComponent_register(SRCS “src1.c”

2.

INCLUDE_DIRS "포함"

3.

구성 요소가 필요합니다1)

SRCS 매개변수는 소스 목록을 제공합니다. file구성 요소에 s가 여러 개 있는 경우 공백으로 구분됩니다. file에스. INCLUDE_DIRS 매개변수는 공개 헤더 목록을 제공합니다. file 현재 구성 요소에 의존하는 다른 구성 요소에 대한 포함 검색 경로에 추가될 구성 요소의 디렉터리입니다. REQUIRES 매개변수는 현재 구성요소에 대한 공용 구성요소 종속성을 식별합니다. 구성 요소는 구성 요소 2에 종속된 구성 요소 1와 같이 자신이 의존하는 구성 요소를 명시적으로 명시해야 합니다. 단, 기본적으로 모든 컴포넌트에 종속되는 메인 컴포넌트의 경우 REQUIRES 파라미터를 생략할 수 있습니다.

또한 기본 CMake 명령을 컴파일 스크립트에서 사용할 수도 있습니다. 예를 들어amp파일의 경우 set 명령을 사용하여 set(VARIABLE “VALUE”)와 같은 변수를 설정합니다.

4.3.5 공통 명령 소개
ESP-IDF는 코드 컴파일 과정에서 CMake(프로젝트 구성 도구), Ninja(프로젝트 구축 도구) 및 esptool(플래시 도구)을 사용합니다. 각 도구는 컴파일, 빌드 및 플래시 프로세스에서 서로 다른 역할을 수행하며 다양한 작동 명령도 지원합니다. 사용자 작업을 용이하게 하기 위해 ESP-IDF는 위 명령을 빠르게 호출할 수 있는 통합 프런트 엔드 idf.py를 추가합니다.
idf.py를 사용하기 전에 다음을 확인하세요.
· ESP-IDF의 환경 변수 IDF_PATH가 현재 터미널에 추가되었습니다. · 명령 실행 디렉터리는 프로젝트의 루트 디렉터리로,
프로젝트 컴파일 스크립트 CMakeLists.txt.
idf.py의 일반적인 명령은 다음과 같습니다.
· idf.py –help: 명령 목록과 사용법 지침을 표시합니다. · idf.py 목표 설정 : taidf.py fullcleanrget 컴파일 설정, 예:
교체로 esp32c3으로. · idf.py menuconfig: 터미널 그래픽 구성인 menuconfig 실행
구성 옵션을 선택하거나 수정할 수 있는 도구이며 구성 결과는 sdkconfig에 저장됩니다. file. · idf.py 빌드: 코드 컴파일을 시작합니다. 중간체 files 및 컴파일에 의해 생성된 최종 실행 프로그램은 기본적으로 프로젝트의 빌드 디렉터리에 저장됩니다. 컴파일 프로세스는 증분식입니다. 즉, 소스가 하나만 있는 경우 file 수정되었습니다. 수정된 내용만 file 다음번에 정리하겠습니다.

52 ESP32-C3 무선 모험: IoT에 대한 종합 가이드

· idf.py clean: 중간체 청소 files는 프로젝트 컴파일에 의해 생성됩니다. 전체 프로젝트는 다음 컴파일에서 강제로 컴파일됩니다. CMake 구성과 menuconfig에 의한 구성 수정 사항은 정리 중에 삭제되지 않습니다.
· idf.py fullclean: 모든 CMake 구성 출력을 포함하여 전체 빌드 디렉터리 삭제 file에스. 프로젝트를 다시 빌드할 때 CMake는 프로젝트를 처음부터 구성합니다. 이 명령은 모든 항목을 재귀적으로 삭제합니다. files는 빌드 디렉터리에 있으므로 주의해서 사용하고 프로젝트 구성 file 삭제되지 않습니다.
· idf.py 플래시: 실행 가능한 프로그램 바이너리를 플래시합니다. file 대상 ESP32-C3에 대한 빌드로 생성됩니다. 옵션 -p 그리고 -b 직렬 포트의 장치 이름과 깜박이는 전송 속도를 각각 설정하는 데 사용됩니다. 이 두 옵션을 지정하지 않으면 직렬 포트가 자동으로 감지되고 기본 전송 속도가 사용됩니다.
· idf.py 모니터: 대상 ESP32-C3의 직렬 포트 출력을 표시합니다. -p 옵션을 사용하여 호스트 측 직렬 포트의 장치 이름을 지정할 수 있습니다. 직렬 포트 인쇄 중에 Ctrl+] 키 조합을 눌러 모니터를 종료합니다.
위의 명령은 필요에 따라 결합될 수도 있습니다. 예를 들어amp파일에서 idf.py build flash monitor 명령은 코드 컴파일, 플래시를 수행하고 직렬 포트 모니터를 순차적으로 엽니다.
ESP-IDF 컴파일 시스템에 대해 자세히 알아보려면 https://bookc3.espressif.com/build-system을 방문하세요.
4.4 연습: Ex 컴파일하기amp프로그램 “블링크”
4.4.1 실amp파일 분석
이 섹션에서는 Blink 프로그램을 예로 들어 보겠습니다.amp분석을 하려고 file 실제 프로젝트의 구조와 코딩 규칙을 자세히 설명합니다. Blink 프로그램은 LED 깜박임 효과를 구현하며 프로젝트는 ex 디렉터리에 있습니다.amp소스가 포함된 les/get-started/blink file, 구성 files 및 여러 컴파일 스크립트.
이 책에서 소개하는 스마트 조명 프로젝트는 이 ex를 기반으로 한다.amp르 프로그램. 이후 장에서 점진적으로 기능을 추가하여 최종적으로 완성할 예정입니다.
소스 코드 전체 개발 과정을 보여주기 위해 Blink 프로그램이 esp32c3-iot-projects/device 펌웨어/1 Blink에 복사되었습니다.
블링크 프로젝트의 디렉토리 구조 files는 그림 4.15에 나와 있습니다.
깜박임 프로젝트에는 하나의 기본 디렉터리만 포함되어 있습니다.
4장. 개발 환경 설정 53

그림 4.15. File 깜박임 프로젝트의 디렉토리 구조

섹션 4.3.2에 설명된 대로 포함되어야 합니다. 메인 디렉터리는 주로 사용자 프로그램의 진입점인 app_main() 함수의 구현을 저장하는 데 사용됩니다. 깜박임 프로젝트에는 구성 요소 디렉터리가 포함되지 않습니다.amp파일은 ESP-IDF와 함께 제공되는 구성 요소만 사용하면 되며 추가 구성 요소가 필요하지 않습니다. Blink 프로젝트에 포함된 CMakeLists.txt는 컴파일 프로세스를 안내하는 데 사용되고 Kconfig.projbuild는 이 예제에 대한 구성 항목을 추가하는 데 사용됩니다.ampmenuconfig의 파일 프로그램입니다. 기타 불필요한 files는 코드 컴파일에 영향을 주지 않으므로 여기서는 논의하지 않습니다. 블링크 프로젝트에 대한 자세한 소개 files는 다음과 같습니다.

1. /*blink.c에는 다음 헤더가 포함됩니다. file에스*/

2. #포함

//표준 C 라이브러리 헤더 file

3. #include “freertos/freeRTOS.h” //FreeRTOS 메인 헤더 file

4. #include “freertos/task.h”

//FreeRTOS 작업 헤더 file

5. #include “sdkconfig.h”

//구성 헤더 file kconfig에 의해 생성됨

6. #include “driver/gpio.h”

//GPIO 드라이버 헤더 file

소스 file 깜박임.c에는 일련의 헤더가 포함되어 있습니다. files는 함수 선언에 해당합니다.

tions. ESP-IDF는 일반적으로 표준 라이브러리 헤더를 포함하는 순서를 따릅니다. files, FreeR-

TOS 헤더 files, 드라이버 헤더 files, 기타 구성요소 헤더 files 및 프로젝트 헤더 files.

헤더의 순서 file가 포함되면 최종 컴파일 결과에 영향을 미칠 수 있으므로 다음을 시도하십시오.

기본 규칙을 따르세요. sdkconfig.h가 자동으로 생성된다는 점에 유의하세요.

kconfig에 의해 구성되며 idf.py menuconfig 명령을 통해서만 구성할 수 있습니다.

이 헤더의 직접 수정 file 덮어쓰게 됩니다.

1. /*idf.py menuconfig에서 LED에 해당하는 GPIO를 선택할 수 있으며, menuconfig의 수정 결과는 CONFIG_BLINK의 값이 됩니다.

_GPIO가 변경됩니다. 매크로 정의를 직접 수정할 수도 있습니다.

여기에서 CONFIG_BLINK_GPIO를 고정 값으로 변경합니다.*/ 2. #define BLINK_GPIO CONFIG_BLINK_GPIO

3. app_main 무효(void)

4. {

5.

/*IO를 GPIO 기본 기능으로 구성하고 풀업 모드를 활성화한 다음

6.

입력 및 출력 모드 비활성화*/

7.

gpio_reset_pin(BLINK_GPIO);

54 ESP32-C3 무선 모험: IoT에 대한 종합 가이드

8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. }

/*GPIO를 출력 모드로 설정*/ gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT); 동안(1) {
/*로그 인쇄*/ printf(“LEDn 끄기”); /*LED 끄기(낮은 레벨 출력)*/ gpio_set_level(BLINK_GPIO, 0); /*지연(1000ms)*/ vTaskDelay(1000 / portTICK_PERIOD_MS); printf("LED를 켭니다."); /*LED 켜기(출력 하이 레벨)*/ gpio_set_level(BLINK_GPIO, 1); vTaskDelay(1000 / portTICK_PERIOD_MS); }

Blink ex의 app_main() 함수amp파일 프로그램은 사용자 프로그램의 진입점 역할을 합니다. 매개변수나 반환값이 없는 간단한 함수입니다. 이 함수는 시스템이 로그 직렬 포트 초기화, 단일/듀얼 코어 구성, 워치독 구성과 같은 작업을 포함하는 초기화를 완료한 후에 호출됩니다.

app_main() 함수는 main이라는 작업의 컨텍스트에서 실행됩니다. 이 작업의 스택 크기와 우선 순위는 menuconfig Componentconfig Common ESP-관련에서 조정할 수 있습니다.

LED 깜박임과 같은 간단한 작업의 경우 필요한 모든 코드를 app_main() 함수에서 직접 구현할 수 있습니다. 여기에는 일반적으로 LED에 해당하는 GPIO를 초기화하고 while(1) 루프를 사용하여 LED를 켜고 끄는 작업이 포함됩니다. 또는 FreeRTOS API를 사용하여 LED 깜박임을 처리하는 새 작업을 생성할 수 있습니다. 새 작업이 성공적으로 생성되면 app_main() 함수를 종료할 수 있습니다.

main/CMakeLists.txt의 내용 file주요 구성 요소의 컴파일 프로세스를 안내하는 는 다음과 같습니다.

1. idf_comComponent_register(SRCS “blink.c” INCLUDE_DIRS “.” )

그 중에서 main/CMakeLists.txt는 하나의 컴파일 시스템 함수인 idf_comComponent_register만 호출합니다. 대부분의 다른 구성 요소에 대한 CMakeLists.txt와 유사하게 깜박임.c가 SRCS에 추가되고 소스 fileSRCS에 추가된 s는 컴파일됩니다. 동시에, 헤더 검색 디렉터리로 INCLUDE_DIRS에 CMakeLists.txt가 있는 경로를 나타내는 “.”을 추가해야 합니다. file에스. CMakeLists.txt의 내용은 다음과 같습니다.
1. #v3.5를 현재 프로젝트에서 지원하는 가장 오래된 CMake 버전으로 지정합니다. 2. #v3.5보다 낮은 버전은 컴파일을 계속하기 전에 업그레이드해야 합니다. 3. cmake_minimum_required(VERSION 3.5) 4. #ESP의 기본 CMake 구성을 포함합니다. -IDF 컴파일 시스템

4장. 개발 환경 설정 55

5. include($ENV{IDF_PATH}/tools/cmake/project.cmake) 6. # “blink”라는 프로젝트 생성 7. project(myProject)
그 중 루트 디렉터리에 있는 CMakeLists.txt에는 CMake의 주요 구성인 $ENV{IDF_ PATH}/tools/cmake/project.cmake가 주로 포함되어 있습니다. file ESP-IDF에서 제공. 그것은 사기에 사용됩니다

문서 / 리소스

Espressif Systems ESP32-C3 무선 어드벤처 [PDF 파일] 사용자 가이드
ESP32-C3 무선 어드벤처, ESP32-C3, 무선 어드벤처, 어드벤처

참고문헌

댓글을 남겨주세요

이메일 주소는 공개되지 않습니다. 필수 항목은 표시되어 있습니다. *