解决arduino编程错误提示,项目工程过大
又是一个困扰好多天的难题,找了好多资料也没有解决,我们做得是WiFi调通蓝牙,整体的代码思路都没有问题,可就是卡在项目工程过大无法进行,眼看着代码在那却编译无法通过真的很难受啊,一开始想着是库文件占用内存过多,于是开始删减库文件函数,可库文件有很多,而且有的2700多行,从属关系也很多,牵一发而动全身,真的很难修改,没办法,就去找了学长问,整了三个小时,才找到解决办法,其实只需要几步就可以解决,可是没有经验的人遇到的根本都不知道怎么办,所以,写这篇博客既是记录这个问题,也让大家不懂得少走点弯路。
其实很简单的,错误的截图是这样的
我们在安装arduino时开发板信息一般使用得都是BPI-BIT,它没有分区管理功能,初始的内存不足以容纳程序,所以,我们就需要重新选择开发板进行分区
管理
如上图,开发板信息选择esp32 Dev Module,然后重新进行分区,这样即可解决项目工程过大的问题。
存一下蓝牙调通wifi的源代码,有兴趣的可以试试。
#include <BLEDevice.h>
#include <BLE2902.h>
#include <WiFi.h>
BLECharacteristic *pCharacteristic;
bool deviceConnected = false;
uint8_t txValue = 0;
long lastMsg = 0;//存放时间的变量
String rxload="Black";
int temp1 = 1;
#define SERVICE_UUID "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" // UART service UUID UUID码,蓝牙的唯一通用识别码
#define CHARACTERISTIC_UUID_RX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E"
#define CHARACTERISTIC_UUID_TX "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"
const char* ssid = "123456";
const char* password = "66666666";
class MyServerCallbacks: public BLEServerCallbacks {
void onConnect(BLEServer* pServer) {
deviceConnected = true;
};
void onDisconnect(BLEServer* pServer) {
deviceConnected = false;
}
};
class MyCallbacks: public BLECharacteristicCallbacks
{
void onWrite(BLECharacteristic *pCharacteristic)
{
std::string rxValue = pCharacteristic->getValue();
if (rxValue.length() > 0)
{
rxload="";
for (int i = 0; i < rxValue.length(); i++)
{
rxload +=(char)rxValue[i];
Serial.print(rxValue[i]);
}
Serial.println();
if(temp1 == 1)
{
std::string rxValue1;
Serial.print("Waiting for wifi Id..");
char *copy = new char[strlen(rxValue.c_str())];//开辟一个存放字符数组(包括10个元素)的空间,返回首元素的地址
strcpy(copy,rxValue.c_str());//给新开辟的空间赋入值
ssid = copy;
temp1++;
}
else
{
Serial.print("Waiting for wifi password..");
char* copy1 = new char[strlen(rxValue.c_str())];
strcpy(copy1,rxValue.c_str());
password = copy1;
temp1 = 1;
WiFi.begin(ssid, password);
long start = millis();
int flag = 0;
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connectingto WiFi..");
if(millis() - start > 10000){
flag = 1;
Serial.print("File to connected WiFi\n");
break;
}
}
if(flag == 0)
{
Serial.println("Connected to the WiFi network");
}
}
}
}
};
void setupBLE(String BLEName){
const char *ble_name = BLEName.c_str(); //返回当前字符串的首地址
BLEDevice::init(ble_name); //创建一个蓝牙设备,名称为ble_name
BLEServer *pServer = BLEDevice::createServer(); //创建服务
pServer->setCallbacks(new MyServerCallbacks());
BLEService *pService = pServer->createService(SERVICE_UUID); //???
pCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_TX,BLECharacteristic::PROPERTY_NOTIFY);
pCharacteristic->addDescriptor(new BLE2902()); //添加描述
BLECharacteristic *pCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_RX,BLECharacteristic::PROPERTY_WRITE);
pCharacteristic->setCallbacks(new MyCallbacks());
pService->start();
pServer->getAdvertising()->start();
Serial.println("Waiting a client connection to notify...");
}
void setup() {
Serial.begin(9600);
//Serial.println("Waiting a client connection to notify...");
setupBLE("EEESP");//设置蓝牙名称
//Serial.println("Waiting a client connection to notify...");
}
void loop()
{
/* long now = millis();//记录当前时间
if (now - lastMsg > 1000)
{
//每隔1秒发一次信号
if (deviceConnected && rxload.length()>0) {
String str=rxload;
const char *newValue=str.c_str();
pCharacteristic->setValue(newValue);
pCharacteristic->notify("!noty");
}
lastMsg = now;//刷新上一次发送数据的时间
}
*/
}
版权声明:本文为weixin_42251474原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。