一、前言
最近使用ESP32 WROOM开发语音识别项目时,需要使用阵列麦克风采集信号,并进行切片取出含有语音部分的片段,进而使用base64
编码将语音上传到后端服务器进行识别。
在项目开发时,发现虽然ESP32 WROOM有520KB的SRAM,但是还是无法满足语音识别的需求。
查找资料后,发现ESP32-S3N16R8带有8MB的PSRAM,下面记录ESP32-S3 PSRAM的配置与测试方法。
二、配置方法
ESP32-S3的开发板配置见之前的一篇笔记。
在Arduino IDE中配置完开发板后,还需要手动开启PSRAM功能,否则调用相关函数时会导致ESP32-S3无限重启。
-
打开Arduino IDE
-
选择
项目
-PSRAM
-OPI PSRAM
-
使用以下代码进行测试
#include <Arduino.h>
#include <Ticker.h>
#include <esp_heap_caps.h>
// attach a LED to pPIO 21
#define LED_PIN 21
Ticker blinker;
Ticker toggler;
Ticker changer;
float blinkerPace = 0.1; //seconds
const float togglePeriod = 5; //seconds
void change() {
blinkerPace = 1.5;
}
void blink() {
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
}
void toggle() {
static bool isBlinking = false;
if (isBlinking) {
blinker.detach();
isBlinking = false;
}
else {
blinker.attach(blinkerPace, blink);
isBlinking = true;
}
digitalWrite(LED_PIN, LOW); //make sure LED on on after toggling (pin LOW = led ON)
}
void setup() {
pinMode(LED_PIN, OUTPUT);
toggler.attach(togglePeriod, toggle);
changer.once(30, change);
Serial.begin(115200);
Serial.println("hello esp32");
Serial.println(ESP.getFreeHeap());
Serial.print("befor alloc:");
Serial.println(heap_caps_get_free_size( MALLOC_CAP_SPIRAM ));
void* ptrVal = NULL;
ptrVal = heap_caps_malloc(1000, MALLOC_CAP_SPIRAM);
char* sz_ptr = (char*)ptrVal;
sprintf(sz_ptr, "%s", "hello spi ram..................\n");
Serial.print(sz_ptr);
Serial.print("after alloc:");
Serial.println(heap_caps_get_free_size( MALLOC_CAP_SPIRAM ));
heap_caps_free(ptrVal);
sz_ptr = NULL;
Serial.print("after release:");
Serial.println(heap_caps_get_free_size( MALLOC_CAP_SPIRAM ));
}
void loop() {
}
- 打开
工具
-串口监视器
,使用RST按键重启ESP32-S3 - 观察串口监视器输出
可以看出,使用PSRAM后,RAM扩大到了8M左右