본문 바로가기

ESP32

아두이노 Nano ESP32 사용 가이드 4 치트 시트

반응형

 

Arduino Nano ESP32 Cheat Sheet 

 

설치, 핀 레퍼런스, 통신 포트 및 마이크로 컨트롤러 사양을 포함한 Nano ESP32 개발 보드의 기술 요약입니다. 

 

아두이노 나노 ESP32는 ESP32-S3을 기반으로 하는 ESP32 SoC를 메인 마이크로컨트롤러로 탑재한 최초의 아두이노입니다. 이 SoC는 u-blox® NORA-W106 모듈 내부에 있으며 Bluetooth® 및 Wi-Fi® 연결을 모두 제공할 뿐만 아니라 안테나를 내장하고 있습니다. 

 

 

이 문서는 4부분으로 간략하게 구성했습니다. 아래 문서 링크를 참고하세요.

 

아두이노 Nano ESP32 사용 가이드 1 - 모든 정보

아두이노 Nano ESP32 사용 가이드 2 시작하기

아두이노 Nano ESP32 사용 가이드 3 - 회로도

아두이노 Nano ESP32 사용 가이드 4 치트 시트 

 

 

 

Nano ESP32 overview

 

 

이 문서에서는 보드의 기능에 관한 정보와 리소스 링크를 찾을 수 있습니다.

 

이 보드는 많은 ESP32 예제와 즉시 호환되지만 핀아웃이 다를 수 있습니다. 전체 API는 ESP32-S3 API 참조에서 확인할 수 있습니다. 

 

NORA-W106 (ESP32-S3) 

 

 

NORA-W106 module.

 

 

Nano ESP32는 NORA-W106 모듈에 내장된 Espressif의 ESP32-S3 시스템 온 칩(SoC)을 탑재하고 있습니다. ESP32-S3에는 듀얼 코어 마이크로프로세서 Xtensa® 32비트 LX7이 탑재되어 있으며 2.4GHz Wi-Fi® 대역과 Bluetooth® 5를 지원합니다.

 

이 SoC의 작동 전압은 3.3V이며 NORA-W106에는 Bluetooth® 및 Wi-Fi® 연결용 안테나가 내장되어 있습니다.

 

메모리: Nano ESP32에는

 

  • 384kB ROM
  • 512kB SRAM
  • 16MB 플래시(외부, GD25B128EWIGR을 통해 제공)
  • 8MB PSRAM

 

데이터 시트

 

전체 데이터 시트는 아래 링크에서 다운로드 가능한 PDF로 제공됩니다:

Nano ESP32 데이터 시트 다운로드

 

아두이노 ESP32 보드 패키지

 

이 기판은 원래 ESP32 보드 패키지에서 파생된 Arduino ESP32 보드 패키지를 기반으로 하고 있습니다. 보드의 다양한 기능에 액세스할 수 있는 풍부한 예제 세트를 제공하며, IDE를 통해 직접 액세스할 수 있습니다. 

 

 

보드 패키지를 설치하려면 보드 관리자로 이동하여 Nano ESP32를 검색하세요. 보드 패키지 설치에 대한 자세한 지침은 나노 ESP32 시작하기 문서를 참조하세요.

 

ESP32 핀 맵

 

나노 ESP32의 기본 핀은 나노 폼 팩터와 일치하도록 설계되었습니다. 이 핀 매핑은 공식 Arduino ESP32 보드 패키지에서 수행됩니다(바로 위 참조). 아래 핀 맵을 참조하여 물리적 핀이 ESP32와 어떻게 연관되는지 알아보세요: 

 

 

Nano ESP32
D0 GPIO44
D1 GPIO43
D2 GPIO5
D3 GPIO6
D4 GPIO7
D5 GPIO8
D6 GPIO9
D7 GPIO10
D8 GPIO17
D9 GPIO18
D10 GPIO21
D11 GPIO38
D12 GPIO47
D13 GPIO48
A0 GPIO1
A1 GPIO2
A2 GPIO3
A3 GPIO4
A4 GPIO11
A5 GPIO12
A6 GPIO13
A7 GPIO14
BOOT0 GPIO46
BOOT1 GPIO0

 

 

더 나은 시각적 번역을 위해 아래 핀아웃을 참조하세요: 

 

 

 

아두이노 부트로더 모드

 

나노 ESP32에는 아두이노 부트로더 모드라는 기능이 있는데, 이는 보드의 전원이 켜진 상태에서 리셋 버튼을 두 번 눌러 보드를 일종의 복구 모드로 전환할 수 있다는 뜻입니다.

 

이 모드는 원치 않는 동작을 일으키는 스케치를 업로드한 경우 유용합니다. 스케치로 인해 컴퓨터에서 감지할 수 없게 되거나 키보드와 마우스를 장악한 HID 스케치로 인해 컴퓨터를 다시 제어해야 할 수도 있습니다.

 

스케치를 실제로 실행하지 않고도 보드를 켤 수 있습니다. 부트로더 모드로 들어가려면 리셋 버튼을 누른 다음 RGB LED가 깜박이면 다시 버튼을 누릅니다. 녹색 LED가 천천히 깜박이면 부트로더 모드로 성공적으로 진입한 것입니다.

 

첫 번째 한정 생산 배치의 일부 보드는 녹색과 파란색 핀이 뒤바뀐 다른 RGB LED로 조립되었습니다. 여기에서 도움말 센터 문서 전문을 읽어보세요.

 

ROM 부팅 모드

 

일반 부트로더 모드 외에도 Arduino Nano ESP32를 사용하면 ROM 부팅 모드로 들어갈 수 있습니다. 이 모드는 거의 필요하지 않지만 유용할 수 있는 경우가 있는데, 예를 들어

 

  • 이 프로세스에 따라 보드에 이미 있는 Arduino 부트로더를 업데이트할 수 있습니다. 이렇게 하면 나노 ESP32가 다른 ESP32 보드로 잘못 인식되는 문제를 해결할 수 있습니다.
  • 타사 펌웨어로 플래시된 나노 ESP32에 일반 Arduino 스케치를 업로드하는 기능을 복원합니다. 부트로더를 다시 플래시해야 하는 경우 이 도움말 센터 문서의 기본 스케치 단계를 따르세요.

 

나노 ESP32 보드에 로드된 기본 스케치는 아래 코드 스니펫에서 확인할 수 있습니다: 

 

void setup() {
  // put your setup code here, to run once:
  pinMode(LED_RED, OUTPUT);
  pinMode(LED_GREEN, OUTPUT);
  pinMode(LED_BLUE, OUTPUT);
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  digitalWrite(LED_RED, LOW);
  digitalWrite(LED_GREEN, HIGH);
  digitalWrite(LED_BLUE, HIGH);

  delay(1000);

  digitalWrite(LED_BUILTIN, LOW);
  digitalWrite(LED_RED, HIGH);
  digitalWrite(LED_GREEN, LOW);
  digitalWrite(LED_BLUE, HIGH);

  delay(1000);

  digitalWrite(LED_BUILTIN, HIGH);
  digitalWrite(LED_RED, HIGH);
  digitalWrite(LED_GREEN, HIGH);
  digitalWrite(LED_BLUE, LOW);

  delay(1000);
  digitalWrite(LED_BUILTIN, LOW);
}

 

 

마이크로파이썬

 

나노 ESP32는 보드에 쉽게 설치할 수 있는 파이썬®의 마이크로 구현인 마이크로파이썬을 지원합니다. 마이크로파이썬을 시작하려면 나노 ESP32에서 마이크로파이썬을 배우는 전용 강좌인 마이크로파이썬 101을 방문하세요. 이 강좌에서는 시작을 위한 기본 지식과 함께 인기 있는 타사 구성 요소를 위한 다양한 예제를 제공합니다.

 

보드 재설정

 

마이크로파이썬을 설치했지만 기존 Arduino/C++ 프로그래밍으로 돌아가고 싶은 경우, 쉽게 재설정할 수 있습니다. 보드의 RESET 버튼을 두 번 탭하기만 하면 됩니다(버튼은 하나만 있습니다). 보드가 부팅 모드로 전환되고(녹색 불빛이 깜박거려야 함) Arduino IDE에 표시됩니다.

 

Arduino Cloud

 

Nano ESP32는 Arduino Cloud 플랫폼에서 지원됩니다. C++ 라이브러리를 사용하는 "클래식" Arduino를 통해 클라우드에 연결하거나 MicroPython을 통해 연결할 수 있습니다:

 

Arduino Cloud 시작하기(클래식)

MicroPython과 Arduino Cloud

 

API

 

Nano ESP32는 다른 Arduino 보드와 동일한 API를 사용하여 프로그래밍할 수 있습니다(언어 참조 참조). 그러나 ESP32 플랫폼은 표준 Arduino API에서 사용할 수 없는 추가 라이브러리와 내장된 기능을 제공합니다. 자세한 내용은 ESP32-S3 API 참고하세요.

 

주변 장치

 

API ESP32-S3의 주변 장치(예: ADC, I2C, SPI, I2S, RTC)에 대해 자세히 알아보려면 주변 장치 API 섹션을 참조하십시오.

 

절전 모드

 

Nano ESP32는 최소한의 전력을 소비하도록 프로그래밍할 수 있으므로 태양광/배터리 구동 프로젝트와 같은 전력 제약 설계에 적합합니다.

 

ESP32 설명서의 절전 모드 섹션에서는 최소 전력으로 보드를 구성하는 방법을 설명하며, 최대 절전 및 딥 슬립 전력 고려 사항을 소개합니다. 

 

전원 고려 사항

 

 

Nano ESP32 Power Tree.

 

 

Nano ESP32에 전원을 공급하려면 USB-C® 케이블을 사용하거나 VIN 핀을 사용할 수 있습니다. VIN 핀을 사용하는 경우 보드의 MP2322GQH 컨버터가 손상될 수 있으므로 5-18V 범위 내의 전압을 사용하십시오.

 

입력 전압(VIN)

 

USB-C® 커넥터를 사용하는 경우 5V로 전원을 공급해야 합니다.

VIN 핀의 권장 입력 전압은 6-21V입니다.

 

보드를 뒤집어 밑면을 확인하면 "3.3V"라고 표시된 솔더 점퍼를 찾을 수 있습니다. 두 패드 사이의 작은 흔적을 잘라내면 보드에서 스텝다운 컨버터를 분리하게 되고, USB 포트에 연결해도 보드가 더 이상 켜지지 않거나 VIN 핀을 통해 전원을 공급해도 보드가 켜지지 않습니다. 대신 보드의 3.3V 핀에 정확히 3.3V를 직접 공급해야 합니다. 이는 전원에 따라 VIN 핀이나 USB 포트를 통해 전원을 공급하는 것보다 보드에 전원을 공급하는 에너지 효율이 더 높은 방법이 될 수 있습니다. 

 

 

3.3 V Solder Jumper

 

 

작동 전압

 

ESP32-S3 SoC의 내부 작동 전압은 3.3V이며, 이보다 높은 전압을 GPIO 핀에 인가해서는 안 됩니다.

 

5V 핀/VBUS

 

Nano ESP32는 5V 핀이 없는 최초의 보드입니다. 대신 핀의 기능을 더 정확하게 설명하는 VBUS로 대체되었습니다.

 

VBUS는 USB를 통해 전원이 공급될 때마다 5V를 제공합니다. VIN 핀을 통해 전원이 공급되면 비활성화됩니다. 즉, VIN 핀을 통해 보드에 전원을 공급하는 동안에는 보드에서 5V를 얻을 수 없으며 로직 레벨 시프터 또는 외부 5V 전원 공급 장치를 사용해야 합니다.

 

이 조치는 보드의 마이크로 컨트롤러가 실수로 5V를 수신하여 손상되는 것을 방지하기 위한 것입니다.

 

 

Nano ESP32에는 아날로그와 디지털 헤더가 두 개 있습니다. 여기에 나열된 핀은 이전 Nano 폼 팩터 설계를 준수하는 기본 핀입니다. 보드에서 사용할 수 있는 핀은 다음과 같습니다: 

 

Pin Type Funtion
D13/SCK Digital SPI Serial Clock / LED Built in
D12/CIPO Digital SPI Controller In Peripheral Out
D11/COPI Digital SPI Controller Out Peripheral In
D10 Digital GPIO
D9 Digital GPIO
D8 Digital GPIO
D7 Digital GPIO
D6 Digital GPIO
D5 Digital GPIO
D4 Digital GPIO
D3 Digital GPIO
D2 Digital GPIO
D1/RX Digital GPIO 1 / UART Receiver (RX)
D0/TX Digital GPIO 0 / UART Transmitter (TX)
A0 Analog Analog input 0
A1 Analog Analog input 1
A2 Analog Analog input 2
A3 Analog Analog input 3
A4 Analog Analog input 4 / I2C Serial Datal (SDA)
A5 Analog Analog input 5 / I2C Serial Clock (SCL)
A6 Analog Analog input 6
A7 Analog Analog input 7

 

 

ESP32의 유연성 덕분에 모든 핀을 GPIO로 사용할 수 있습니다.

 

디지털

 

Nano ESP32에는 디지털 읽기()를 사용하여 읽거나 디지털 쓰기()를 사용하여 쓸 수 있는 14개의 디지털 핀(D0-D13)이 있습니다. 

 

Pin Type Function
D13/SCK Digital SPI Serial Clock / LED Built in
D12/CIPO Digital SPI Controller In Peripheral Out
D11/COPI Digital SPI Controller Out Peripheral In
D10 Digital GPIO
D9 Digital GPIO & RX1
D8 Digital GPIO & TX1
D7 Digital GPIO
D6 Digital GPIO
D5 Digital GPIO
D4 Digital GPIO
D3 Digital GPIO
D2 Digital GPIO
D0/RX Digital GPIO 0 / UART Receiver (RX0)
D1/TX Digital GPIO 1 / UART Transmitter (TX0)

 

모든 아날로그 핀은 디지털 핀으로도 사용할 수 있지만 그 반대는 불가능합니다.

 

아날로그

 

Nano ESP32에는 8개의 아날로그 입력 핀이 있으며, 2개는 I2C 통신(A4/A5)용으로 예약되어 있습니다. ESP32-S3에는 두 개의 SAR ADC인 ADC1과 ADC2가 내장되어 있으며, 각 ADC는 각각 4개의 채널을 사용합니다. 

 

Pin Type Function ADC channel
A0 Analog Analog input 0 ADC1_CH0
A1 Analog Analog input 1 ADC1_CH1
A2 Analog Analog input 2 ADC1_CH2
A3 Analog Analog input 3 ADC1_CH4
A4 Analog Analog input 4 / I2C Serial Datal (SDA) ADC0_CH0
A5 Analog Analog input 5 / I2C Serial Clock (SCL) ADC0_CH1
A6 Analog Analog input 6 ADC0_CH2
A7 Analog Analog input 7 ADC0_CH3

 

 

ADC2는 Wi-Fi® 통신에도 사용되며 동시에 사용하면 실패할 수 있습니다. 자세한 내용은 아날로그-디지털 컨버터(Espressif 문서 링크)를 참조하세요.

 

PWM

 

펄스 폭 변조(PWM)는 모든 디지털 핀(D0-D13)과 모든 아날로그 핀(A0-A7)에서 지원되며, 출력은 analogWrite() 메서드를 통해 제어됩니다.

 

analogWrite(pin,value);

 

타이머 제한으로 인해 동시에 5개 PWM 신호만 생성할 수 있습니다.

 

I2C

 

 

I2C Pins

 

 

Nano ESP32의 메인 I2C 버스에 사용되는 기본 핀은 다음과 같습니다: 

 

Pin Function Description
A4 SDA I2C Serial Data
A5 SCL I2C Serial Clock

 

I2C 장치를 연결하려면 스케치 상단에 와이어 라이브러리를 포함시켜야 합니다. 

 

#include <Wire.h>

 

void setup() 내에서 라이브러리를 초기화하고 사용하려는 I2C 포트를 초기화해야 합니다. 

 

Wire.begin() //SDA & SDL

 

 

I2C를 통해 연결된 장치에 무언가를 쓰려면 다음 명령을 사용할 수 있습니다: 

 

Wire.beginTransmission(1); //begin transmit to device 1
Wire.write(byte(0x00)); //send instruction byte 
Wire.write(val); //send a value
Wire.endTransmission(); //stop transmit

 

 

두 번째 I2C 버스

 

Nano ESP32에는 Wire1을 통해 액세스하는 두 번째 I2C 버스가 있습니다. 이 버스를 사용하려면 SDA 및 SCL에 대해 두 개의 자유 핀을 설정해야 합니다: 

 

//initializes second I2C bus on pins D4,D5
Wire1.begin(D4, D5); //sda, scl

 

Wire와 Wire1을 동시에 사용할 수 있어 동일한 주소를 공유할 수 있는 장치에서 작업할 때 유용한 기능입니다. 

 

SPI 

 

 

SPI Pins

 

 

Nano ESP32의 SPI 핀은 다음과 같습니다: 

 

Pin Function Description
D10* CS Chip Select
D11 COPI Controller Out, Peripheral In
D12 CIPO Controller In, Peripheral Out
D13 SCK Serial Clock

 

*칩 선택에는 모든 GPIO를 사용할 수 있습니다.

 

다음 예는 SPI를 사용하는 방법을 보여줍니다: 

 

#include <SPI.h>

const int CS = 10;


void setup() {
  pinMode(CS, OUTPUT);

  SPI.begin();

  digitalWrite(CS, LOW);

  SPI.transfer(0x00);
  
  digitalWrite(CS, HIGH);
}

void loop() {
}

 

두 번째 SPI 포트(HSPI)

 

Nano ESP32에는 두 번째 SPI 포트(HSPI)가 있습니다. 이를 사용하려면 SPIClass를 사용하여 객체를 생성하고 특정 핀 세트에서 통신을 초기화해야 합니다.

 

HSPI 포트의 기본 핀은 다음과 같습니다: GPIO14(Sck), GPIO12(CIPO), GPIO13(COPI), GPIO15(CS). 이러한 핀 중 일부는 Nano ESP32에서 액세스할 수 없으므로 수동으로 구성해야 합니다. 아래 코드 예제 상단의 정의를 참조하세요. 

 

//define SPI2 pins manually
//you can also choose any other free pins
#define SPI2_SCK D2
#define SPI2_CIPO D3
#define SPI2_COPI D4
#define SPI2_CS D5

//create SPI2 object
SPIClass SPI2(HSPI);

void setup() {
//initialize SPI communication
  SPI2.begin(SPI2_SCK, SPI2_CIPO, SPI2_COPI, SPI2_CS);
}

 

 

USB 시리얼 및 UART

 

Nano ESP32 보드에는 3개의 하드웨어 시리얼 포트와 USB를 통해 노출되는 포트가 있습니다.

 

  • 시리얼은 USB 포트를 의미합니다.
  • Serial0 보드의 RX/TX 핀(D0, D1)을 통해 액세스할 수 있는 첫 번째 하드웨어 시리얼 포트(UART)를 나타냅니다.
  • Serial1 모든 자유 GPIO에 할당할 수 있는 두 번째 UART 포트입니다.
  • Serial2 역시 모든 자유 GPIO에 할당할 수 있습니다.

 

Serial(Native USB)

 

컴퓨터에 직렬 데이터를 보내는 것은 표준 Serial 객체를 사용하여 수행합니다. 

 

Serial.begin(9600);
Serial.print("hello world");

 

UART를 통해 데이터를 송수신하려면 먼저 void setup() 내에서 전송 속도를 설정해야 합니다. 

 

Serial0(UART)

 

참고: Serial0은 부팅/리셋 시 몇 가지 메시지를 인쇄하는 부트로더/커널과 공유되며, 크래시 발생 시 이 직렬 포트의 FreeRTOS를 통해 크래시 덤프가 인쇄됩니다. 이러한 이유로 간섭을 피하기 위해 Serial1 또는 Serial2 포트를 사용하는 것이 좋습니다(자세히 보기).

 

Nano ESP32의 UART 통신을 위한 기본 핀은 다음과 같습니다: 

 

Pin Function Description
D0 RX Receive Serial Data
D1 TX Transmit Serial Data

 

 

 

Nano ESP32 UART Pins

 

 

UART를 통해 데이터를 송수신하려면 먼저 void setup() 내에서 전송 속도를 설정해야 합니다. UART(RX/TX 핀)를 사용할 때는 Serial0 객체를 사용합니다.

 

Serial0.begin(9600);

 

 

들어오는 데이터를 읽으려면 while loop()를 사용하여 각 문자를 읽고 문자열에 추가할 수 있습니다.

 

while(Serial0.available()){
    delay(2);
    char c = Serial0.read();
    incoming += c;
  }

 

그리고 무언가를 쓰려면 다음 명령을 사용할 수 있습니다:

 

Serial0.write("Hello world!");

 

 

Serial1 & Serial2 (UART)

 

Nano ESP32에는 사전 정의된 핀이 없는 2개의 추가 하드웨어 직렬 포트가 있으며, 모든 자유 GPIO에 연결할 수 있습니다. 따라서 이를 사용하려면 TX 및 RX 핀을 수동으로 할당해야 합니다.

 

Serial1 및 Serial2를 사용하려면 프로그램의 setup() 함수에서 이를 초기화해야 합니다:

 

//initialization
Serial1.begin(9600, SERIAL_8N1, RX1PIN, TX1PIN);
Serial2.begin(9600, SERIAL_8N1, RX2PIN, TX2PIN);

//usage
Serial1.write("Hello world!");
Serial2.write("Hello world!");

 

 

  • RXPIN과 TXPIN을 할당하려는 GPIO(예: D4, D5)로 바꿉니다.
  • 그런 다음 Serial1.write() 및 Serial1.read() 등의 명령을 사용할 수 있습니다.

 

SERIAL_8N1 파라미터는 직렬 통신을 위한 구성입니다.

 

  • 8 = 데이터 워드 길이(8비트). 5,6,7비트로 변경 가능.
  • N = 패리티(이 경우 "없음").
  • 1 = 정지 비트, 사용 가능한 다른 옵션은 2입니다.

 

I2S

 

인터-IC 사운드(I2S 또는 IIS) 프로토콜은 다양한 구성(필립스 모드, PDM, ADC/DAC)의 디지털 오디오 장치를 연결하는 데 사용됩니다. I2S의 기본 핀 구성은 다음과 같습니다: 

 

PinDefinition

Pin Definition
D7 PIN_I2S_SCK
D8 PIN_I2S_FS
D9 PIN_I2S_SD
D9 PIN_I2S_SD_OUT
D10 PIN_I2S_SD_IN

 

 

기본 핀은 setAllPins() 메서드를 사용하여 변경할 수 있습니다:

 

I2S.setAllPins(sck, fs, sd, sd_out, sd_in)

 

 

라이브러리를 초기화하려면 begin() 메서드를 사용합니다:

 

I2S.begin(mode, sampleRate, bitPerSample)

 

 

데이터를 읽으려면 마지막 샘플을 반환하는 read() 메서드를 사용합니다.

 

I2S.read()

 

 

다양한 모드 및 다양한 오디오 장치에 대한 예제는 보드 패키지의 예제 > I2S에서 확인할 수 있습니다.

 

추가 자료: I2S API 문서(Espressif)

I2S 참조(Espressif)

 

듀얼 코어

 

ESP32-S3은 2개의 코어에서 코드를 개별적으로 실행할 수 있는 듀얼 코어 XTensa LX7을 기반으로 합니다. 이는 각 코어에서 실행되는 작업을 설정하여(void loop()가 구현되는 방식과 유사하게) FreeRTOS를 통해 활성화할 수 있습니다. 사용 가능한 코어는 0과 1입니다.

 

아래 예제는 Arduino ESP32 보드 패키지에 있는 BasicMultiThreading 예제의 수정 버전으로,

 

  • 특정 코어(0)에서 하나의 작업을 사용하여 LED를 깜박이고,
  • 특정 코어(1)에서 두 번째 작업을 사용하여 아날로그 핀을 읽는 두 가지 일반적인 작업을 동시에 사용하는 방법을 보여줍니다. 

 

/* Basic Multi Threading Arduino Example
   
   Modified 16th October 2023 by Karl Söderby

   Set up two tasks that run on each core of a Nano ESP32 (ESP32-S3 XTensa LX7 MCU),
   one that blinks an LED, one that reads an analog signal.

   These tasks will execute infinitely.

   This example code is in the Public Domain (or CC0 licensed, at your option.)
   Unless required by applicable law or agreed to in writing, this
   software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
   CONDITIONS OF ANY KIND, either express or implied.
*/

// Define the cores
#define CORE_0 0
#define CORE_1 1

#define ANALOG_INPUT_PIN A0 //Specify analog pin
#define LED_BUILTIN 13  // Specify the on which is your LED


int counter = 0;
// Define two tasks for Blink & AnalogRead.
void TaskBlink(void *pvParameters);
void TaskAnalogRead(void *pvParameters);
TaskHandle_t analog_read_task_handle;  // You can (don't have to) use this to be able to manipulate a task from somewhere else.

void setup() {
  Serial.begin(115200);
  uint32_t blink_delay = 1000;  // Delay between changing state on LED pin

  //create task for blinking an LED
  xTaskCreatePinnedToCore(
    TaskBlink, "Task Blink"  // A name just for humans
    ,
    2048  // The stack size can be checked by calling `uxHighWaterMark = uxTaskGetStackHighWaterMark(NULL);`
    ,
    (void *)&blink_delay  // Task parameter which can modify the task behavior. This must be passed as pointer to void.
    ,
    2  // Priority
    ,
    NULL  // Task handle is not used here - simply pass NULL
    ,
    CORE_0  // Core on which the task will run
  );

  //create a task for reading analog signals
  xTaskCreatePinnedToCore(
    TaskAnalogRead, "Analog Read", 2048  // Stack size
    ,
    NULL  // When no parameter is used, simply pass NULL
    ,
    1  // Priority
    ,
    &analog_read_task_handle  // With task handle we will be able to manipulate with this task.
    ,
    CORE_1  // Core on which the task will run
  );
}

void loop() {
  //loop is empty, the tasks are instead looped infinitely
}

void TaskBlink(void *pvParameters) {  // This is a task.
  uint32_t blink_delay = *((uint32_t *)pvParameters);

  pinMode(LED_BUILTIN, OUTPUT);

  for (;;) {  // A Task shall never return or exit.
    counter++;
    digitalWrite(LED_BUILTIN, HIGH);  // turn the LED on (HIGH is the voltage level)

    delay(1000);
    digitalWrite(LED_BUILTIN, LOW);  // turn the LED off by making the voltage LOW

    delay(1000);
    Serial.print("Core ");
    Serial.print(CORE_0);
    Serial.print(": Blink task complete. Times run: ");
    Serial.println(counter);
  }
}

void TaskAnalogRead(void *pvParameters) {  // This is a task.
  (void)pvParameters;

  for (;;) {
    // read the input on analog pin:
    int sensorValue = analogRead(ANALOG_INPUT_PIN);
    // print out the value you read:
    Serial.print("Core ");
    Serial.print(CORE_1);
    Serial.print(": Analog reading task, value is: ");
    Serial.println(sensorValue);
    delay(500);  // 100ms delay
  }
}

 

 

이 예제를 실행할 때 직렬 모니터 도구를 열면 각 코어에서 어떤 일이 발생하는지 확인할 수 있습니다. 

 

Dual core example.

 

  • 태스크는 xTaskCreatePinnedToCore()에서 생성되며,
  • xTaskCreatePinnedToCore() 내부에서 여러 매개 변수, 가장 중요한 것은 어떤 코어와 실행할 함수,
  • 태스크 함수 내부 코드가 무한 루프되는 for (;;){} 문 안에 위치하도록 지정할 수 있습니다.

 

예제에 대한 자세한 설명과 함께 ESP32의 듀얼 코어에 대한 자세한 내용은 기본 멀티 스레딩 예제에서 확인할 수 있습니다.

 

IO 멀티플렉서 및 GPIO 매트릭스

 

ESP32-S3 SoC에는 IO 멀티플렉서(입/출력 멀티플렉서)와 GPIO 매트릭스가 있습니다. IO 멀티플렉서는 데이터 선택기 역할을 하며 다양한 주변 장치를 물리적 핀에 연결할 수 있습니다.

 

ESP32-S3 칩에는 45개의 물리적 GPIO가 있지만 더 많은 디지털 주변 장치가 있습니다. IO 멀티플렉서는 신호를 다른 GPIO로 라우팅하여 특정 핀의 기능을 변경할 수 있는 유연성을 제공합니다. 

 

Peripheral IO MUX

 

이 기술은 잘 알려져 있고 ESP32 보드에 적용되지만, 나노 ESP32에서는 이전 설계와 일관성을 유지하기 위해 I2C, SPI 및 UART 주변 장치에 기본 핀 세트를 사용합니다.

 

예를 들어, 나노 ESP32의 SDA/SCL 핀은 기본적으로 A4/A5에 연결됩니다. 다른 핀 세트를 사용해야 하는 경우 이 핀을 D8, D9 등으로 변경할 수 있습니다. 이는 mux/GPIO 매트릭스를 통해 수행됩니다.

 

핀 재할당

 

아래 링크를 통해 주변 장치 재할당에 대한 자세한 내용을 확인할 수 있습니다:

 

I2C 구성(Espressif 문서 링크)

UART 구성(Espressif 문서 링크)

 

또한 여기에서 Espressif 기술 참조 매뉴얼을 읽을 수 있습니다:

 

IO MUX 및 GPIO 매트릭스(ESP32-S3 기술 참조 매뉴얼)

 

 

Wi-Fi®

 

Nano ESP32에는 ESP32-S3 SoC가 내장된 NORA-W106 모듈이 탑재되어 있습니다. 이 모듈은 2.4GHz 대역을 통한 Wi-Fi® 통신을 지원합니다.

 

보드 패키지와 함께 제공되는 몇 가지 예제를 통해 HTTP 요청, 웹 서버 호스팅, MQTT를 통한 데이터 전송 등의 방법을 확인할 수 있습니다.

 

RGB

 

ESP32에는 LED_RED, LED_GREEN 및 LED_BLUE 핀 이름으로 제어할 수 있는 RGB LED가 탑재되어 있습니다. 이 핀은 보드의 헤더에서 액세스할 수 없으며 RGB LED에만 사용할 수 있습니다.

 

첫 번째 한정 생산 배치의 일부 보드는 녹색과 파란색 핀이 반전된 다른 RGB LED로 조립되었습니다. 여기에서 전체 도움말 센터 문서를 읽어보세요.

 

이를 제어하려면 다음을 사용합니다.

 

digitalWrite(LED_RED, STATE); //red
digitalWrite(LED_GREEN, STATE); //green
digitalWrite(LED_BLUE, STATE); //blue

 

 

이 핀을 활성-로우라고 하는데, 실제로는 LED 중 하나를 켜려면 이와 같이 LOW에 써야 함을 뜻합니다: 

 

digitalWrite(LED_RED, LOW);

 

 

USB HID

 

Nano ESP32는 마우스.move(x,y) 또는 키보드.press('w')를 사용하여 HID 장치를 에뮬레이션할 수 있습니다. 다음은 키보드 및 마우스 사용에 대한 최소한의 예입니다:

 

키보드 예제 

 

#include "USB.h"
#include "USBHIDKeyboard.h"
USBHIDKeyboard Keyboard;

void setup() {
  // put your setup code here, to run once:
  Keyboard.begin();
  USB.begin();
}

void loop() {
  // put your main code here, to run repeatedly:
  Keyboard.print("Hello World");
  delay(500);
}

 

 

마우스 예제 

 

#include "USB.h"
#include "USBHIDMouse.h"
USBHIDMouse Mouse;

void setup() {
  // put your setup code here, to run once:
  Mouse.begin();
  USB.begin();
}

void loop() {
  // put your main code here, to run repeatedly:
  Mouse.move(5, 0, 0); 
  delay(50);
}

 

예제 > USB의 보드 패키지에서 바로 사용할 수 있는 몇 가지 예제도 제공됩니다.

 

보드가 IDE에서 인식되지 않는 경우 아두이노 부트로더 모드로 전환하여 복구할 수 있다는 점을 기억하세요. 

 

 

반응형

더욱 좋은 정보를 제공하겠습니다.~ ^^