【教程】ESP32-CAM使用I2C驱动0.91寸OLED

本文介绍了如何在Arduino中使用SSD1306OLED屏幕,包括安装必要的库(如SSD1306和GFX),设置I2C连接,以及编写代码实现连接WiFi并显示本地IP地址的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn]

先安装库

1. 打开 Arduino IDE,然后转到 Sketch Include Library > Manage Libraries

2. 在搜索框中输入“SSD1306”,然后从 Adafruit 安装 SSD1306 库。

3. 选择“install all”。如果没有跳出弹窗,则从 Adafruit 安装 SSD1306 库后,在搜索框中键入“GFX”并安装该库。

4. 安装库后,重新启动 Arduino IDE。(实测非必须)

再编写代码

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

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels

// Define I2C Pins
#define I2C_SDA 14
#define I2C_SCL 15


// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);


void setup() {
  // Initialize with the I2C addr 0x3C (for the 128x32)
  Wire.begin(I2C_SDA, I2C_SCL);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C, false, false)) { 
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }
  // Clear the buffer.
  display.clearDisplay();
  display.setTextSize(1);      // Normal 1:1 pixel scale
  display.setTextColor(SSD1306_WHITE); // Draw white text
  display.setCursor(0,0);     // Start at top-left corner
  display.println(F("Hello, World!"));
  display.display();
}

连线并烧录

        要将代码上传到 Lolin32 OLED 板,请将其插入计算机。在 Arduino IDE 中,转到“工具”>端口,然后选择它连接到的 COM 端口。完成连线。

        然后,转到“工具>”并选择“WEMOS LOLIN32”。

        然后就可以看到效果:

例子:连接指定WiFi并显示IP地址

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


#define CAMERA_MODEL_AI_THINKER
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels

// WiFi credentials
const char* ssid = "xxxx";
const char* password = "xxxx";

// Define I2C Pins for ESP32-CAM
#define I2C_SDA 14
#define I2C_SCL 15

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() {
  Serial.begin(115200);
  
  // Initialize I2C
  Wire.begin(I2C_SDA, I2C_SCL);

  // Initialize OLED
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Use the correct I2C address here (commonly 0x3C or 0x3D for 128x32 displays)
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0,0);

  // Connect to WiFi
  WiFi.begin(ssid, password);
  Serial.print("Connecting to WiFi...");
  display.println("Connecting to WiFi...");
  display.display();

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("\nWiFi connected.");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  // Display IP address on OLED
  display.clearDisplay();
  display.setCursor(0,0);
  display.println("WiFi connected");
  display.print("IP: ");
  display.println(WiFi.localIP());
  display.display();
}

void loop() {
  // Your loop code here. In this example, the loop does not contain additional code.
}

### ESP32-CAM连接显示屏教程 #### 环境准备 为了使ESP32-CAM能够成功连接并控制显示屏,需先准备好相应的硬件设备以及开发环境。确保拥有ESP32-CAM模块、合适的显示屏(如OLED),并且已经完成了Arduino IDE对于ESP32的支持设置[^3]。 #### 接线方式 针对不同类型的显示器有不同的接法,这里以常见的I2C接口0.91OLED为例说明。将ESP32-CAMOLED屏之间按照下表建立物理连接: | ESP32-CAM Pin | OLED Display Pin | |---------------|------------------| | GND | GND | | VCC (3V3) | VCC | | GPIO 21 | SDA | | GPIO 22 | SCL | 注意:具体的GPIO编号可能依据实际使用的开发板有所变化,请参照官方文档确认引脚定义[^5]。 #### 软件实现 编写用于初始化和操作OLED屏幕的程序代码如下所示,在此之前记得安装Adafruit_SSD1306库来简化对SSD1306控制器的操作过程。 ```cpp #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); void setup() { Serial.begin(115200); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); for(;;); // Don't proceed, loop forever } delay(2000); // Pause for 2 seconds // Show initial welcome message display.clearDisplay(); display.setTextSize(1); display.setTextColor(SSD1306_WHITE); display.setCursor(0,0); display.print("Welcome!"); display.display(); } void loop() { } ``` 上述代码实现了基本的文字打印功能,可以作为进一步开发的基础框架。当运行这段代码之后,应该可以在所连接的小型屏幕上看到欢迎信息被正常显示出来。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小锋学长生活大爆炸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值