为了简单了解一个屏幕,那么我们需要使用arduino去点亮,测试,这样可以更加容易地集成到其他平台上去
在这里插入图片描述

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

#define I2C_SDA 21
#define I2C_SCL 18

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

// 常见地址 0x3C,可根据扫描器结果改
#define OLED_ADDR 0x3C

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() {
  Serial.begin(115200);
  while (!Serial) {}

  // 使用自定义 I2C 引脚
  Wire.begin(I2C_SDA, I2C_SCL);

  if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) {
    Serial.println("SSD1306/SSD1315 初始化失败,请检查接线和地址!");
    for (;;);
  }

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println("ESP32 OLED Test");
  display.println("I2C on SDA=19, SCL=18");
  display.display();
}

void loop() {
}

另外一个案例,WiFi打开,手机连接的时候,wifi屏幕上会显示连接个数。

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

// -------- I2C 引脚配置 --------
#define I2C_SDA 21   // 你接的 SDA
#define I2C_SCL 18   // 你接的 SCL(如果不用 18,请同步改这里和接线)

// -------- OLED 参数 --------
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_ADDR 0x3C

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

// -------- WiFi AP 配置 --------
const char *AP_SSID = "ESP32S3_OLED_AP";
const char *AP_PASS = "12345678";

// 当前连接客户端数量(由事件更新)
volatile int g_clientCount = 0;

// 注意:这里用的是“新枚举” ARDUINO_EVENT_WIFI_...
void WiFiEvent(WiFiEvent_t event) {
  Serial.print("WiFiEvent: ");
  Serial.println((int)event);

  if (event == ARDUINO_EVENT_WIFI_AP_STACONNECTED) {
    g_clientCount++;
    Serial.printf("Client connected, now: %d\n", g_clientCount);
  } else if (event == ARDUINO_EVENT_WIFI_AP_STADISCONNECTED) {
    if (g_clientCount > 0) g_clientCount--;
    Serial.printf("Client disconnected, now: %d\n", g_clientCount);
  }
}

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

  IPAddress apIP = WiFi.softAPIP();
  int clientCount = g_clientCount;  // 读一次局部拷贝

  display.print("SSID: ");
  display.println(AP_SSID);

  display.print("AP IP: ");
  display.println(apIP.toString());

  display.print("Clients: ");
  display.println(clientCount);

  display.println("----------------");
  display.println("Connect to AP");
  display.println("Then see count");

  display.display();
}

void setup() {
  Serial.begin(115200);
  delay(1000);

  // 初始化 I2C + OLED
  Wire.begin(I2C_SDA, I2C_SCL);

  if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) {
    Serial.println("OLED init failed, check wiring & addr");
    while (true) {
      delay(1000);
    }
  }

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println("Starting AP...");
  display.display();

  // 注册 WiFi 事件(用单参数版本,回调签名要匹配)
  WiFi.onEvent(WiFiEvent);

  // 启动 AP
  WiFi.mode(WIFI_AP);
  bool result = WiFi.softAP(AP_SSID, AP_PASS);
  if (!result) {
    Serial.println("AP start FAILED");
    display.clearDisplay();
    display.setCursor(0, 0);
    display.println("AP start FAILED");
    display.display();
    while (true) {
      delay(1000);
    }
  }

  IPAddress apIP = WiFi.softAPIP();
  Serial.print("AP started, SSID: ");
  Serial.println(AP_SSID);
  Serial.print("AP IP: ");
  Serial.println(apIP);

  display.clearDisplay();
  display.setCursor(0, 0);
  display.println("AP started");
  display.print("SSID: ");
  display.println(AP_SSID);
  display.print("IP: ");
  display.println(apIP.toString());
  display.println("Waiting clients...");
  display.display();

  Serial.println("Connect WiFi:");
  Serial.print("SSID: ");
  Serial.println(AP_SSID);
  Serial.print("PASS: ");
  Serial.println(AP_PASS);
}

void loop() {
  showInfoOnOLED();
  delay(1000);  // 每秒刷新一次
}

更多推荐