【MicroPython ESP32】ssd1306驱动0.96“I2C屏幕cube3D图形显示

【MicroPython ESP32】ssd1306驱动0.96“I2C屏幕cube3D图形显示


  • cube3D效果

原例程最早在一个Arduino ssd1306 i2c库的示例中可以找到这个示例:http://www.rinkydinkelectronics.com/library.php?id=80

在这里插入图片描述

依赖ssd1306.py模块

cube3D示例代码

这里所使用的软I2C接口,也预留了硬件I2C接口来驱动。

from math import cos,sin,pi
from machine import SoftI2C,Pin
# from ssd1306 import SSD1306_I2C
sda=Pin(25)
scl=Pin(26)
cube=[[-15,-15,-15],[-15,15,-15],[15,15,-15],[15,-15,-15],[-15,-15,15],[-15,15,15],[15,15,15],[15,-15,15]]
lineid=[1,2,2,3,3,4,4,1,5,6,6,7,7,8,8,5,8,4,7,3,6,2,5,1]

# i2c=machine.I2C(0,sda=sda,scl=scl,freq=400000)
i2c = SoftI2C(scl=scl,sda=sda)
oled = SSD1306_I2C(128, 64,i2c,addr=0x3c)
oled.fill(0)

def matconv(a,matrix):
    res=[0,0,0]
    for i in range(0,3):
        res[i]=matrix[i][0]*a[0]+matrix[i][1]*a[1]+matrix[i][2]*a[2]
    for i in range(0,3):
        a[i]=res[i]
    return a

def rotate(obj,x,y,z):
    x=x/pi
    y=y/pi
    z=z/pi
    rz=[[cos(z),-sin(z),0],[sin(z),cos(z),0],[0,0,1]]
    ry=[[1,0,0],[0,cos(y),-sin(y)],[0,sin(y),cos(y)]]
    rx=[[cos(x),0,sin(x)],[0,1,0],[-sin(x),0,cos(x)]]
    matconv(matconv(matconv(obj,rz),ry),rx)
    
def drawcube(x,y,z):
    oled.fill(0)
    for i in range(0,8):
        rotate(cube[i],x,y,z)
    for i in range(0,24,2):
        x1=int(64+cube[lineid[i]-1][0])
        y1=int(32+cube[lineid[i]-1][1])
        x2=int(64+cube[lineid[i+1]-1][0])
        y2=int(32+cube[lineid[i+1]-1][1])
        oled.line(x1,y1,x2,y2,1)
        #print(64+cube[lineid[i]-1][0],32+cube[lineid[i]-1][1],64+cube[lineid[i+1]-1][0],32+cube[lineid[i+1]-1][1])
    oled.show()
    
while True:
    drawcube(0.1,0.2,0.3)






  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值