esp32同时使用wifi和蓝牙时,通过编译会发现内存不够。

如编译如下程序:

#include <Arduino.h>
#include "WiFi.h"
#include <BluetoothSerial.h>const char *ssid="Xiaomi_6A31";
const char *password="12503811";BluetoothSerial SerialBT;
BaseType_t xreturn=NULL;
QueueHandle_t xQueue=NULL;//连接wifi
void WiFi_Connect()
{// WiFi.softAPConfig(local_IP,gateway,subnet);// WiFi.mode(WIFI_STA);WiFi.begin(ssid, password); //要连接的wifi和密码while (WiFi.status() != WL_CONNECTED){ //这里是阻塞程序,直到连接成功delay(300);Serial.print(".");}Serial.println("WiFi connected");Serial.println("IP address: "); // 打印本地ip地址Serial.println(WiFi.localIP());
}void vBT_task(void *arg){uint8_t i=0;for(;;){if(SerialBT.available()){//蓝牙接收到消息i=(uint8_t)SerialBT.read();xQueueSend(xQueue,&i,0);printf("i=%d\r\n",i);}vTaskDelay(10);}
}void vLED_task(void *arg){uint8_t i=0;for(;;){xQueueReceive(xQueue,&i,portMAX_DELAY);if(i==0)   digitalWrite(2,LOW);else if(i==1)   digitalWrite(2,HIGH);}
}void setup() {// put your setup code here, to run once:pinMode(2,OUTPUT);digitalWrite(2,LOW);Serial.begin(115200);WiFi_Connect();xQueue=xQueueCreate(1,sizeof(uint8_t));//创建队列:长度1,数据大小为1字节SerialBT.begin("sense_long");//蓝牙设备名SerialBT.setPin("1234");   // 蓝牙连接的配对码Serial.println("The device started, now you can pair it with bluetooth!");xreturn=xTaskCreatePinnedToCore(vBT_task,"bluetooth",2048,NULL,1,NULL,0);if(xreturn!=NULL) printf("BT Task create success!\r\n");else              printf("BT Task create failed!\r\n");xreturn=xTaskCreatePinnedToCore(vLED_task,"LED",2048,NULL,2,NULL,1);if(xreturn!=NULL) printf("LED Task create success!\r\n");else              printf("LED Task create failed!\r\n");}void loop() {//delay(10);
}

编译结果:

该程序需要1404165bytes内存(1404165/1024/1024=1.34mb),但是可用内存只有1310720bytes(1310720/1024/1024=1.25mb),显然内存是不够的, 但是我们使用的esp-wroom-32的flash总共有4mb,那我们有没有办法增加用来存储程序的内存呢?答案是肯定的。

esp32内存中有一张分区表,将内存划分成几个不同的区域,用于存储不同的内容,我们只需要对这一张分区表进行修改就能实现我们的目的。

根据路径 C:\Users\pc\.platformio\packages\framework-arduinoespressif32\tools\partitions,打开partitions文件,里面有很多excel表格,这些就是esp32的分区表(在下载platformio时自动下载的)。

其中default.csv就是默认的分区表,我们将其打开。

这里用于存储程序的内存大小为0x140000=1310720bytes,与目前编译环境下的内存相同。

现在我们采用现存的另一分区表huge_app.csv,我们将其打开。

表中用于存储程序的内存为0x300000=3145728bytes。

为了使用该分区表,我们打开paltformio.ini,在其中输入以下命令。

其中命令monitor_speed=115200是用于修改波特率的,命令upload_speed=921600是用于修改下载速度的,大家可以根据需要使用,修改完成后我们进行编译。

此时内存变为我们刚才计算的数值3145728bytes(3145728/1024/1024=3mb),此时内存已经绰绰有余了。

当然我们也可以根据自己的需要来修改分区表,复制一张默认分区表default.csv到工程文件中。

将其文件名修改为mymenset.csv,在此处,我对该分区表进行了如下修改(大家可以根据需要自行修改):

此时内存应为0x180000=1572864bytes,我们再在platformio.ini中进行对应修改。

编译结果如下:

解决esp32同时使用wifi、蓝牙内存不足的情况(基于Arduino框架)相关推荐

  1. ESP32与Xbox手柄的UART通信测试,基于Arduino框架和pyserial+pygame

    ESP32与Xbox手柄的UART通信测试 1. 说明 2. 环境 3. 手柄与PC之间的通信测试 4. python与ESP32的通信测试 5. 手柄与ESP32的通信测试 1. 说明 这个项目的目 ...

  2. ESP32C3基于Arduino框架下的 ESP32 RainMaker开发示例教程

    ESP32C3基于Arduino框架下的 ESP32 RainMaker开发示例教程 ESP RainMaker ESP RainMaker 是乐鑫推出的一个端到端平台.基于该平台,用户无需管理基础设 ...

  3. 【Arduino】TFT LCD显示屏显示gif小电视太空人动图(基于Arduino框架ESP8266/ESP32、TFT_eSPI库、使用python脚本GIF转十六进制文件)

    前言 ​ 之前使用ESP32 来控制TFT屏幕显示动图时,找到现有的工具,需要先将动图gif格式一帧帧转为jpg格式,再将一帧帧的jgp转为hex十六进制格式,整个过程好麻烦.现用python写了脚本 ...

  4. ESP32基于Arduino框架下U8g2驱动I2C OLED 时间显示

    ESP32基于Arduino框架下U8g2驱动I2C OLED时间显示

  5. ESP32基于Arduino框架,SD卡+MAX98357模块+MP3播放器

    ESP32基于Arduino框架,SD卡+MAX98357模块+MP3播放器

  6. ESP32经典蓝牙和BLE的使用 (基于Arduino)

    ESP32蓝牙和BLE简述和基本使用方法 文章目录 ESP32蓝牙和BLE简述和基本使用方法 经典蓝牙串口通信 低功耗蓝牙 BLE (常用) BLE 服务器和客户端通信 经典蓝牙串口通信 #inclu ...

  7. NRF24L01 + ESP32 通信测试,基于PlatformIO+Arduino框架

    1. 说明 最近做四轴的时候使用到了NRF24L01,但是并没有合适的设备来进行测试.所以为了快速测试通信协议,这里使用了基于Arduino框架的ESP32来进行测试.测试的目标是实现两个ESP之间基 ...

  8. Arduino ESP32 WIFI 蓝牙模式触控按键切换

    Arduino ESP32 WIFI &蓝牙模式触控按键切换 相关篇<Arduino ESP32自带触摸传感器功能测试> <ESP32电容式触摸传感器引脚实例> ESP ...

  9. esp32语音控制_评测ESPRESSIF 乐鑫ESP32-WROVER WIFI+蓝牙通用模组

    前言:之前小编也说过国内ESPRESSIF 乐鑫的WIFI方案是目前在物联网中最受欢迎的性价比WiFi解决方案之一,所以今天的主角要说的是ESP32-WROVER-IB WIFI+蓝牙通用模组.它的功 ...

最新文章

  1. JAVA设计模式初探之——装饰者模式
  2. 开头和结尾标记 在不同系统_文本标记的宝藏平台——Docusky
  3. Eclipse+pydev+手动安装
  4. MySQL:为什么用limit时,offset很大会影响性能
  5. 积分上下限无穷_数学分析|第九章 定积分利用等价无穷小量和定积分定义解决数列极限问题总结...
  6. 从飞鸽传书口水仗想到的
  7. pom.xml文件第一行报错_Python文件读写指南
  8. asterisk概述和代码分析
  9. 腾讯网游加速器大升级!5月31日起仅支持国服游戏加速 你用过吗?
  10. 六月总结-工作一年总结
  11. 关键字this、new;apply、call、bind方法的用法
  12. POJ 2195 Going Home(最小费用最大流)题解
  13. 华硕电脑(博主电脑型号为天选FA506IH)Fn组合键屏幕不显示对应操作的解决办法!!
  14. unity学习笔记-uniwebview3的使用以及一些补充(视频问题已解决)
  15. 技术大众化--10款无需编程的App DIY开发工具
  16. 数学建模题目和模型汇总(2000-2019 国赛本科组)
  17. 小程序发布上线流程_小程序如何发布?微信小程序发布流程很简单
  18. 基于JAVA的鲜花店商城平台【数据库设计、源码、开题报告】
  19. java写一个发红包_Java实现微信发红包
  20. 【Python+OpenCV+sklearn+easygui】人脸(口罩)识别+口罩下人脸补全的系统设计

热门文章

  1. 平滑的加权轮询均衡算法
  2. UGC网站的内容审核管理是怎么做的?
  3. VMware Workstation 导入ova,未通过 OVF 规范一致性或虚拟硬件合规性检查
  4. java 利用 wagon 插件 实现自动化部署
  5. 重磅!中国最赚钱的公司,要上市了!
  6. 存储在阿里云的视频在浏览器中直接播放
  7. 如何离开/退出/停用 Python virtualenv
  8. Google三驾马车之GFS
  9. 从一个普通测试人员华丽转身成为架构师的经历分享
  10. 读书笔记之呼吸 [美] 特德·姜