一.基础知识
OLED可以用I2C协议进行通信,主要包括sck,scl等两个接口进行通信。底板上有两个I2C接口,一个是I2C0,一个是I2C1接口。本例程我们使用的是I2C1接口,同时根据硬件原理图可知,其接线是两个接口是GP6和GP7接口。下图是其引脚原理图:
其硬件接线为:
代码流程可以分为主代码和模块代码,模块代码由ssd1306.py构成,起主要包括I2C接线引脚接口以及地址,其代码如下:
class SSD1306_I2C(SSD1306):
def __init__(self, width, height, i2c, addr=0x3C, external_vcc=False):
self.i2c = i2c
self.addr = addr
self.temp = bytearray(2)
self.write_list = [b"\x40", None] # Co=0, D/C#=1
super().__init__(width, height, external_vcc)
def write_cmd(self, cmd):
self.temp[0] = 0x80 # Co=1, D/C#=0
self.temp[1] = cmd
self.i2c.writeto(self.addr, self.temp)
def write_data(self, buf):
self.write_list[1] = buf
self.i2c.writevto(self.addr, self.write_list)
主程序代码如下,其逻辑为首先生成一个I2C对象,再利用ssd306.py构造ssd1306_I2C对象,进而在oled进行操作,利用fill以及text函数进行文本显示,最后用show函数进行图像显示。
from SSD1306 import SSD1306_I2C
#from ssd1306_1 import SSD1306_I2C
from machine import Pin, I2C
from time import sleep
# i2c = machine.I2C(1, sda=machine.Pin("GP6"), scl=machine.Pin("GP7"), freq=400000)
i2c = I2C(1, sda=Pin(6), scl=Pin(7), freq=400000)
# i2c = I2C(0, sda=Pin(2), scl=Pin(3), freq=400000)
print(i2c.scan())
# i2c.readfrom(0x3a, 4) # read 4 bytes from device with address 0x3a
# i2c.writeto(0x3a, '12') # write '12' to device with address 0x3a
oled = SSD1306_I2C(128, 64, i2c)
oled.fill(0) # clear
oled.text("Hello,Pico!", 0, 0, 1)
oled.show()
三.试验结果
烧录之后便可以在oled看到字符显示,结果如下。非常感谢群友们的帮助。
主程序代码如下,其逻辑为首先生成一个I2C对象,再利用ssd306.py构造ssd1306_I2C对象,进而在oled进行操作,利用fill以及text函数进行文本显示,最后用show函数进行图像显示。
楼主的测试思路给大家说的很清楚了
引用: Jacktang 发表于 2023-7-14 07:25 主程序代码如下,其逻辑为首先生成一个I2C对象,再利用ssd306.py构造ssd1306_I2C对象,进而在oled进行操作 ...
是的,感谢各位大佬的帮助。