做嵌入式小项目时最烦的不是代码跑不起来而是跑起来之后什么都看不见。传感器数据全堆在串口里手机又懒得开这时候给 ESP8266 配上一块 OLED 屏幕整个项目立刻“活”了。这篇文章是 OLED 在 ESP8266 中应用系列的第一篇我会从选屏、接线、驱动库选型讲起一直讲到中文显示、滚动动画和踩坑排查目标是让你照着操作半小时内把一块 0.96 寸 I2C 接口的 OLED 屏点亮并画出自己的界面。写这篇的起因很实在我前阵子做环境监测小盒子芯片选的 ESP8266温湿度、WiFi 信号强度、IP 地址全都有数据但总不能在每次调试时都插着 USB 线看串口。加一块小屏幕是最简单的解法而 OLED 又是 ESP8266 最合适的屏幕类型没有之一。接下来我把这段时间的真实经验包括翻车的部分一并摊开讲。1. 为什么是OLED而不是LCD1602从一块屏的选择说起很多新手第一反应是用 LCD1602因为教程多、资料全。我自己早年也玩过说实话那玩意能用但体验一般——引脚多、要调对比度、还得背光而且一次只能显示两行字符。OLED 最大的不同是每个像素自己发光不需要背光给它 3.3V 和两根信号线就能出图加上电源和地一共四根线。对一个只想显示温湿度、时间、IP 地址的小项目来说这个接线量简直是福音。1.1 OLED 相对 LCD1602 和数码管的真实优势先摆一张对比表再逐一拆开讲。对比项OLED 0.96寸SSD1306LCD1602数码管显示内容128x64 点阵可显示图形、中文、曲线16x2 字符字母数字为主数字和少量字符接线4 根I2C 接口6 到 11 根还要调对比度动态扫描要 8 根以上背光无背光像素自发光需要背光功耗固定段亮越多越费电显示效果可视角度大对比度高视角窄强光下看不清信息量极其有限与 ESP8266 的契合度I2C 仅占用两个 GPIORAM 占用 1KBGPIO 占用多且 5V 逻辑要转电平占用 GPIO 多显示不了复杂内容对 ESP8266 这种“算力不强、RAM 不多、但能联网”的芯片来说OLED 最大的好处不是省电而是自由。128x64 点阵意味着你可以自己画曲线、画图标、打中英文而不是被固定在 16 个字符格子里。比如你想看 WiFi 信号强度的实时变化在 LCD1602 上只能用几个星号在 OLED 上却能画一条折线这种表达力差距是本质性的。1.2 选屏时的常见陷阱尺寸、接口和驱动芯片市场上的小 OLED 模块五花八门买错了很耽误事。我总结成几个硬性识别标准接口认准 4 针的 I2C 版本丝印通常是 VCC、GND、SCL、SDA。7 针的是 SPI 版本有 CS、DC、RES 等引脚驱动接口完全不同别买错了。尺寸与分辨率常见的 0.96 寸和 1.3 寸都是 128x64但 0.91 寸是 128x32只有一半高。代码里选的驱动构造函数必须跟实际分辨率匹配。驱动芯片0.96 寸绝大多数是 SSD13061.3 寸很多是 SH1106。两者指令集大体兼容但显存偏移有差别U8g2 库里要选不同的构造函数。颜色有纯蓝、纯白、黄蓝双色之分。黄蓝屏顶部约 16 行是黄色剩下是蓝色设计界面时注意这个分割线别把重要信息正好压在黄色和蓝色交界处。看不到实物、只能看商品页的时候认准这一串关键词就行0.96寸、4针、I2C、SSD1306。这四件套基本不会翻车。我自己买屏踩过的坑就是图便宜买了一块 SPI 版本的到手发现跟之前的 I2C 代码对不上又得临时改接线折腾了一晚上。2. 硬件接线只花三分钟但别让这三分钟坑你两小时OLED 模块和 ESP8266 的接线在原理上极简单实际动手却有几个容易忽略的细节。很多人屏幕点不亮问题不是代码而是供电或上拉电阻没弄对。2.1 元器件清单与接线表你需要准备的东西非常少ESP8266 开发板一块ESP-12F 模组的常见核心板即可板载 USB 转串口方便烧录0.96 寸 I2C OLED 屏一块SSD1306128x644 根杜邦线或者干脆直接焊接备用100uF 电解电容、10kΩ 电阻排查供电不稳和上拉问题时用接线关系如下OLED 引脚接 ESP8266 的引脚说明VCC3V3供电推荐板载 3V3 输出GNDGND共地必须接SCLGPIO5丝印 D1时钟线SDAGPIO4丝印 D2数据线如果你用的是别的开发板或者自己画的板子只要把 SCL 和 SDA 接到代码里指定的引脚就行。ESP8266 的硬件 I2C 默认引脚就是 GPIO5 和 GPIO4所以大部分库直接拿这两个脚当默认值这也是我推荐先按这个接法的原因。2.2 供电和电平细节为什么我坚持用 3V3ESP8266 的 IO 是 3.3V 逻辑OLED 模块按 3.3V 标准工作所以 VCC 接板载 3V3 是最稳的选择。有些模块商家标注支持 3.3V 到 5V但我个人不建议长期用 5V 供电。SSD1306 芯片的逻辑电压参考范围按数据手册是偏 3.3V 那一侧的长期 5V 供电属于赌运气。另一个容易踩的点是 I2C 上拉电阻。很多成品模块在板子上已经放了上拉电阻直接就能用但如果是裸屏改造或者某些精简模块上拉电阻可能没有。判断方法很简单屏幕不工作或者花屏时在 SCL 和 SDA 上分别接一个 4.7kΩ 到 3V3再试。注意上拉电阻一定要接到 3V3不能接到 5V。如果上拉用了 5VI2C 信号电平就变成 5VESP8266 的引脚不一定受得了轻则花屏重则损坏引脚。2.3 第一步永远是 I2C 扫描不管用什么库、什么代码我接到一块新屏的第一件事永远是跑 I2C 扫描程序。这一步能确认屏有没有通电、地址对不对、总线通不通排除大量硬件问题。#include Wire.h void setup() { Serial.begin(115200); Wire.begin(); Serial.println(I2C Scanner); } void loop() { byte error, address; int found 0; for (address 1; address 127; address) { Wire.beginTransmission(address); error Wire.endTransmission(); if (error 0) { Serial.print(Found device at 0x); if (address 16) Serial.print(0); Serial.println(address, HEX); found; } } if (found 0) { Serial.println(No device found); } delay(2000); }正常情况下串口监视器会返回 0x3C这是最常见的地