我为 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();
}
}