Micropython——关于Pico中I2C和SPI的实际应用示例(OLED屏幕显示)
博主之前的文章简要介绍了一下I2C总线和SPI总线的原理,这篇文章来详细介绍一下我们如何通过 I2C总线和SPI与OLED屏幕进行通信(驱动芯片SSD1306),以及我们在现实生活中的简单应用。
博主在这里应用的是一款7针的0.96寸的OLED屏,可进行I2C和SPI双通信,如图一所示。
首先,我们在这里先使用的是I2C通信。该模块,兼容4线SPI接口3线SPI接口和IIC 接口,默认4线SPI接口。所以我们要在硬件上对其进行处理。
图一:0.96寸 7针 OLED显示屏,兼容SPI/I2C
图二:OLED屏幕背面图
- 4 线 SPI:默认方式 4 线 SPI,需要短接 R3、R4 电阻,去掉 R1、R2、R5、R6 电 阻
- IIC 模式 需要短接 R1、R4、R8,去掉 R2、R3 电阻
- 3 线 SPI 模式,建议不采用该模式,不常用
I2C总线与OLED屏幕通信
接法:
- GND: 电源地
- VCC: 2.2V~5.5V
- SCL: CLK 时钟 (高电平 2.2V~5.5V)
- SDA: MOSI 数据 (高电平 2.2V~5.5V)
- CS:接地
#关于驱动代码,在下一篇文章详细讲解,作者正在整理文章
from machine import SoftI2C,Pin
from ssd1306 import SSD1306_I2C
import utime
vcc = Pin(19, Pin.OUT)
gnd = Pin(18, Pin.OUT)
led = Pin(25, Pin.OUT)
vcc.value(1)
gnd.value(0)
utime.sleep(1)
i2c = SoftI2C(scl = Pin(15),sda = Pin(14))
print("I2C设备号:" + str(i2c.scan()[0]))
oled = SSD1306_I2C(128, 64, i2c) #创建oled对象
while True:
led.toggle()
utime.sleep(3)
#屏幕上显示的图像
oled.text("Raspberry Pi", 0, 0)
oled.text("Pico", 80, 10)
oled.text("MicroPython", 0, 20)
oled.text("OLED(ssd1306)", 0, 40)
oled.show()
#为什么要弄个LED灯,这样可以看到我们的程序是否在正常运行,可以很直观地看到程序运行
图三:代码展示效果
SPI总线与OLED屏幕通信
import machine
from machine import Pin,SoftSPI
from ssd1306 import SSD1306_SPI
spi = SoftSPI(baudrate=80000000, polarity=0, phase=0, sck=Pin(15,Pin.OUT), sda=Pin(14,Pin.OUT)) #sck(D0)=6 sda(D1)=7
oled = SSD1306_SPI(128, 64, spi, Pin(4),Pin(5), Pin(10)) #4=dc 5=res 10=cs
oled.text("Raspberry Pi", 0, 0)
oled.text("Pico", 80, 10)
oled.text("MicroPython", 0, 20)
oled.text("OLED(ssd1306)", 0, 40)
oled.show()