告别串口调试,给项目加一块小屏幕
SSD1306 0.96寸OLED屏是Arduino项目里最常用的显示模块,128x64像素,I2C接口只需要两根信号线,价格十来块钱。用它做一个简单的导航菜单,就能让你的DIY项目从串口调试升级为有界面的交互设备。温度显示、参数设置、状态监控,都能在一块小屏幕上完成。
I2C接线只需4根线
OLED模块一般有4个引脚:VCC、GND、SCL、SDA。接线方式:VCC接Arduino的5V(有些模块需要3.3V,看模块上的丝印),GND接GND,SCL接A5,SDA接A4。I2C默认地址是0x3C,大部分模块出厂就是这个地址。如果你的模块上有地址跳线,可以切换到0x3D。注意,如果模块上没带上拉电阻,需要在SDA和SCL线上各加一个4.7k上拉电阻到VCC。
Adafruit库初始化
安装两个库:Adafruit_SSD1306和Adafruit_GFX。初始化代码很简单,创建display对象时传入宽高和复位引脚(I2C模块不需要复位引脚,传-1就行)。setup里调用display.begin(SSD1306_SWITCHCAPVCC, 0x3C)完成初始化。清屏用display.clearDisplay(),写文字用display.print(),最后一定要调用display.display()把缓冲区内容刷到屏幕上。
菜单逻辑其实很简单
做一个3到4个按键的导航菜单,核心逻辑就是:定义一个菜单数组、一个当前选项索引、按键事件处理。UP键让索引减1(到0就回到最后一项),DOWN键让索引加1(到末尾就回到0),SELECT键进入选中项的子页面。绘制菜单时,遍历可见项,当前选中项用反色显示(黑底白字),其他项用正常显示(白底黑字)。如果菜单项超过4行(64像素屏幕每行8像素),需要加滚动偏移量。
实际项目中常见的坑
第一个坑是I2C地址冲突,如果你的项目同时用了OLED和I2C传感器(比如BMP280),两个设备地址不能一样。第二个坑是刷新闪烁,每次clearDisplay()再display()会有轻微闪烁,可以改成先写入缓冲区再一次性刷新。第三个坑是字体太小,默认字体只有6x8像素,如果要做中文显示,需要加载自定义字库或者用u8g2库的中文支持。










Adafruit库的示例代码拿来改改就能用,很方便
反色显示选中项这个思路不错,比加箭头简洁
I2C地址冲突的问题我之前用BMP280+OLED也遇到过
u8g2库做中文显示确实方便,就是库体积大了不少