1. ESP32 specification
ESP32 는 ATmega328 베이스의 arduino 보다는 훨씬 많은 성능을 가지고 있습니다.
거기에 더하여 ESP32 자체도 버전이 조금씩 달라, 구입 후 실적용 전에 spec. 을 확인해 보는 것이 중요하다고 합니다.
2. 참조 사이트
내부 스펙에 대해 확인할 수 있는 글을 발견하여 소개된 소스를 실행해 봤습니다.
* mgo-tec電子工作
- https://www.mgo-tec.com/blog-entry-chip-info-esp-wroom-32-esp32.html
* ESP32-WROOM-32
- https://ht-deko.com/arduino/esp-wroom-32.html
위에서 참조한 사이트의 소스를 그냥 실행하니, 동작은 하지만 compile 시 warning 이 뜨더군요.
- https://techtutorialsx.com/2017/12/17/esp32-arduino-getting-the-free-heap/
... //Internal RAM uint32_t getHeapSize(); //total heap size uint32_t getFreeHeap(); //available heap uint32_t getMinFreeHeap(); //lowest level of free heap since boot uint32_t getMaxAllocHeap(); //largest block of heap that can be allocated at once the esp.h file: https://github.com/espressif/arduino-esp32/blob/80c110ece70b179ddfe686e8ee45b6c808779454/cores/esp32/Esp.h ...
다행히 업데이트 된 core library 에서 변경된 API 명령어를 찾을 수 있었습니다.
3. API
ESP32 는, library / API 를 통해 간단하게 컨트롤 할 수 있게 만들어져 있습니다.
자세한 사양을 확인하는 방법도 API 를 통해 확인할 수 있게 되어 있으므로, API 문서만 참고하면 됩니다.
* Miscellaneous System APIs
- https://docs.espressif.com/projects/esp-idf/en/v3.2.3/api-reference/system/system.html
API 사이트가 잘 만들어져 있습니다.
화면의 왼쪽 밑부분의 버전을 클릭하면, 원하는 version 의 API 문서로 옮겨갈 수 있게 되어 있습니다.
제가 사용하고 있는 ESP-IDF 버전이 v3.2.3-14 이므로, API 문서에서 v3.2.3 을 선택해서 확인 했습니다.
4. API - 사용한 명령어
위에서 설명한 Heap Memory 부분을 제외한 내용 입니다.
ESP32 의 CPU 를 확인할 수 있는 명령어 입니다.
CPU 의 모델과 revision, 그리고 CPU core 갯수 까지 확인 할 수 있습니다.
사용하고 있는 ESP-IDF 버전 확인 명령어 입니다.
위에서 잠깐 언급한 EFUSE 확인용 커멘드 입니다.
확인해 보면, 기기의 기본 MAC 주서는 WiFi Station MAC 주소와 동일하다는 것을 알 수 있습니다. WiFi Station MAC 정보는 세상에서 유일하니, 기기의 유일성을 WiFi Station MAC 로 정의해도 문제는 없겠네요.
WiFi / WiFi Software AP / Bluetooth / Ethernet 의 MAC 주소는 다음과 같은 API 로 정보를 확인 할 수 있습니다.
최종 사용된 API 들 입니다.
ESP.getEfuseMac() ESP.getChipRevision() esp_chip_info_t esp_chip_info ESP.getCpuFreqMHz() ESP.getFlashChipSize() ESP.getFlashChipSpeed() esp_get_idf_version() ESP.getHeapSize() ESP.getFreeHeap() ESP.getMinFreeHeap() ESP.getMaxAllocHeap() esp_efuse_mac_get_default() esp_read_mac(array, ESP_MAC_WIFI_STA) esp_read_mac(array, ESP_MAC_WIFI_SOFTAP) esp_read_mac(array, ESP_MAC_BT) esp_read_mac(array, ESP_MAC_ETH)
5. sketch
참조한 사이트와 ESP-IDF v3.2.3 용으로 조금 바꾼 소스 입니다.
void setup(void) { Serial.begin(115200); uint64_t chipid; chipid=ESP.getEfuseMac(); // The chip ID is essentially its MAC address(length: 6 bytes) Serial.printf("ESP32 Chip ID = %04X", (uint16_t)(chipid>>32)); // print High 2 bytes Serial.printf("%08X\n", (uint32_t)chipid); // print Low 4bytes Serial.println("---------------------------------"); Serial.printf("Chip Revision %d\n", ESP.getChipRevision()); esp_chip_info_t chip_info; esp_chip_info(&chip_info); Serial.printf("Number of Core: %d\n", chip_info.cores); Serial.printf("CPU Frequency: %d MHz\n", ESP.getCpuFreqMHz()); Serial.println(); Serial.printf("Flash Chip Size = %d byte\n", ESP.getFlashChipSize()); Serial.printf("Flash Frequency = %d Hz\n", ESP.getFlashChipSpeed()); Serial.println(); Serial.printf("ESP-IDF version = %s\n", esp_get_idf_version()); Serial.println(); Serial.printf("Total Heap Size = %d\n", ESP.getHeapSize()); Serial.printf("Free Heap Size = %d\n", ESP.getFreeHeap()); Serial.printf("Lowest Free Heap Size = %d\n", ESP.getMinFreeHeap()); Serial.printf("Largest Heap Block = %d\n", ESP.getMaxAllocHeap()); Serial.println(); uint8_t mac0[6]; esp_efuse_mac_get_default(mac0); Serial.printf("Default Mac Address = %02X:%02X:%02X:%02X:%02X:%02X\r\n", mac0[0], mac0[1], mac0[2], mac0[3], mac0[4], mac0[5]); uint8_t mac3[6]; esp_read_mac(mac3, ESP_MAC_WIFI_STA); Serial.printf("[Wi-Fi Station] Mac Address = %02X:%02X:%02X:%02X:%02X:%02X\r\n", mac3[0], mac3[1], mac3[2], mac3[3], mac3[4], mac3[5]); uint8_t mac4[7]; esp_read_mac(mac4, ESP_MAC_WIFI_SOFTAP); Serial.printf("[Wi-Fi SoftAP] Mac Address = %02X:%02X:%02X:%02X:%02X:%02X\r\n", mac4[0], mac4[1], mac4[2], mac4[3], mac4[4], mac4[5]); uint8_t mac5[6]; esp_read_mac(mac5, ESP_MAC_BT); Serial.printf("[Bluetooth] Mac Address = %02X:%02X:%02X:%02X:%02X:%02X\r\n", mac5[0], mac5[1], mac5[2], mac5[3], mac5[4], mac5[5]); uint8_t mac6[6]; esp_read_mac(mac6, ESP_MAC_ETH); Serial.printf("[Ethernet] Mac Address = %02X:%02X:%02X:%02X:%02X:%02X\r\n", mac6[0], mac6[1], mac6[2], mac6[3], mac6[4], mac6[5]); } void loop() { }
결과 입니다.
이정도면, 사용되는 ESP32 가 어떤 상황인지 알 수 있을 것 같습니다.
6. RESET
소스를 ESP32 에 처음 업로드 하면, Serial Monitor 에 정보가 표시되지 않습니다.
이럴 때에는 "RESET" 버튼을 누르면 reboot 되면서 진행이 됩니다.
RESET 버튼을 누르고 reboot 이 되면, 부팅 시퀀스를 볼 수 있습니다.
MCU 가 arduino nano 와 완전 다른 차원이다 보니, 기본 스펙 파악도 중요하네요.
'Hardware' 카테고리의 다른 글
Hardware | ESP32 의 internal sensor 확인해 보기 (2) | 2020.04.09 |
---|---|
Hardware | ESP32 의 Dual core 확인해 보기 (2) | 2020.04.08 |
Hardware | ESP32 간단 사용기 (0) | 2020.03.21 |
Hardware | CO2 센서인 MH-Z14A 를 활용해 보자 (2) | 2020.03.18 |
Hardware | Flighradar24 신청에서 설치까지 (5) | 2020.03.08 |