I2C接口的OLED在树莓派3上的应用(luma.oled驱动)

2016年9月写过一篇blog记录了如何将12864的OLED小显示屏应用到树莓派上。时至今日,当初给出的链接虽然还在,但已经有了 翻天覆地的更新,因此有必要重新学习下新的方法。

参考资料:http://shumeipai.nxez.com/2017/09/13/solve-the-raspberry-pi-drive-oled-problem.html#more-3449

接线方式未变,如下图,按颜色对应:


记得在raspi-config里启用I2C。

然后下载一些必备工具:

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

运行一下 sudo i2cdetect -y 1

正常情况下默认在0x3C处有标注,这就说明接线成功了。

继续下载:

sudo apt-get install libfreetype6-dev libjpeg-dev build-essential

然后,如果使用python3:

sudo apt-get install python3-dev python3-pip
sudo -H pip3 install --upgrade luma.oled

如果决定还是用python2的,那就只需要简单的把上述命令行中的所有出现的3去掉即可。当然2和3也可以共存。装的过程可能会比较慢,耐心等待一下。

然后就可以写个python脚本测试了:

from luma.core.interface.serial import i2c, spi
from luma.core.render import canvas
from luma.oled.device import ssd1306, ssd1325, ssd1331, sh1106

serial = i2c(port=1, address=0x3C)
device = sh1106(serial)

with canvas(device) as draw:
    #draw.rectangle(device.bounding_box, outline="white", fill="black")
    draw.text((30, 40), "Hello World", fill="white")

注意 device = sh1106(serial) 这句。如果你是ssd1306的,可以把sh1106替换成ssd1306。我手头的屏一直以为是ssd1306的(包括给Arduino用的时候也是按ssd1306做初始化,没有任何问题),但是今次用ssd1306去初始化,python能运行,屏幕内容却闪退;改成原始的sh1106就正常。先不管,继续测。

改了一下原先的脚本,可以继续正常显示连接wifi获取到的IP地址:

#!/usr/bin/env python3

from luma.core.interface.serial import i2c, spi
from luma.oled.device import ssd1306, ssd1325, ssd1331, sh1106
from luma.core.render import canvas
from PIL import ImageDraw, ImageFont

import socket
import fcntl
import struct
#from subprocess import Popen,PIPE

def getIP(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    return socket.inet_ntoa(fcntl.ioctl( 
        s.fileno(), 
        0x8915,  # SIOCGIFADDR 
        struct.pack('256s', ifname[:15].encode('utf-8')) 
    )[20:24])

def stats(oled):
    font = ImageFont.load_default()
    font2 = ImageFont.truetype('/usr/share/fonts/truetype/freefont/FreeSans.ttf', 14)
    with canvas(oled) as draw:
        draw.text((2, 5), "IP: " + getIP("wlan0"), font=font2, fill=255)


def main():
    serial = i2c(port=1, address=0x3C)
    oled = sh1106(serial)
    stats(oled)

if __name__ == "__main__":
    main()

更多示例在:https://github.com/rm-hull/luma.examples


这次用Zero W来测试的。附送一个彩蛋:关闭Zero W的LED指示灯。这样做的东西在夜间能避免灯光干扰。我是无所谓,但可能有人对此敏感。

修改/boot/config.txt,加两句:
dtparam=act_led_trigger=none
dtparam=act_led_activelow=on

保存后执行:
echo 1 | sudo tee /sys/class/leds/led0/brightness

最后重启即可。


树莓派 5(Raspberry Pi 4 Model B)安装Luma.OLED库是为了能在这款单板计算机上控制OLED显示器,比如Pimoroni的Pico OLED。以下是基本步骤: 1. **更新系统**: - 打开终端,输入 `sudo apt update` 更新你的包列表,然后 `sudo apt upgrade` 升级已有的软件。 2. **安装依赖**: - 首先需要安装Python编程环境和必要的库,运行 `sudo apt-get install python3-pip` 安装pip,接着安装Adafruit_Python_GPIO库,这对于与硬件交互很重要:`sudo pip3 install Adafruit-GPIO`. 3. **安装Luma.OLED**: - Luma.OLED库可以通过pip安装,输入 `sudo pip3 install luma.oled`。 4. **配置硬件**: - 如果你的Pico OLED还没有连接到树莓派,确保通过GPIO插口正确连接。你可以查阅相关的硬件文档或教程以获取准确的连接方式。 5. **测试驱动**: - 创建一个简单的Python脚本,导入Luma.OLED并尝试显示一些文本,例如 `from luma.oled import device`,然后使用相应的设备实例开始操作。 ```python import luma.core.render import luma.oled.device oled = device.PimoroniOLED() oled.clear() oled.text(0, 0, "Hello, Raspberry Pi!", fill=255) oled.show() ``` 记得替换`PimoroniOLED`为你的实际OLED类型。 **注意事项**: - 检查你的树莓派是否支持GPIO,并确认OLED屏是否兼容。 - 有时候安装过程中可能会遇到权限问题,可能需要添加用户至gpio组:`sudo usermod -aG gpio $USER` 并注销再登录。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ki1381

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值