【ESP32 S3开发】在Arduino IDE中使用PSRAM

一、前言

最近使用ESP32 WROOM开发语音识别项目时,需要使用阵列麦克风采集信号,并进行切片取出含有语音部分的片段,进而使用base64编码将语音上传到后端服务器进行识别。

在项目开发时,发现虽然ESP32 WROOM有520KB的SRAM,但是还是无法满足语音识别的需求。

查找资料后,发现ESP32-S3N16R8带有8MB的PSRAM,下面记录ESP32-S3 PSRAM的配置与测试方法。

二、配置方法

ESP32-S3的开发板配置见之前的一篇笔记

在Arduino IDE中配置完开发板后,还需要手动开启PSRAM功能,否则调用相关函数时会导致ESP32-S3无限重启。

  1. 打开Arduino IDE

  2. 选择项目-PSRAM-OPI PSRAM
    在这里插入图片描述

  3. 使用以下代码进行测试

#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() {
  
}
  1. 打开工具-串口监视器,使用RST按键重启ESP32-S3
  2. 观察串口监视器输出
    在这里插入图片描述
    可以看出,使用PSRAM后,RAM扩大到了8M左右
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值