[作品提交] 【得捷电子Follow me第1期】+ 点亮OLED

swzswz   2023-7-13 19:24 楼主

一.基础知识

OLED可以用I2C协议进行通信,主要包括sck,scl等两个接口进行通信。底板上有两个I2C接口,一个是I2C0,一个是I2C1接口。本例程我们使用的是I2C1接口,同时根据硬件原理图可知,其接线是两个接口是GP6和GP7接口。下图是其引脚原理图:

pico w引脚.png

其硬件接线为:

引脚接线.jpg 二.代码流程

代码流程可以分为主代码和模块代码,模块代码由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看到字符显示,结果如下。非常感谢群友们的帮助。

点亮.jpg

回复评论 (2)

主程序代码如下,其逻辑为首先生成一个I2C对象,再利用ssd306.py构造ssd1306_I2C对象,进而在oled进行操作,利用fill以及text函数进行文本显示,最后用show函数进行图像显示。

楼主的测试思路给大家说的很清楚了

点赞  2023-7-14 07:25
引用: Jacktang 发表于 2023-7-14 07:25 主程序代码如下,其逻辑为首先生成一个I2C对象,再利用ssd306.py构造ssd1306_I2C对象,进而在oled进行操作 ...

是的,感谢各位大佬的帮助。

点赞  2023-7-15 09:24
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复