显示 SSD1306 在 esp32 上片刻后停止工作
Display SSD1306 stops working after a short while on esp32
我目前正在开发一个传感器盒,它在通过 I2C(21 和 22)连接的 SSD1306 显示器上的 ESP32 节点 MCU 循环中不间断地显示传感器数据。但是然后显示会出现奇怪的东西。
我现在不能分享所有的 ESP32 代码,但我想这应该是所有需要的东西了:
#include <Wire.h>
#include <Adafruit_SSD1306.h>
void setup() {
Wire.begin();
initializeDisplay();
}
void loop() {
...
writeToDisplay(.......);
}
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
bool initializeDisplay() {
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
return false;
}
display.display();
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("Display initialized!");
display.display();
display.clearDisplay();
return true;
}
void writeToDisplay(float colorTemp, float lux, float dbValue, String temperature, String relH, String co2) {
display.clearDisplay();
displayText ="";
displayText += "Lux ";
displayText += String(lux,1);
displayText += "lx\n";
displayText += "Color Temp. ";
displayText += String(colorTemp, 1);
displayText += "K\n";
displayText += "Noise level: ";
displayText += String(dbValue, 1);
displayText += "dbA\n";
displayText += "Temperature: ";
displayText += temperature;
displayText += "C\n";
displayText += "relH ";
displayText += relH;
displayText += "%\n";
displayText += "CO2 ";
displayText += co2;
displayText += "ppm\n";
if(isPortable()) {
displayText += "Portable Mode";
}
display.println(displayText);
display.display();
}
开始时一切正常,但大约一分钟后发生了这种情况:
这是内存还是闪存问题?有人有什么主意吗?我认为这不是电源问题。
显然问题出在同一条 I2C 总线上连接了太多设备。
那么是什么解决了这个问题:
我没有将显示器、两个传感器和一个实时时钟焊接到 GPIO 21 和 22,而是将显示器焊接到 GPIO 32 和 33。
已将 Wire1.begin(32, 33);
添加到设置中
将显示的构造函数更改为 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire1, -1);
我想一旦公交车上的交通太多,显示器就会停止工作。所以这不是内存问题
我目前正在开发一个传感器盒,它在通过 I2C(21 和 22)连接的 SSD1306 显示器上的 ESP32 节点 MCU 循环中不间断地显示传感器数据。但是然后显示会出现奇怪的东西。
我现在不能分享所有的 ESP32 代码,但我想这应该是所有需要的东西了:
#include <Wire.h>
#include <Adafruit_SSD1306.h>
void setup() {
Wire.begin();
initializeDisplay();
}
void loop() {
...
writeToDisplay(.......);
}
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
bool initializeDisplay() {
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
return false;
}
display.display();
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("Display initialized!");
display.display();
display.clearDisplay();
return true;
}
void writeToDisplay(float colorTemp, float lux, float dbValue, String temperature, String relH, String co2) {
display.clearDisplay();
displayText ="";
displayText += "Lux ";
displayText += String(lux,1);
displayText += "lx\n";
displayText += "Color Temp. ";
displayText += String(colorTemp, 1);
displayText += "K\n";
displayText += "Noise level: ";
displayText += String(dbValue, 1);
displayText += "dbA\n";
displayText += "Temperature: ";
displayText += temperature;
displayText += "C\n";
displayText += "relH ";
displayText += relH;
displayText += "%\n";
displayText += "CO2 ";
displayText += co2;
displayText += "ppm\n";
if(isPortable()) {
displayText += "Portable Mode";
}
display.println(displayText);
display.display();
}
开始时一切正常,但大约一分钟后发生了这种情况:
这是内存还是闪存问题?有人有什么主意吗?我认为这不是电源问题。
显然问题出在同一条 I2C 总线上连接了太多设备。 那么是什么解决了这个问题:
我没有将显示器、两个传感器和一个实时时钟焊接到 GPIO 21 和 22,而是将显示器焊接到 GPIO 32 和 33。
已将
Wire1.begin(32, 33);
添加到设置中将显示的构造函数更改为
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire1, -1);
我想一旦公交车上的交通太多,显示器就会停止工作。所以这不是内存问题