본문 바로가기
HW 프로그래밍/아두이노

ESP32 간단 사용기

by N2info 2020. 9. 16.

SP-01 은, WiFi 모듈로는 초기형이고, 그 이후에 업그레이드 된 모듈들이 많이 출시 되었습니다.

그 다음으로 많이 사용하는 WiFi 모듈은 "ESP32" 인 듯 합니다.

 

 

 

1. ESP32

 

구매합니다.

 

* ESP32 ESP-32 ESP32S ESP-32S CP2102 Wireless WiFi Bluetooth Development Board Micro USB Dual Core Power Amplifier Filter Module
    - https://www.aliexpress.com/item/32928267626.html

 

잘 도착 했습니다.

 

 

 

 

2. 외형

 

Arduino nano 의 경우, MCU 가 ATmega328 였지만, ESP32 는 MCU + WiFi + Bluetooth + ... 가 chip 하나에 모두 들어간 형태 입니다.

 

 

ESP-WROOM-32 라고 적힌 철판 밑에 MCU 가 자리잡고 있을 듯 합니다.

 

 

USB interface 는 Silicon Labs 사의 CP2102 이군요. WiFi 접근에 따로 FTDI 같은 어뎁터를 경유할 필요가 없습니다.

 

 

뒷면에는 ESP32 DEVKIT V1 이라고 적혀 있네요.

 

 

 

3. MCU

 

* ESP32

- https://en.wikipedia.org/wiki/ESP32

 

 

MCU 의 정식 명칭은 "ESP32-DOWDQ6" 라고 확인이 되었습니다. (Arduino IDE 에서 컴파일 할 때 확인 가능)

 

MCU 의 logic diagram 입니다. 몇 가지 재미있는 부분들이 보이네요. 센서 내장이라던지... (센서에 환장한 人)

 

 

이 chip 의 naming 을 통해서도 spec. 을 알 수 있습니다.

 

 

데이터 쉬트 입니다.

 esp32_datasheet_en.pdf

 

간단히 ESP8266 (ESP-01) 과 비교 테이블을 만들어 봤습니다.

|------------------------------------------------------------------------------------|
|                       | ESP8266                     | ESP32                        |
|------------------------------------------------------------------------------------|
| release Year          | 2014                        | 2016                         |
| Processor             | Tensilica L106 32-bit       | Xtensa Dual-core 32-bit LX6  |
|                       | single core micro controller| microprocessor with 600 DMIPS|
| Typical Frequency     | 80 MHz                      | 160 MHz                      |
| Co-processor          | no                          | ULP                          |
| ROM                   | no                          | 448 kB                       |
| SRAM                  | 160kB                       | 520 kB                       |
| RTC RAM               | 768 Bytes                   | 8kB slow + 8kB fast          |
| QSPI flash/SRAM       | up to 1 x 16 MB             | up to 4 x 16 MB              |
| GPIOs                 | 17                          | 36                           |
| Wi-Fi                 | HT20                        | HT40                         |
| Bluetooth             | no                          | Bluetooth 4.2 and BLE        |
| Ethernet              | no                          | 10/100 Mbps                  |
| ADC                   | 10 bit                      | 12 bit                       |
| DAC                   | no                          | 2 x 8 bit                    |
| Touch sensor          | no                          | 10                           |
| Temperature Sensor    | no                          | yes                          |
| Security              | no                          | Secure boot Flash encryption |
|                       |                             | 1024-bit OTP                 |
| Crypto                | no                          | AES, SHA-2, RSA, ECC, RNG    |
| SPI                   | 2                           | 4                            |
| I2C                   | 1 (soft)                    | 2                            |
| I2S                   | 2                           | 2                            |
| UART                  | 2 (1 1/2 actually)          | 3                            |
| ADC                   | 1 (10-bit)                  | 18 (12-bit)                  |
| DAC                   | no                          | 2 (8-bit)                    |
| PWM Pins              | 8 Software                  | 1 Hardware / 16 software     |
| SDMMC                 | no                          | yes                          |
| RMT (remote control)  | no                          | yes                          |
| Temperature sensor    | no                          | yes                          |
| Hall sensor           | no                          | yes                          |
| Low Power Consumption | 20uA                        | 10uA deep sleep              |
| Power supply          | 2.5V to 3.6V                | 2.3V to 3.6V                 |
|------------------------------------------------------------------------------------|

 

생산 업체가 이야기하는 가장 큰 특장점은 아래 5 가지로 정리할 수 있겠습니다.

 

- Dual-core 32-bit microprocessor

- 2.4 GHz Wi-Fi and Bluetooth combo chip
- TSMC low power 40nm lithography technology
- Best power performance and RF performance
- Robustness, versatility and reliability

 

Pin out 정보 입니다. 기존 arduino nano 나 ESP-01 과는 차원이 다른 구성입니다.

 

 

이거 하나면 왠만한거 다 할 수 있겠네요.

 

 

 

4. Arduino IDE - 드라이버 설치


코딩을 하고 동작을 시키려면 Arduino IDE 등을 이용해서 프로그램을 업로드 할 수 있습니다. 기존 arduino 와 완전히 동일하죠.

다만, Arduino IDE 의 기본 기기나 라이브러리에 등록되어 있지 않으므로, 새로이 등록시켜주는 작업이 필요합니다.

 

위에서 잠깐 언급한 대로, USB interface 는 Silicon Labs 의 CP2102 이므로, 해당 드라이버를 설치해 줘야 합니다.

Windows 10 에서는 USB 를 연결하자 마자 알아서 설치해 줍니다.

 

예전에 Serial Adapter 처음 사용할 때, 이 등록절차를 소개한 적이 있습니다. 아래 글을 참고해 주세요.

 

* Hardware | FTDI Serial Adapter 를 사용해 보자
    - https://chocoball.tistory.com/entry/Hardware-FTDI-FT232RL-using

 

드라이버가 정상적으로 설치되면, 아래와 같이 포트가 인식됩니다.

 

 

 

 

5. Arduino IDE - Board Manager

 

Arduino IDE 에서 보드를 등록하고, 관련 라이브러리를 설치해야 합니다.

우선 File > Preferences 로 갑니다.

 

 

Additional Board Manager URLs 에 ESP32 에 관련한 URL 을 등록 합니다.

 

1

https://dl.espressif.com/dl/package_esp32_index.json

 

 

그러면, Tools > Board > Boards Manager 에서 관련된 라이브러리를 설치할 수 있게 됩니다.

 

 

검색 줄에 esp32 라고 검색하면 esp32 by Espressif Systems 가 뜹니다. 인스톨 해 줍니다.

 

 

그러면, Board 선택에서 ESP32 보드가 보이고, 선택할 수 있게 됩니다.

 

 

Upload Speed 나 Flash Frequency 등은 나중에 차차 수정하기로 하고, 아까 CP2102 가 할당된 포트를 지정합니다.

 

 

이제 준비는 끝났습니다.

 

 

 

6. Blink

 

Arduino 의 "Hello World" 라고 할 수 있는 Blink 를 실행해 봅니다.

 

 

File > Examples > 01.Basics > Blink 소스를 업로드 해 줍니다.

/*
  Blink
 
  Turns an LED on for one second, then off for one second, repeatedly.
 
  Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
  it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
  the correct LED pin independent of which board is used.
  If you want to know what pin the on-board LED is connected to on your Arduino
  model, check the Technical Specs of your board at:
  https://www.arduino.cc/en/Main/Products
 
  modified 8 May 2014
  by Scott Fitzgerald
  modified 2 Sep 2016
  by Arturo Guadalupi
  modified 8 Sep 2016
  by Colby Newman
 
  This example code is in the public domain.
 
  http://www.arduino.cc/en/Tutorial/Blink
*/
 
// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}
 
// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

 

Arduino 기기가 아님에도 불구하고, "LED_BUILTIN" 으로 지정하면, breakout board 상의 LED 를 점등시켜 줍니다.

 

 

 

간단하게 성공해버려 조금 허탈한 감이 있습니다.

 

 

 

7. WiFiScan

 

MCU 자체적으로 WiFi 까지 커버하는 SoC 인지라, WiFi 도 동작 하는지 확인해 봅시다.

지금까지의 작업으로 라이브러리 및 Examples 소스도 인스톨 되어 있으니, WiFiScan 이라는 소스를 올려 봤습니다.

 

File > Examples > WiFi > WiFiScan

 

 

ESP-01 을 사용할 때에는, AT command 를 사용해서 직접 컨트롤 했지만, ESP32 는 라이브러리 함수만으로 모든게 컨트롤 가능해 보입니다.

 

 

소스가 엄청 짧습니다.

컴파일 끝나고 ESP32 에 업로드 할 때, ESP32 기기와 관련된 정보를 뿌려줘서 캡춰해 봤습니다.

 

동작 주파수가 240MHz 도 가능하고, 외장 Flash 크기가 4MB 군요!

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

esptool.py v2.6

Serial port COM8

Connecting.....

Chip is ESP32D0WDQ6 (revision 1)

Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None

MAC: 24:6f:28:a1:af:8c

Uploading stub...

Running stub...

Stub running...

Changing baud rate to 921600

Changed.

Configuring flash size...

Auto-detected Flash size: 4MB

Compressed 8192 bytes to 47...

 

Writing at 0x0000e000... (100 %)

Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.0 seconds (effective 5461.3 kbit/s)...

Hash of data verified.

Compressed 15856 bytes to 10276...

 

Writing at 0x00001000... (100 %)

Wrote 15856 bytes (10276 compressed) at 0x00001000 in 0.1 seconds (effective 953.7 kbit/s)...

Hash of data verified.

Compressed 623776 bytes to 372912...

 

Writing at 0x00010000... (4 %)

Writing at 0x00014000... (8 %)

Writing at 0x00018000... (13 %)

Writing at 0x0001c000... (17 %)

Writing at 0x00020000... (21 %)

Writing at 0x00024000... (26 %)

Writing at 0x00028000... (30 %)

Writing at 0x0002c000... (34 %)

Writing at 0x00030000... (39 %)

Writing at 0x00034000... (43 %)

Writing at 0x00038000... (47 %)

Writing at 0x0003c000... (52 %)

Writing at 0x00040000... (56 %)

Writing at 0x00044000... (60 %)

Writing at 0x00048000... (65 %)

Writing at 0x0004c000... (69 %)

Writing at 0x00050000... (73 %)

Writing at 0x00054000... (78 %)

Writing at 0x00058000... (82 %)

Writing at 0x0005c000... (86 %)

Writing at 0x00060000... (91 %)

Writing at 0x00064000... (95 %)

Writing at 0x00068000... (100 %)

Wrote 623776 bytes (372912 compressed) at 0x00010000 in 5.3 seconds (effective 933.3 kbit/s)...

Hash of data verified.

Compressed 3072 bytes to 128...

 

Writing at 0x00008000... (100 %)

Wrote 3072 bytes (128 compressed) at 0x00008000 in 0.0 seconds (effective 2234.2 kbit/s)...

Hash of data verified.

 

Leaving...

Hard resetting via RTS pin...

 

Serial Monitor 로 확인해 보니, 아래와 같이 주변 access point 들을 보여 줍니다. 음... 넘 쉬운데?!!!

 

 

 

 

8. 자, 다음...


Dual-core 에 여러 센서까지 복잡하게 갖춘 ESP32 지만, 강력한 라이브러리로 인하여, 쉽게 이용할 수 있다는 것에 놀랐습니다.

또한, WiFi / Bluetooth 가 MCU 에서 지원하니, 따로 모듈을 연결할 필요가 없어, IoT 구현 시, 회로가 간단해 지겠네요.

 

추가 기능들을 가지고 있으니, 다음 편들에서는 아래 내용들에 대해 확인해 보도록 하겠습니다.

 

 - Dual-core

 - Sleep Modes
 - OTA Updates
 - OTA Web Updater
 - NTP Server
 - Temp Sensor
 - Touch Sensor
 - Hall Sensor



출처: https://chocoball.tistory.com/entry/Hardware-simple-review-ESP32?category=729036 [초코볼의 inside Tech]