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. 을 알 수 있습니다.
데이터 쉬트 입니다.
간단히 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]