2025年2月4日(i2c和spi树莓派oled sdd1306)

树莓派使用 I2C 和 SPI 通信协议来与 OLED 屏幕(如 SSD1306)进行连接。你可以根据自己的需求选择适合的通信协议来与 OLED 屏幕进行通信。

1. I2C 连接 SSD1306 OLED 屏幕

硬件连接:
  • SDA (数据线) 连接到树莓派的 GPIO 2 (即 SDA 引脚)
  • SCL (时钟线) 连接到树莓派的 GPIO 3 (即 SCL 引脚)
  • OLED 屏幕的电源引脚 VCC 连接到树莓派的 3.3V5V (取决于你的OLED屏幕电压要求)
  • GND 连接到树莓派的 GND
软件设置:
  1. 启用 I2C 接口:通过树莓派的终端,运行以下命令来启用 I2C:

    sudo raspi-config
    

    选择 Interfacing Options -> I2C,然后启用它。

  2. 安装所需的库:

    sudo apt-get update
    sudo apt-get install python3-pip
    sudo apt-get install python3-smbus
    sudo apt-get install i2c-tools
    sudo pip3 install adafruit-circuitpython-ssd1306
    
  3. 测试 I2C 设备:
    使用 i2cdetect 命令查看 OLED 屏幕是否正确连接:

    i2cdetect -y 1
    

    如果连接正常,你应该能够看到一个地址,比如 0x3C

  4. 编写代码来显示内容:
    以下是一个简单的 Python 代码示例,使用 Adafruit_SSD1306 库来显示文本:

    import time
    import board
    import digitalio
    from adafruit_ssd1306 import SSD1306_I2C
    
    # 初始化 I2C
    i2c = board.I2C()
    oled = SSD1306_I2C(128, 64, i2c)  # 128x64 OLED 屏幕
    
    # 清除屏幕
    oled.fill(0)
    oled.show()
    
    # 显示文本
    oled.text("Hello, World!", 0, 0)
    oled.show()
    time.sleep(2)
    
    # 清除屏幕
    oled.fill(0)
    oled.show()
    

2. SPI 连接 SSD1306 OLED 屏幕

硬件连接:
  • CS (Chip Select) 连接到树莓派的 GPIO 8 (CE0)
  • DC (Data/Command) 连接到树莓派的 GPIO 24
  • RST (Reset) 连接到树莓派的 GPIO 25
  • SDI (MOSI) 连接到树莓派的 GPIO 10
  • SCK (Clock) 连接到树莓派的 GPIO 11
  • OLED 屏幕的电源引脚 VCC 连接到树莓派的 3.3V5V
  • GND 连接到树莓派的 GND
软件设置:
  1. 启用 SPI 接口:
    通过树莓派的终端,运行以下命令来启用 SPI:

    sudo raspi-config
    

    选择 Interfacing Options -> SPI,然后启用它。

  2. 安装所需的库:

    sudo apt-get update
    sudo apt-get install python3-pip
    sudo apt-get install python3-spidev
    sudo pip3 install adafruit-circuitpython-ssd1306
    
  3. 编写代码来显示内容:
    以下是一个 Python 代码示例,使用 SPI 接口来控制 OLED 屏幕:

    import time
    import board
    import digitalio
    import busio
    from adafruit_ssd1306 import SSD1306_SPI
    
    # 初始化 SPI
    spi = busio.SPI(clock=board.SCLK, MOSI=board.MOSI)
    cs = digitalio.DigitalInOut(board.D5)
    dc = digitalio.DigitalInOut(board.D6)
    reset = digitalio.DigitalInOut(board.D13)
    
    oled = SSD1306_SPI(128, 64, spi, cs, dc, reset)
    
    # 清除屏幕
    oled.fill(0)
    oled.show()
    
    # 显示文本
    oled.text("Hello, SPI!", 0, 0)
    oled.show()
    time.sleep(2)
    
    # 清除屏幕
    oled.fill(0)
    oled.show()
    

总结:

  • 如果你选择 I2C,可以节省引脚数,但可能会在某些情况下稍微慢一些。
  • 如果选择 SPI,则传输速度较快,但需要更多的引脚。

你可以根据自己的需求选择最适合的通信协议。

你可能感兴趣的:(Raspberry,Pi,Zero,2W,树莓派)