树莓派使用 OLED 屏显示图片及文字

作者:carzy2024.01.08 10:40浏览量:5

简介:本文将介绍如何使用树莓派和OLED显示屏来显示文字和图片。我们将通过安装必要的软件库和配置I2C接口来设置OLED显示屏,并使用Python代码来控制显示内容。

在使用树莓派和OLED显示屏之前,你需要准备以下工具和材料:

  1. 树莓派(本文使用的是树莓派3B)
  2. OLED显示屏(128×64尺寸)
  3. 杜邦线(用于连接树莓派和OLED显示屏)
  4. Adafruit的Python库(用于控制OLED显示屏)
  5. 网线和电源适配器(用于连接树莓派到互联网和供电)
    接下来,按照以下步骤设置树莓派和OLED显示屏:
  6. 将OLED显示屏连接到树莓派的GPIO接口上。使用杜邦线将显示屏的VCC、GND、SDA和SCL引脚分别连接到树莓派的GPIO引脚上。
  7. 连接网线和电源适配器,确保树莓派能够连接到互联网并供电。
  8. 打开终端,进入树莓派的命令行界面。
  9. 安装必要的软件库。在终端中执行以下命令:
    1. sudo apt-get install -y python-smbus
    2. sudo apt-get install -y i2c-tools
    3. sudo apt-get install -y build-essential
  10. 配置I2C接口。执行以下命令打开I2C接口:
    1. sudo raspi-config
    在配置菜单中,选择“Advanced Options”,然后选择“I2C”,最后选择“Yes”。保存并退出配置菜单。
  11. 安装Adafruit的Python库。在终端中执行以下命令:
    1. sudo git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git
    2. cd Adafruit_Python_SSD1306
    3. sudo python setup.py install
    安装完成后,你可以使用以下代码来控制OLED显示屏的显示内容:
  12. 导入必要的库:
    1. import Adafruit_SSD1306
    2. from PIL import Image, ImageDraw, ImageFont
    3. import smbus
  13. 定义I2C地址和总线:
    1. bus = smbus.SMBus(1) # 0=I2C1, 1=I2C2, 2=SPI bus, 3=OHCI USB Bus (Windows only)
    2. address = 0x3C # OLED屏幕的I2C地址是0x3C,也可以尝试使用0x3A地址。
  14. 初始化OLED显示屏:
    1. disp = Adafruit_SSD1306.SSD1306_128_64(address, bus)
    2. disp.begin() # 初始化OLED显示屏,并设置显示模式为128×64像素。
    3. disp.display(Image.new('RGB', (disp.width, disp.height))) # 清空屏幕。
  15. 加载图片并显示在OLED屏幕上:
    首先,你需要将图片保存为PNG或BMP格式,并使用Python的PIL库将其转换为RGB格式。然后,你可以使用以下代码将图片显示在OLED屏幕上:
    ```python
    image = Image.open(‘image.png’).convert(‘RGB’) # 加载图片并转换为RGB格式。
    draw = ImageDraw.Draw(image) # 创建一个绘图对象。
    font = ImageFont.truetype(‘/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf’, 8) # 选择字体和大小。根据需要修改字体路径和大小。
    text = ‘Hello, World!’ # 要显示的文字内容。可以修改为你想要显示的任何文字或图像。
    draw.text((0,0), text, font=font, fill=(255, 255, 255)) # 在OLED屏幕上绘制文字。这里的坐标是(0,0),表示在屏幕的左上角开始绘制。填充颜色为白色。
    disp.display(image) # 在OLED屏幕上显示图片和文字。如果想要重新显示更新后的内容,请再次调用该函数。请注意,每次调用该函数都会清空整个屏幕并重新绘制内容,所以如果你只想更新部分内容而不是整个屏幕,请使用其他方法。