【MicroPython ESP32】1.8"tft ST7735带中文驱动显示示例


  • 本实例基于Thonny平台开发
  • 效果演示

驱动屏幕和开发板

  • 驱动屏幕采用的是合宙1.8"tft屏幕
  • 开发板采用的esp32Dev

接线说明

sck(SCL) =Pin(18)
mosi(SDA)=Pin(23)
dc = Pin(21)
cs = Pin(16)
rst(RES)= Pin(22)
BL--不接

MicroPython固件

  • 采用的是带中文字库的固件,固件资源下载地址:https://github.com/kaixindelele/ssd1306-MicroPython-ESP32-Chinese/

根据个人开发板情况选择对应的固件。

ST7735驱动模块

  • st7735.py代码(保存到MicroPython设备上)
from time import sleep_ms
from ustruct import pack
from machine import SPI,Pin
from micropython import const
import framebuf#   ST7735V registers definitionsNOP     = const(0x00) # No Operation
SWRESET = const(0x01) # Software resetSLPIN   = const(0x10) # Sleep in & booster off
SLPOUT  = const(0x11) # Sleep out & booster on
PTLON   = const(0x12) # Partial mode on
NORON   = const(0x13) # Partial off (Normal)INVOFF  = const(0x20) # Display inversion off
INVON   = const(0x21) # Display inversion on
DISPOFF = const(0x28) # Display off
DISPON  = const(0x29) # Display on
CASET   = const(0x2A) # Column address set
RASET   = const(0x2B) # Row address set
RAMWR   = const(0x2C) # Memory write
RGBSET  = const(0x2D) # Display LUT setPTLAR   = const(0x30) # Partial start/end address set
COLMOD  = const(0x3A) # Interface pixel format
MADCTL  = const(0x36) # Memory data access control# panel function commands
FRMCTR1 = const(0xB1) # In normal mode (Full colors)
FRMCTR2 = const(0xB2) # In Idle mode (8-colors)
FRMCTR3 = const(0xB3) # In partial mode + Full colors
INVCTR  = const(0xB4) # Display inversion controlPWCTR1  = const(0xC0) # Power control settings
PWCTR2  = const(0xC1) # Power control settings
PWCTR3  = const(0xC2) # In normal mode (Full colors)
PWCTR4  = const(0xC3) # In Idle mode (8-colors)
PWCTR5  = const(0xC4) # In partial mode + Full colors
VMCTR1  = const(0xC5) # VCOM controlGMCTRP1 = const(0xE0)
GMCTRN1 = const(0xE1)class ST7735(framebuf.FrameBuffer):def __init__(self, width, height, spi, dc, rst, cs, rot=0, bgr=0):if dc is None:raise RuntimeError('TFT must be initialized with a dc pin number')dc.init(dc.OUT, value=0)if cs is None:raise RuntimeError('TFT must be initialized with a cs pin number')cs.init(cs.OUT, value=1)if rst is not None:rst.init(rst.OUT, value=1)else:self.rst =Noneself.spi = spiself.rot = rotself.dc = dcself.rst = rstself.cs = csself.height = heightself.width = widthself.buffer = bytearray(self.height * self.width*2)super().__init__(self.buffer, self.width, self.height, framebuf.RGB565SW, self.width)if (self.rot ==0):madctl=0x00elif (self.rot ==1):madctl=0xa0elif (self.rot ==2):madctl=0xc0else :madctl=0x60if bgr==0:madctl|=0x08self.madctl = pack('>B', madctl)self.reset()self._write(SLPOUT)sleep_ms(120)for command, data in ((COLMOD,  b"\x05"),(MADCTL,  pack('>B', madctl)),):self._write(command, data)if self.width==80 or self.height==80:self._write(INVON, None)else:self._write(INVOFF, None)buf=bytearray(128)for i in range(32):buf[i]=i*2buf[i+96]=i*2for i in range(64):buf[i+32]=iself._write(RGBSET, buf)#self._write(NORON)#sleep_ms(10)self.show()self._write(DISPON)#sleep_ms(100)def reset(self):if self.rst is None:self._write(SWRESET)sleep_ms(50)returnself.rst.off()sleep_ms(50)self.rst.on()sleep_ms(50)def _write(self, command, data = None):self.cs.off()self.dc.off()self.spi.write(bytearray([command]))self.cs.on()if data is not None:self.cs.off()self.dc.on()self.spi.write(data)self.cs.on()def show(self):if self.width==80 or self.height==80:if self.rot==0 or self.rot==2:self._write(CASET,pack(">HH", 26, self.width+26-1))self._write(RASET,pack(">HH", 1, self.height+1-1))else:self._write(CASET,pack(">HH", 1, self.width+1-1))self._write(RASET,pack(">HH", 26, self.height+26-1))else:if self.rot==0 or self.rot==2:self._write(CASET,pack(">HH", 0, self.width-1))self._write(RASET,pack(">HH", 0, self.height-1))else:self._write(CASET,pack(">HH", 0, self.width-1))self._write(RASET,pack(">HH", 0, self.height-1))self._write(RAMWR,self.buffer)def rgb(self,r,g,b):return ((r&0xf8)<<8)|((g&0xfc)<<3)|((b&0xf8)>>3)

文件架构

实例驱动代码

from st7735 import ST7735
from machine import Pin,SPI
import time# 初始化SPI
spi=SPI(2, baudrate=20000000, polarity=0, phase=0, sck=Pin(18), mosi=Pin(23))# 初始化LCD  rot 是显示方向,bgr是默认显示的颜色
lcd= ST7735 (128, 160, spi,dc=Pin(21),cs=Pin(16),rst=Pin(22),rot=2,bgr=0)lcd.font_load('./GB2312-12.fon') # 加载字体 lcd.text("MicroPython嵌入式学习",2,5,0x5836)
lcd.text("Perseverance9527",16,19,0xff45)
lcd.text("Perseverance9527",16,33,0x07e0)
lcd.text("Perseverance9527",16,47,0xf800)
lcd.text("Perseverance9527",16,61,0xFFE0)
lcd.text("Perseverance9527",16,75,0xEF7D)
lcd.text("Perseverance9527",16,89,0x4208)
lcd.text("Perseverance9527",16,104,0x001f)
lcd.text("Perseverance9527",16,119,0x4208)
lcd.text("Perseverance9527",16,133,0x00ff)
lcd.text("Perseverance9527",16,147,0x0fff)
lcd.show() # 显示出来 
  • 运行代码前需要上传对应的字体达到MicroPython设备上。

【MicroPython ESP32】1.8“tft ST7735带中文驱动显示示例相关推荐

  1. 【MicroPython ESP32】手动配网和wifi信息保存示例

    [MicroPython ESP32]手动配网和wifi信息保存示例 本示例基于Thonny平台开发. 入网演示 配网机制 ESP32 Micropython运行后,首先从目录下读取json配置文件信 ...

  2. Arduino框架下ESP32+合宙1.54“ 电子墨水屏(e-paper)驱动显示示例

    Arduino框架下ESP32+合宙1.54" 电子墨水屏(e-paper)驱动显示示例 显示效果展示; 合宙1.54" 电子墨水屏 有关合宙1.54"电子墨水屏的介绍资 ...

  3. [转载]url带中文参数显示乱码的问题

    原文地址:http://www.cnblogs.com/inday/archive/2008/01/12/1035902.html 如果想在repeater 之类中绑定图片,请使用HTML图片按钮, ...

  4. java 中文 编译_java编译带中文是显示乱码的错误

    FirstJava.java:3: 错误: 编码GBK的不可映射字符 System.out.println("娆㈣繋瀛︿範Java绋嬪簭锛?")锛? ^ FirstJava.jav ...

  5. 【MicroPython ESP32】1.8“tft ST7735驱动3Dcube图形显示示例

    [MicroPython ESP32]1.8"tft ST7735驱动3Dcube图形显示示例 本实例基于Thonny平台开发 效果演示(Gif录制,帧率上不来,有重影,实际效果没有,很流畅 ...

  6. micropython开发idethonny_用ESP32+MicroPython+Thonny点亮WS2812灯带

    本帖最后由 gada888 于 2019-4-30 14:31 编辑 尽管python的编程软件很多,anaconda,pycharm or python ide.个人认为最好用的是Thonny.虽然 ...

  7. 【MicroPython ESP32】ssd1306驱动0.96“I2C屏幕+mpu6050图形控制

    [MicroPython ESP32]ssd1306驱动0.96"I2C屏幕+mpu6050图形控制 效果演示 随着mpu6050模块的移动,oled屏幕矩形线框内的小方块也随对应的方向移动 ...

  8. 自编译 micropython ESP32固件指南以及16MB固件分享

    自编译 micropython ESP32固件攻略以及16MB/8MB固件分享 本教程是连续奋斗了好几天才走向编译成功的.一路都是采坑过来的,为了后面学习者少走弯路少采坑的原则,这里将分享microp ...

  9. qu32调音台说明书_使用效果不错艾伦赫赛QU32调音台带中文说明书_北京金舒恺歌科技发展有限公司(亿商网手机版)...

    使用效果不错艾伦赫赛QU-32调音台带中文说明书 ALLEN&HEATH/艾伦赫赛 QU-32 32路专业数字台调音台 技术参数: 输入 话筒/线路输入1-16(Qu-16) 1-24(Qu- ...

最新文章

  1. Bitcoin ABC首席开发者回应有关比特币现金的提问(二)
  2. morlet包络检波matlab,布里渊光纤传感系统中的信号处理的研究
  3. 掌握这35 个小细节,助你有效提升 Java 代码的执行效率!
  4. ESP8266固件的下载
  5. boost::json::value用法的测试程序
  6. Ubuntu之重新安装软件
  7. Linux_Tips
  8. Android连接蓝牙打印机
  9. mysql5.6.1安装步骤_mysql5.6安装步骤
  10. Python与数据分析
  11. ResNet网络结构详解,网络搭建,迁移学习
  12. 魔兽世界钓鱼大赛冠军心得
  13. Windows下安装Ubuntu16.04 及 Ubuntu常用软件配置 完全版 ~吐血整理!
  14. 平方数列、立方数列求和公式与推导
  15. 架也不吵了!谷歌大脑、DeepMind团结对抗OpenAI
  16. 【网络篇】第二篇——IP协议与MAC地址详解
  17. Android Canvas Layers
  18. 中国国内航线信息的可视化
  19. 平摊分析的三种方法(聚集、会计和势能)+举例(栈操作、二进制加法器、动态表)
  20. Flask Web开发基础实战-1.0用户认证与注册模块

热门文章

  1. 施耐德电气庞邢健:以软件撬动可持续的未来工业
  2. 3-4 3.4编程计算一元二次方程的根
  3. 夏普在中国推出三款 AQUOS PHONE 系列智能机
  4. 卡通动漫人物角色绘画学习教程
  5. WIZnet 物联网设计大赛 - WizFi360大赛延迟通知
  6. 进制转换--《十进制》
  7. 杰理之在music模式下开混响,喊麦会卡音的处理方法【篇】
  8. Knowledge-Driven Distractor Generation for Cloze-Style Multiple Choice Questions翻译
  9. 怎么让人爆照_这样拍可以让你的照片“爆炸”
  10. adb interface找不到驱动程序Android Studio (学习记录)