일전에 ESP-01 (ESP8266) 을 가지고 IoT 환경을 꾸며 봤습니다.
* Hardware | CO2 센서인 MH-Z14A 를 활용해 보자
- https://chocoball.tistory.com/entry/Hardware-CO2-sensor-MH-Z14A
ESP-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. 을 알 수 있습니다.
데이터 쉬트 입니다.
간단히 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
Additional Board Manager URLs 에 ESP32 에 관련한 URL 을 등록 합니다.
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
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
ESP-01 을 사용할 때에는, AT command 를 사용해서 직접 컨트롤 했지만, ESP32 는 라이브러리 함수만으로 모든게 컨트롤 가능해 보입니다.
소스가 엄청 짧습니다.
컴파일 끝나고 ESP32 에 업로드 할 때, ESP32 기기와 관련된 정보를 뿌려줘서 캡춰해 봤습니다.
동작 주파수가 240MHz 도 가능하고, 외장 Flash 크기가 4MB 군요!
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
'Hardware' 카테고리의 다른 글
Hardware | ESP32 의 Dual core 확인해 보기 (2) | 2020.04.08 |
---|---|
Hardware | ESP32 스펙 확인해 보기 (0) | 2020.03.23 |
Hardware | CO2 센서인 MH-Z14A 를 활용해 보자 (2) | 2020.03.18 |
Hardware | Flighradar24 신청에서 설치까지 (5) | 2020.03.08 |
Hardware | 고장난 Arduino Nano 수리기 (0) | 2020.02.16 |