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接口。所以我们要在硬件上对其进行处理。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWGFfTA==,size_18,color_FFFFFF,t_70,g_se,x_16

 

图一:0.96寸 7针 OLED显示屏,兼容SPI/I2C

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWGFfTA==,size_16,color_FFFFFF,t_70,g_se,x_16

 

图二: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灯,这样可以看到我们的程序是否在正常运行,可以很直观地看到程序运行

e5f125a3e96143048bac35810bf5d90d.png

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWGFfTA==,size_20,color_FFFFFF,t_70,g_se,x_16

图三:代码展示效果

 


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()

 

 

posted @ 2022-07-06 08:40  Xa_L  阅读(990)  评论(0编辑  收藏  举报