树莓派系列:驱动SSD1306 OLED屏幕

2020-03-18 21:37:55 8点赞 28收藏 1评论

源码:https://github.com/Taosky/SSD1306

起因在V2EX看到有人用树莓派做了一个发呆用的小屏幕,也想折腾一下,淘宝挑屏比较纠结,后来看到有家店卖OLED屏,于是就买来尝试一下。

到了之后发现还是很小的,0.96寸,看新闻好像不太行了,显示温度时间什么的就好了。

准备

首先是连线,支持3.3V~5V,VCC接3.3V,GND接GND口,SDA接GPIO3,SCL接GPIO2,(看网上都是接这两个

GPIO连线示意GPIO连线示意

由于采用I2C通信,需要打开树莓派上的I2C功能。

sudo apt-get install -y python-smbus
sudo apt-get install -y i2c-tools
sudo raspi-config

选择Interfacing Options - I2C打开。

运行“sudo i2cdetect -y 1”测试能不能看到I2C的地址,如下就是成功获取地址了。

获取地址获取地址

驱动

卖家提到的Github上的项目是Node写的,看不大明白,根据上面的信息搜了SSD1306找到一个叫luma的Python库可以驱动这块屏幕。

luma.example中有一些示例可以学习。

首先要理解几个概念:

  1. 要在屏幕上显示内容可以理解成是在”画布“上画图,再将画布显示出来。因此在显示文字的时候也是传输的图而不是文字本身,需要选用字体显示。

  2. 变化屏幕上显示的内容需要用一张新的“画布”覆盖,如果不进行覆盖,屏幕就一直显示当前的“画布”,除非对它发送指令关闭。

  3. 因为是画布,所以可以显示我们所需要的任意内容,文字、图形、图像都是可以显示的。

显示文字的话调用draw.text,使用正确的字体就可以了,可以控制字体大小、颜色等参数。
这里在导入字体的时候设置字号为21,绘制字体的时候指定字体并设置了显示位置(可以根据128x64计算确定大概的位置),time.sleep(8)让程序休眠8秒,也就是让“画布”保持8秒不被后面的画布覆盖。

font_path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'fonts', 'code2000.ttf')) # 导入字体文件font1 = ImageFont.truetype(font_path, 21)with canvas(my_device) as draw:
draw.text((32, 0), '树莓派', font=font1, fill="white")
draw.text((20, 21), sensor_data_to_show[0], font=font3, fill="white")
time.sleep(8)

显示图像稍微复杂一点,以天气图标和温度的显示作为示例。

天气显示天气显示

首先是导入图像,然后将图像转换成RGBA模式,创建一个适配设备的空白图像,将要显示的图像“粘贴”到空白图像上;这时还需要一个温度文字的显示,通过类似的方法,将文字画到图像上就完成了。最后使用device.display()显示图像(我也不知道为啥是display(+_+)?)

icon_path = os.path.abspath(os.path.join(os.path.dirname(__file__),'weather_icon', '200.jpg'))
weather_icon = Image.open(icon_path)
inverted_icon = ImageOps.invert(weather_icon).convert("RGBA")
weather_image = Image.new("RGBA", device_size)
weather_image.paste(inverted_icon, (0, 0))
draw = ImageDraw.Draw(weather_image)
draw.text((66, 12), '32℃', (255, 255, 255), font=font2)

my_device.display(weather_image.convert(my_device.mode))

至此基本就解决显示图像的问题了,当然这只是最简单的显示,比如luma示例里面的时间显示就很复杂。

问题

亮度似乎无法调低,通过device.contrast()设置为1好像还是很亮。


展开 收起

Raspberry Pi 树莓派 3代B型开发板 Python编程套件 官方标配

Raspberry Pi 树莓派 3代B型开发板 Python编程套件 官方标配

暂无报价

Raspberry Pi 树莓派 Raspberry Pi 4B Model B开发板 微型电脑主板 4G内存

Raspberry Pi 树莓派 Raspberry Pi 4B Model B开发板 微型电脑主板 4G内存

暂无报价

树莓派3代B+型 python编程 raspberry pi 3B/3B+编程开发板 3代b型RS英国版

树莓派3代B+型 python编程 raspberry pi 3B/3B+编程开发板 3代b型RS英国版

暂无报价

树莓派Pico 单片机开发板套件双核RP2040芯片 3.20前发货

树莓派Pico 单片机开发板套件双核RP2040芯片 3.20前发货

29.9元起

intel 英特尔 Ultra 7 265K CPU 3.9GHz 20核20线程

intel 英特尔 Ultra 7 265K CPU 3.9GHz 20核20线程

2759元起

AMD 锐龙R5-9600X CPU 3.9GHz 6核12线程

AMD 锐龙R5-9600X CPU 3.9GHz 6核12线程

1499元起

AMD 锐龙R7-9800X3D CPU 4.7GHz 8核16线程

AMD 锐龙R7-9800X3D CPU 4.7GHz 8核16线程

4899元起

intel 英特尔 酷睿i5-14600KF CPU 3.5GHz 14核20线程

intel 英特尔 酷睿i5-14600KF CPU 3.5GHz 14核20线程

1449元起

intel 英特尔 酷睿i7-14700KF CPU 3.4Ghz 20核28线程

intel 英特尔 酷睿i7-14700KF CPU 3.4Ghz 20核28线程

2228元起

AMD 锐龙R7-9700X CPU 3.8GHz 8核16线程

AMD 锐龙R7-9700X CPU 3.8GHz 8核16线程

2199元起

SAPPHIRE 蓝宝石 AMD RADEON RX 7900 XT 20G 极地版 显卡 20GB

SAPPHIRE 蓝宝石 AMD RADEON RX 7900 XT 20G 极地版 显卡 20GB

4848元起

MSI 微星 MPG Z890 EDGE TI WIFI 刀锋钛 ATX主板(LGA 1851、Z890)

MSI 微星 MPG Z890 EDGE TI WIFI 刀锋钛 ATX主板(LGA 1851、Z890)

3299元起

MSI 微星 MPG X870E CARBON WIFI 暗黑 ATX主板(AMD AM5、X870E)

MSI 微星 MPG X870E CARBON WIFI 暗黑 ATX主板(AMD AM5、X870E)

3499元起

intel 英特尔 Ultra 9 285K CPU 3.7GHz 24核24线程

intel 英特尔 Ultra 9 285K CPU 3.7GHz 24核24线程

4499元起

Antec 安钛克 FLUX E-ATX机箱 黑色

Antec 安钛克 FLUX E-ATX机箱 黑色

398元起

HKC 惠科 猎鹰二代 G27H7Pro 27英寸 IPS G-sync FreeSync 显示器(3840×2160、320Hz、95%DCI-P3、HDR400)

HKC 惠科 猎鹰二代 G27H7Pro 27英寸 IPS G-sync FreeSync 显示器(3840×2160、320Hz、95%DCI-P3、HDR400)

1779元起
1评论

  • 精彩
  • 最新
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
28
扫一下,分享更方便,购买更轻松