找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 524|回复: 1
打印 上一主题 下一主题
收起左侧

esp32 s3驱动OLED屏SSD1306黑屏

[复制链接]
跳转到指定楼层
楼主
各位大神,哪位大神能指点下这是什么情况,感谢
   我在用源地的esp32s3 开发板驱动7针0.96 OLED屏显示。
可咋都驱动不亮,这个olde屏插到STM32开发板上就能政策显示
我的软件:micropython
开发板:源地ESP32 S3
OLED屏:7针SPI 0.96 SSD1306屏
开发板和屏连线:D0/SCK--P6;  D1/MOSI--P7;  RES/RST--P5;  DC--P4;  CS--P10;


主程序
main.py


ESP32-C3 OLED显示测试
元件:
    AI-THINKER ESP-C3-13/13U-KIT
    128*64 1306 OLED SPI/I2C
功能:
    ESP32-C3 OLED显示测试
'''


import machine
from machine import Pin,SoftSPI
from ssd1306 import SSD1306_SPI

spi = SoftSPI(baudrate=80000000, polarity=0, phase=0, sck=Pin(6,Pin.OUT), mosi=Pin(7,Pin.OUT), miso=Pin(8))
#sck(D0)=6 mosi(D1)=7 miso=unused
oled = SSD1306_SPI(128, 64, spi, Pin(4),Pin(5), Pin(10))
#4=dc 5=res 10=cs

oled.text("First line", 0, 0, 1)
oled.text("Second line", 0, 8, 1)
oled.text("Third line", 0, 16, 1)
oled.text("Forth line", 0, 24, 1)
oled.text("Fifth line", 0, 32, 1)
oled.text("Sixth line", 0, 40, 1)
oled.text("Seventh line", 0, 48, 1)
oled.text("Last line", 0, 56, 1)
oled.show()


# MicroPython SSD1306 OLED driver, I2C and SPI interfaces

from micropython import const
import framebuf

SSD1306程序
ssd1306.py
# register definitions
SET_CONTRAST = const(0x81)
SET_ENTIRE_ON = const(0xA4)
SET_NORM_INV = const(0xA6)
SET_DISP = const(0xAE)
SET_MEM_ADDR = const(0x20)
SET_COL_ADDR = const(0x21)
SET_PAGE_ADDR = const(0x22)
SET_DISP_START_LINE = const(0x40)
SET_SEG_REMAP = const(0xA0)
SET_MUX_RATIO = const(0xA8)
SET_IREF_SELECT = const(0xAD)
SET_COM_OUT_DIR = const(0xC0)
SET_DISP_OFFSET = const(0xD3)
SET_COM_PIN_CFG = const(0xDA)
SET_DISP_CLK_DIV = const(0xD5)
SET_PRECHARGE = const(0xD9)
SET_VCOM_DESEL = const(0xDB)
SET_CHARGE_PUMP = const(0x8D)

# Subclassing FrameBuffer provides support for graphics primitives

class SSD1306(framebuf.FrameBuffer):
    def __init__(self, width, height, external_vcc):
        self.width = width
        self.height = height
        self.external_vcc = external_vcc
        self.pages = self.height // 8
        self.buffer = bytearray(self.pages * self.width)
        super().__init__(self.buffer, self.width, self.height, framebuf.MONO_VLSB)
        self.init_display()

    def init_display(self):
        for cmd in (
            SET_DISP,  # display off
            # address setting
            SET_MEM_ADDR,
            0x00,  # horizontal
            # resolution and layout
            SET_DISP_START_LINE,  # start at line 0
            SET_SEG_REMAP | 0x01,  # column addr 127 mapped to SEG0
            SET_MUX_RATIO,
            self.height - 1,
            SET_COM_OUT_DIR | 0x08,  # scan from COM[N] to COM0
            SET_DISP_OFFSET,
            0x00,
            SET_COM_PIN_CFG,
            0x02 if self.width > 2 * self.height else 0x12,
            # timing and driving scheme
            SET_DISP_CLK_DIV,
            0x80,
            SET_PRECHARGE,
            0x22 if self.external_vcc else 0xF1,
            SET_VCOM_DESEL,
            0x30,  # 0.83*Vcc
            # display
            SET_CONTRAST,
            0xFF,  # maximum
            SET_ENTIRE_ON,  # output follows RAM contents
            SET_NORM_INV,  # not inverted
            SET_IREF_SELECT,
            0x30,  # enable internal IREF during display on
            # charge pump
            SET_CHARGE_PUMP,
            0x10 if self.external_vcc else 0x14,
            SET_DISP | 0x01,  # display on
        ):  # on
            self.write_cmd(cmd)
        self.fill(0)
        self.show()

    def poweroff(self):
        self.write_cmd(SET_DISP)

    def poweron(self):
        self.write_cmd(SET_DISP | 0x01)

    def contrast(self, contrast):
        self.write_cmd(SET_CONTRAST)
        self.write_cmd(contrast)

    def invert(self, invert):
        self.write_cmd(SET_NORM_INV | (invert & 1))

    def rotate(self, rotate):
        self.write_cmd(SET_COM_OUT_DIR | ((rotate & 1) << 3))
        self.write_cmd(SET_SEG_REMAP | (rotate & 1))

    def show(self):
        x0 = 0
        x1 = self.width - 1
        if self.width != 128:
            # narrow displays use centred columns
            col_offset = (128 - self.width) // 2
            x0 += col_offset
            x1 += col_offset
        self.write_cmd(SET_COL_ADDR)
        self.write_cmd(x0)
        self.write_cmd(x1)
        self.write_cmd(SET_PAGE_ADDR)
        self.write_cmd(0)
        self.write_cmd(self.pages - 1)
        self.write_data(self.buffer)

    def disp(self, s: str, x: int, y: int, c: int = 1):
        print('jjj')
        self.text('*'+s, x, y, c)

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)


class SSD1306_SPI(SSD1306):
    def __init__(self, width, height, spi, dc, res, cs, external_vcc=False):
        self.rate = 10 * 1024 * 1024
        dc.init(dc.OUT, value=0)
        res.init(res.OUT, value=0)
        cs.init(cs.OUT, value=1)
        self.spi = spi
        self.dc = dc
        self.res = res
        self.cs = cs
        import time

        self.res(1)
        time.sleep_ms(1)
        self.res(0)
        time.sleep_ms(10)
        self.res(1)
        super().__init__(width, height, external_vcc)

    def write_cmd(self, cmd):
        self.spi.init(baudrate=self.rate, polarity=0, phase=0)
        self.cs(1)
        self.dc(0)
        self.cs(0)
        self.spi.write(bytearray([cmd]))
        self.cs(1)

    def write_data(self, buf):
        self.spi.init(baudrate=self.rate, polarity=0, phase=0)
        self.cs(1)
        self.dc(1)
        self.cs(0)
        self.spi.write(buf)
        self.cs(1)

51hei图片_202304222012303.jpg (133.61 KB, 下载次数: 17)

51hei图片_202304222012303.jpg

51hei图片_202304222012302.jpg (138.22 KB, 下载次数: 16)

51hei图片_202304222012302.jpg

51hei图片_202304222012301.jpg (98.93 KB, 下载次数: 20)

51hei图片_202304222012301.jpg

51hei图片_20230422201230.jpg (157.97 KB, 下载次数: 18)

51hei图片_20230422201230.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:476652 发表于 2023-4-22 20:21 | 只看该作者
23-OLED 7SPI-4.rar (2.4 KB, 下载次数: 4)
这是源文件
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表