首页 动态 版块 商城 我的
 退出
游客  
等级:
金币:
经验值:

0.96寸OLED显示模组SSD1306驱动显示屏Python/C++编程 树莓派Pico与ESP32使用例程

  9379 
 0
 7
RASPI   ydxhuo.com 
文章主图

一:显示屏介绍

  • 1.显示屏参数

  • 驱动芯片:SSD1306
  • 支持接口:12C
  • 工作电压:3.3v~5v
  • 分 辨  率:128x64
  • 屏幕尺寸:0.96(英寸)
  • 显示视角:>160°
  • 显示区域:21.744x10.864mm
  • 模块尺寸:27.3x27.8mm
  • 显示颜色:白色,蓝色,蓝黄(蓝黄仅顶部为黄色)
  • 四针接口:(VCC正极),(GND负极),(SCL时钟信号),(SDA数据信号)
  • 2.显示逻辑

SSD1306 芯片本身内部没有预装中文汉字库(通常只内置了简单的 ASCII 字符表,用来显示英文字母和数字)。

英文字符:可以通过内置码表直接调用。

中文汉字:SSD1306 根本不知道什么是“张”、“福”或“国”,它只知道屏幕上第几行第几列的像素点是亮(1)还是暗(0)。

所以此时取模软件的作用:就是把一个汉字的笔画,像做十字绣一样,打散成由黑白点组成的阵列(例如16x16像素点阵),并转换成一串十六进制数值(如 0x00, 0x10, 0x22...)


如果使用C/C++(如 WiringPi / Pigpio):

取模软件是必不可少的。需要先把要显示的汉字用取模软件生成十六进制数组,写进代码的头文件或字模库里,再由程序逐字节发送给 SSD1306。


如果使用Python(如ssd1306 库):

在 Python 中,通常不需要手动使用取模软件。因为 Python 的 Pillow (PIL) 图形库可以直接加载电脑或树莓派中的 .ttf 字体文件,在后台自动实时完成“画字”和“取模”的工作,再直接把图像刷到 OLED 屏幕上。

  • 3.原理图资料

电路原理图

PCtoLCD2002取模软件


二:树莓派例程

  • 1.树莓派接线图

以树莓派Pico开发板为例,请注意按下图的引脚标识接线,接错会导致设备烧毁!


Image



  • 2.Python程序

下载ssd1306和main这两个py程序,直接上传至树莓派pico文件内。运行main程序即可正常显示


ssd1306.py
main.py

 如果你还没有搭建好树莓派Python编程环境可参考这个帖子→:如何搭建Python编程环境


Image

Image


具体显示内容,可以自行根据代码内进行修改。


三:ESP32例程

  • 1.ESP32接线图

以ESP32-S3开发板为例,请注意按下图的引脚标识接线,接错会导致设备烧毁!



Image


  • 2.C++程序

需要在Arduino IDE中点击左侧栏的 库管理器(Library Manager)(或按 Ctrl + Shift + I),搜索并安装U8g2库:

U8g2
ssd1306_0.96下载这个源代码直接用Arduino IDE编译上传程序,然后查看屏幕显示状态(如下图)

如果你还没有搭建好ESP32的ArduinoIDE的编程环境可参考这个帖子→:搭建ArduinoIDE编程环境


Image


显示结果:


  • 3.代码逻辑解析

以上代码结构逻辑可以拆解为以下 4 个步骤

1. 初始化硬件与对象构造

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE, SCL_PIN, SDA_PIN);


硬件 I2C 绑定:创建了一个用于 SSD1306 屏幕的驱动对象。在构造函数中传入了屏幕方向(不旋转 U8G2_R0)、复位引脚(无 U8X8_PIN_NONE)以及自定义的 I2C 引脚(GPIO12 为 SCL,GPIO10 为 SDA)。


2.显示环境配置(setup 内)

这三行完成了屏幕的开机初始化,并告诉 U8g2 使用包含汉字的字库来处理中文字符串。

u8g2.begin();                     // 启动屏幕驱动芯片
u8g2.enableUTF8Print();           // 开启 UTF-8 字符解析,使 print() 能识别中文
u8g2.setFont(u8g2_font_wqy12_t_gb2312); // 设置 12 像素中文字体(内含常用汉字和英文字符)


3. 缓冲区绘制(显存画图)

全缓存模式 (_F_):此时所有的 print() 操作都只是在 ESP32-S3 的内存缓冲区里“画图”,并没有直接发送给屏幕。

Y 轴基线坐标:Y 轴坐标指的是文字底部所在的位置,因此分别设为 15、38、60 可以将 64 像素高度的屏幕等距分成三行。

u8g2.clearBuffer();               // 清空内存缓冲区(准备画新画面)

u8g2.setCursor(0, 15);             // 设置光标位置 (X=0, Y=15)
u8g2.print("1.hello 跃动芯火");     // 写入第一行文字

u8g2.setCursor(0, 38);             // 移动光标到第二行 (Y=38)
u8g2.print("2.www.ydxhuo.com");

u8g2.setCursor(0, 60);             // 移动光标到第三行 (Y=60)
u8g2.print("3.128x64");


 4.刷新屏幕输出

将内存里的图像通过 I2C 总线发送给 SSD1306 的显存,屏幕随即点亮并显示出这三行字。

u8g2.sendBuffer();                 // 将内存缓冲区画好的内容一次性打包发送给屏幕



四:C5/STM32例程

关于51和STM32的资料请查看:0.96显示屏Arduino/C51/STM32使用资料



技术支持(对本页存在疑难问题可联系我们工程师)

联系人:张工
电话:0755-32914578
QQ:2251000002
微信:扫下方二维码添加,请备注来意

提供:人工智能,IOT物联网,工控数显,嵌入式软硬件开发,科创教育,产品定制,生产,方案解决...

作者签名: www.ydxhuo.com   楼主  2024-06-16 19:00:19
回复列表
Powered by YDXHUO _VERSION
© 2017-2026 跃动芯火版权
您的IP: 216.73.216.115 , 2026-08-21 23:21:49
Powered by YDXHUO _VERSION
© 2017-2026 跃动芯火版权
(7) 分享
分享

请保存二维码或复制链接进行分享

取消
免责声明
1、本站资源,均来自网络与个人作者,所有资源和文章仅限用于学习和研究目的 。
2、不得用于商业或非法用途,否则,一切责任由该用户承担 !

侵权删除请致信 E-Mail:ydxho@qq.com
已有0次打赏