Arduino IDE 显示 ESP32 Sketch 太大。空间不足如何解决

问题描述 投票:0回答:1

我为 ESP32 编写了一个小程序,用于在 OLED 显示屏上显示时间、日期和加密货币价格。它还可以选择通过蓝牙串行更改手表相位。它编译成功,没有任何语法错误。但它显示以下错误消息

草图太大;有关提示,请参阅 https://support.arduino.cc/hc/en-us/articles/360013825179 减少它。 Sketch 使用 1508690 字节 (115%) 的程序存储 空间。最大值为 1310720 字节。全局变量使用52728字节 (16%) 的动态内存,为局部变量留下 274952 字节。 最大值为 327680 字节。文本部分超出了板上的可用空间

编译错误:文本部分超出了板上的可用空间

我发现“BluetoothSerial.h”和占用了这么多空间。我该如何解决这个问题

我正在使用 esp32 firebeetle。分区方案选项无法添加更多空间

#include <ThreeWire.h>  
#include <RtcDS1302.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH110X.h>
#include "BluetoothSerial.h"
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <WiFi.h>

const char* ssid = "Nokia";
const char* password = "12345678q";

ThreeWire myWire(4,5,2); // IO, SCLK, CE
RtcDS1302<ThreeWire> Rtc(myWire);
BluetoothSerial SerialBT;
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define i2c_Address 0x3c //initialize with the I2C addr 0x3C Typically eBay OLED's
#define OLED_RESET -1   //   QT-PY / XIAO
Adafruit_SH1106G display = Adafruit_SH1106G(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
char datestring[20];
char Blu_Rec_Data ='f'; //full
char last_Rec_Data ='f';
void setup () 
{
delay(250); // wait for the OLED to power up

 WiFi.begin(ssid, password);
 SerialBT.print("Connecting to WiFi...");
  while (WiFi.status() != WL_CONNECTED)                                        //Connect to the WiFi network
  {
    delay(500);
    SerialBT.print(".");
  } 

  if(WiFi.status() == WL_CONNECTED)
  {
    display.print("Connected");
  }
   display.begin(i2c_Address, true); // Address 0x3C default  
  
    SerialBT.begin("SMART MIRROR");    
    

    Rtc.Begin();

    RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__);

    // Rtc.SetDateTime(compiled);    
    display.println();

    if (!Rtc.IsDateTimeValid()) 
    {
        display.println("RTC lost confidence in the DateTime!");
    }

    if (Rtc.GetIsWriteProtected())
    {
        display.println("RTC was write protected, enabling writing now");
        Rtc.SetIsWriteProtected(false);
    }

    if (!Rtc.GetIsRunning())
    {
        display.println("RTC was not actively running, starting now");
        Rtc.SetIsRunning(true);
    }

    RtcDateTime now = Rtc.GetDateTime();
    if (now < compiled) 
    {
        display.println("RTC is older than compile time!  (Updating DateTime)");
    }
    else if (now > compiled) 
    {
        display.println("RTC is newer than compile time. (this is expected)");
    }
    else if (now == compiled) 
    {
        display.println("RTC is the same as compile time! (not expected but all is fine)");
    }

if(!display.begin(i2c_Address))
{
display.println(F("SH110X allocation failed"));
  
for(;;);}   

delay(2000);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SH110X_WHITE);
  display.setCursor(2, 2);
  display.println("starting...");
  display.display(); 
}


void loop () 
{
    RtcDateTime now = Rtc.GetDateTime();
    TheDisplay(now);
    //printDateTime(now);
    display.println();

    if (!now.IsValid())
    {
        display.println("RTC lost confidence in the DateTime!");
    }
    
    if (SerialBT.available()) 
    {
      Blu_Rec_Data = SerialBT.read();
    }
    if(Blu_Rec_Data == 'f' ||Blu_Rec_Data =='d' ||Blu_Rec_Data =='s' ||Blu_Rec_Data =='t')
    {
      last_Rec_Data = Blu_Rec_Data;
    }        
}

void TheDisplay(const RtcDateTime& dt)
{
  if (last_Rec_Data =='f')
  {
    display.clearDisplay();
    display.setCursor(0,2);
    display.setTextSize(2.9);  
    display.print(dt.Hour());
    display.print(":");
    display.print(dt.Minute());
    display.print(":");
    display.print(dt.Second());


    display.setCursor(8,30);
    display.setTextSize(1); 
    display.print("Date: ");
    display.print(dt.Day());
    display.print(":");
    display.print(dt.Month());
    display.print(":");
    display.print(dt.Year());
    display.print(" ");
    
    display.display();
  }
  if(last_Rec_Data == 'd')
  {
    display.clearDisplay();    
    display.setCursor(0,2);
    display.setTextSize(2.9); 
    display.print("Date: ");
    display.print(dt.Day());
    display.print(":");
    display.print(dt.Month());
    display.print(":");
    display.print(dt.Year());
    display.print(" ");
    
    display.display();
  } 
  if(last_Rec_Data == 's') 
  {
    HTTPClient http;
  http.begin("https://api.wazirx.com/sapi/v1/ticker/24hr?symbol=shibinr");
  int httpCode = http.GET();
  if (httpCode > 0) {
    String payload = http.getString();
    //display.println(payload);
    DynamicJsonDocument doc(1024);
    DeserializationError error = deserializeJson(doc, payload);
    if (error) {
      display.println("Error: ");

      // handle error
    } else {
      
      String lastPrice = doc["lastPrice"].as<String>();
      float bidPrice = doc["bidPrice"];
      float askPrice = doc["askPrice"];
      display.println(lastPrice); 
      display.display();     
    }
  } else {
    // handle error
  }
  http.end();  
  delay(1000); // delay for 1 minute
  display.println("Delayed");
  display.display();
  }
  if(last_Rec_Data == 't')
  {
     display.clearDisplay();
    display.setCursor(0,2);
    display.setTextSize(2.9);  
    // display.print(" Time: ");
    display.print(dt.Hour());
    display.print(":");
    display.print(dt.Minute());
    display.print(":");
    display.print(dt.Second());
    display.display();
  } 
}


      
c++ arduino bluetooth wifi esp32
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.