用官方的SSD1306.py 驱动 OLED

这几天看了一下micropython的I2C OLED驱动(SPI的类似),发现有几个版本。一个是官方的版本,还有早期网上流传的版本。

网上的版本使用了pyb.I2C驱动,是将Arduino的OLED驱动移植过来,只能用在STM32上;而官方的驱动使用了machine.I2C,这样有更好的兼容性,适合不同的硬件平台,还可以用软件I2C。

因为没有看到有人介绍官方的SSD1306驱动,所以我就简单的介绍一下I2C接口的OLED使用方法,SPI的也是类似的。下面以比较常见的0.96寸的128×64 I2C OLED为例:

  • 从github下载micropython的源码(或者只下载其中的ssd1306.py文件),然后将ssd1306.py复制到PYB Nano或其它micropython板
  • 连接I2C和电源到I2C的OLED上,如果没有硬件I2C,使用任意GPIO也可以。
  • 在终端里输入下面代码
from machine import I2C
i2c=machine.I2C(-1, sda=machine.Pin("PB9"), scl=machine.Pin("PB8"), freq=400000)  

from ssd1306 import SSD1306_I2C
oled = SSD1306_I2C(128, 64, i2c)
oled.text("Hello PYB Nano", 0, 0)
oled.show()

如果可以看到Hello这一段文字,就说明驱动成功了。

SSD1306.py中带有的函数不多,主要函数有:

  • text(string, x, y),在(x, y)处显示字符串,注意text()函数内置的字体是8×8的,暂时不能替换
  • poweroff(),关闭OLED显示
  • poweron(),空函数,无任何效果。可以用 write_cmd(0xAF) 代替
  • fill(n),n=0,清空屏幕,n大于0,填充屏幕
  • contrast(),调整亮度。0最暗,255最亮
  • invert(),奇数时反相显示,偶数时正常显示
  • pixel(x, y, c),在(x, y)处画点
  • show(),更新显示内容。前面大部分函数只是写入数据到缓冲区,并不会直接显示到屏幕,需要调用show()后才能显示出来。

另外还有部分功能可以用下面方法实现:

  • framebuf.line(x1,y1,x2,y2,c),画直线
  • framebuf.hline(x,y,w,c),画水平直线
  • framebuf.vline(x,y,w,c),画垂直直线
  • framebuf.fill_rect(x,y,w,h,c),画填充矩形
  • framebuf.rect(x,y,w,h,c),画空心矩形

大家也可以自己封装一下,甚至加入画园、字体选择、显示logo等功能。

作者:shaoziyang

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值