I2C OLED 打不开或不显示

I2C OLED will not turn on or display

我已经开始使用 Arduino 语言而不是 pyFirmata 版本。我正在使用 Arduino UNO。我 运行 遇到了同样的问题,那就是 OLED 无法工作。我尝试了 2 种不同的 OLED,一种来自 UCTRONICS,一种来自 HiLetGo。它们都是 I2C 128x64 OLED,UCTRONICS 是黄色和蓝色,而 HiLetGo 是全白的。我尝试了 2 种不同的代码,一种是我自己编写的,另一种是来自 ssd1306 库的示例。没有错误,只是 OLED 不亮。该板通过 alco 连接到我在同一个项目中使用的 4 个触摸传感器,但它们没有任何问题(目前)。我已经排除了一段时间的故障,并且已经能够查明错误(可能)所在的位置。这是我的代码:(即使 ssd1306 I2C 128x64 示例也不起作用。)我也不想要需要我没有的额外硬件的建议,比如 RTC(即使它与此无关这是我能想出的唯一例子)这是我的代码:(即使 ssd1306 I2C 128x64 例子也不起作用。)

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
#define sw 128
#define sh 64
Adafruit_SSD1306 display(sw, sh, &Wire, OLED_RESET);

void setup() {
  Serial.begin(9600);
  Wire.begin();
  display.begin(SSD1306_SWITCHCAPVCC, 0x78);
  display.cp437(true);
  pinMode(A4, OUTPUT);


}

void loop() {
  digitalWrite(A4, HIGH);
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.println("test");
  Serial.println("test");
  digitalWrite(A4, LOW);

}

像往常一样,我只有 1 周的时间来解决这个问题,所以帮助将不胜感激。

是的,这些显示可能非常烦人。我亲身体验过。

首先,访问供应商的网站,看看他们是否建议使用任何特定的库。我遇到的一些主要问题是:

  • 屏幕的供电电压不是您期望的标准5V,而是更高或更低。如果它更低,或者你为 3.3V 电源提供 5V,你甚至可能损坏或损坏显示器。
  • 您打开了 SDA/SDL 根电线,忘记连接某些电线或接地有问题。背光是否工作?
  • 库使用了错误的时钟速度
  • 显示器正在侦听的 I2C 地址与库中使用的地址不同(这是我最常用的地址)

您的I2C地址设置似乎有误。 Arduino 的 Wire 库 (doc) 使用 7 位地址。最后一位是 read/write 位,Wire 会自动处理它。所以,你想砍掉最低有效位并将地址设置为 0x3C 而不是 0x78.

Adafruit_SSD1306 库实际上使用 0x3C 作为默认地址。请参阅 .h 和 .cpp 文件中 begin() 的声明和注释。

有关更多信息,我建议查看 SSD1306 data sheet。这是 I2C 数据格式。查看从属地址的格式。

不是每次都是硬件的问题,还要检查程序。加载示例测试程序并重试。 https://iotforgeeks.com/i2c-oled-display-not-working/ 帮我解决了同样的问题。