解决esp32同时使用wifi、蓝牙内存不足的情况(基于Arduino框架)
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框架)相关推荐
- ESP32与Xbox手柄的UART通信测试,基于Arduino框架和pyserial+pygame
ESP32与Xbox手柄的UART通信测试 1. 说明 2. 环境 3. 手柄与PC之间的通信测试 4. python与ESP32的通信测试 5. 手柄与ESP32的通信测试 1. 说明 这个项目的目 ...
- ESP32C3基于Arduino框架下的 ESP32 RainMaker开发示例教程
ESP32C3基于Arduino框架下的 ESP32 RainMaker开发示例教程 ESP RainMaker ESP RainMaker 是乐鑫推出的一个端到端平台.基于该平台,用户无需管理基础设 ...
- 【Arduino】TFT LCD显示屏显示gif小电视太空人动图(基于Arduino框架ESP8266/ESP32、TFT_eSPI库、使用python脚本GIF转十六进制文件)
前言 之前使用ESP32 来控制TFT屏幕显示动图时,找到现有的工具,需要先将动图gif格式一帧帧转为jpg格式,再将一帧帧的jgp转为hex十六进制格式,整个过程好麻烦.现用python写了脚本 ...
- ESP32基于Arduino框架下U8g2驱动I2C OLED 时间显示
ESP32基于Arduino框架下U8g2驱动I2C OLED时间显示
- ESP32基于Arduino框架,SD卡+MAX98357模块+MP3播放器
ESP32基于Arduino框架,SD卡+MAX98357模块+MP3播放器
- ESP32经典蓝牙和BLE的使用 (基于Arduino)
ESP32蓝牙和BLE简述和基本使用方法 文章目录 ESP32蓝牙和BLE简述和基本使用方法 经典蓝牙串口通信 低功耗蓝牙 BLE (常用) BLE 服务器和客户端通信 经典蓝牙串口通信 #inclu ...
- NRF24L01 + ESP32 通信测试,基于PlatformIO+Arduino框架
1. 说明 最近做四轴的时候使用到了NRF24L01,但是并没有合适的设备来进行测试.所以为了快速测试通信协议,这里使用了基于Arduino框架的ESP32来进行测试.测试的目标是实现两个ESP之间基 ...
- Arduino ESP32 WIFI 蓝牙模式触控按键切换
Arduino ESP32 WIFI &蓝牙模式触控按键切换 相关篇<Arduino ESP32自带触摸传感器功能测试> <ESP32电容式触摸传感器引脚实例> ESP ...
- esp32语音控制_评测ESPRESSIF 乐鑫ESP32-WROVER WIFI+蓝牙通用模组
前言:之前小编也说过国内ESPRESSIF 乐鑫的WIFI方案是目前在物联网中最受欢迎的性价比WiFi解决方案之一,所以今天的主角要说的是ESP32-WROVER-IB WIFI+蓝牙通用模组.它的功 ...
最新文章
- JAVA设计模式初探之——装饰者模式
- 开头和结尾标记 在不同系统_文本标记的宝藏平台——Docusky
- Eclipse+pydev+手动安装
- MySQL:为什么用limit时,offset很大会影响性能
- 积分上下限无穷_数学分析|第九章 定积分利用等价无穷小量和定积分定义解决数列极限问题总结...
- 从飞鸽传书口水仗想到的
- pom.xml文件第一行报错_Python文件读写指南
- asterisk概述和代码分析
- 腾讯网游加速器大升级!5月31日起仅支持国服游戏加速 你用过吗?
- 六月总结-工作一年总结
- 关键字this、new;apply、call、bind方法的用法
- POJ 2195 Going Home(最小费用最大流)题解
- 华硕电脑(博主电脑型号为天选FA506IH)Fn组合键屏幕不显示对应操作的解决办法!!
- unity学习笔记-uniwebview3的使用以及一些补充(视频问题已解决)
- 技术大众化--10款无需编程的App DIY开发工具
- 数学建模题目和模型汇总(2000-2019 国赛本科组)
- 小程序发布上线流程_小程序如何发布?微信小程序发布流程很简单
- 基于JAVA的鲜花店商城平台【数据库设计、源码、开题报告】
- java写一个发红包_Java实现微信发红包
- 【Python+OpenCV+sklearn+easygui】人脸(口罩)识别+口罩下人脸补全的系统设计