MicroPython驱动ST7735屏幕:从接线到显示的全攻略 简介面向MicroPython开发者的TFT液晶屏驱动资源基于ST7735主控芯片适用于树莓派Pico、ESP32等常见微控制器解决在资源受限环境下驱动小型彩色屏幕、显示图形与文本的问题。压缩包体积仅8KB包含两个Python脚本一个承担核心驱动功能涵盖GPIO引脚配置、屏幕初始化支持128x160分辨率、16位或18位颜色模式及旋转设置、SPI命令发送、颜色转换、点线绘制、清屏以及文本输出等另一个提供基础ASCII字库负责将字符点阵快速渲染到屏幕上二者结合即可完成一个完整的显示系统。该资源已有4062人学习下载代码量小、结构清晰既适合嵌入式初学者对照理解驱动芯片工作原理也可供有经验开发者直接移植复用。阅读源码不仅能够掌握MicroPython中SPI通信与缓冲区刷新的性能优化技巧还能从中提炼出适用于其他SPI接口屏幕的通用驱动思路快速实现自定义显示界面、小仪表盘或嵌入式交互原型。1. 项目概述与驱动方案选型1.1 ST7735是什么ST7735是矽创电子Sitronix出品的一颗TFT-LCD控制器芯片最常见的搭配是1.8寸128x160分辨率的SPI接口屏幕模块。这类屏幕在淘宝、闲鱼上遍地都是价格十几块钱到二十几块钱不等是DIY爱好者做小仪表盘、桌面摆件、温湿度显示器、复古游戏机最常用的屏幕之一。这颗芯片本身支持262K色RGB666内置GRAM缓冲理论上刷新率可以做到比较可观。因为走的是SPI总线引脚占用很少接4根线CLK、MOSI、CS、DC加上电源和复位就能跑起来。如果用C语言在STM32或者ESP32上驱动它网上资料一抓一大把但换到MicroPython生态里很多新手反而会在驱动初始化、偏移量配置、颜色格式这些细节上卡住。这也是我写这篇文章的原因——用MicroPython把这块屏幕真正点亮并且把那些文档里没写明白的坑一个个填平。需要说明的是市面上大量“1.8寸TFT屏幕模块”虽然几乎都标注ST7735但实际用的芯片版本可能有细微差异——常见的有ST7735R和ST7735S两种初始化序列和显示区域偏移量不完全相同。后面我会专门讲这两个变体的区别。1.2 为什么用MicroPython驱动拿MicroPython驱动ST7735最大的优势是开发效率。用C语言驱动时改一个参数、调一个显示效果都要走“改代码→交叉编译→烧录→看效果”的循环一次循环少说一两分钟。MicroPython直接在终端里敲命令就能控制屏幕写一个函数就能实时看效果调试体验完全不在一个量级。另外一个实际好处是内存管理不用自己操心。ST7735的GRAM有128x160x2字节约40KB并不算大但如果你用SPIRAM或者更复杂的显示方案C语言里所有缓冲区都要手动分配。MicroPython里不管是内置的framebuf模块还是外部库缓冲区的分配和回收都是运行时自动完成的对原型验证阶段来说省了很多事。缺点是性能上限低。纯MicroPython驱动刷全屏实测下来大概只有每秒几帧的水平做动态游戏肯定不行。但做数据显示、菜单、仪表这类应用刷新频率也就每秒一两次体验足够了。如果以后需要提高性能可以把绘制热点逻辑下沉到C模块或者直接用ESP32的DMA SPI双缓冲方案这是后话。1.3 整体方案架构完整项目分四层硬件层主控ESP32或ESP8266 ST7735屏幕模块 电源/杜邦线固件层MicroPython固件驱动层ST7735的Python驱动模块负责初始化、像素读写、区域刷新应用层你的业务代码——显示文字、绘制图形、更新数据硬件选型上ESP32是首选原因是内存充裕、SPI外设完整MicroPython在ESP32上的支持也非常活跃。ESP8266也能跑但内存紧张刷全屏时容易撑爆后面会讲怎么应对。软件方案上有两种路线。第一种是用现成的第三方库比如Guy Carver的st7735.py功能全但代码量偏大适合追求功能完整的人。第二种是自己写精简驱动核心逻辑就几十行适合学习和深度定制。这篇文章两种都会覆盖但重点放在我自己用下来的精简版方案上。2. 硬件准备与关键接线2.1 主控与屏幕选型先说屏幕模块。市面上常见两种ST7735模块类型颜色接口特点红色PCB模块红色8pin有些带MISO用的是ST7735R芯片初始化序列经典绿色PCB模块绿色8pin/10pin多用ST7735S芯片偏移量和复位时序略有差异如果你不确定手头屏幕是哪颗芯片有两个办法一是看模块背面的丝印但很多没标二是直接试初始化序列——用ST7735R的初始化跑绿板多半会花屏或偏色换ST7735S的序列就正常。我手头这两块屏幕实测红板用R序列、绿板用S序列能稳定工作。主控选择方面我的建议排序是ESP32 DevKit ESP32-S3 ESP8266。如果你手头只有ESP8266也能跑但内存余量很小最好用定制固件或者接受刷屏慢一点的事实。ESP32的价格也不贵乐鑫原厂模组做的小开发板三十块上下体验好很多。2.2 引脚接线对照ST7735常见的引脚定义如下LED / BLK / BL背光控制高电平点亮SCL / SCK / CLKSPI时钟SDA / MOSI / DINSPI数据主机输出CS / SS片选低电平有效DC / RS / A0数据/命令选择RESET / RST复位低电平有效VCC3.3V电源GND地注意这个模块一般不接MISO因为ST7735的数据读取在多数应用里用不到驱动库默认不读取屏幕内容。所以SPI只需要三根线CLK、MOSI、CS。接线对照表如下ESP32 DevKit为例ST7735引脚ESP32引脚VCC3.3VGNDGNDLED3.3V或GPIO4PWM控制亮度SCLGPIO18SDAGPIO23CSGPIO5DCGPIO17RESETGPIO16ESP8266对照ST7735引脚ESP8266引脚VCC3.3VGNDGNDLED3.3VSCLGPIO14D5SDAGPIO13D7CSGPIO15D8DCGPIO2D4RESETGPIO16D0初始化代码里SPI引脚用的是GPIO编号不是开发板上丝印的数字接线时候一定要对照引脚定义查清楚。这个坑我见得太多了——有人看板子上写着D5就直接在代码里写Pin(5)结果D5实际是GPIO14屏幕死活不亮一查全是这个问题。2.3 硬件上的两个易错点供电问题比你想的更常见。ST7735模块的BL引脚如果不做控制直接接高电平背光LED全亮时电流可以到40到60mA左右加上屏幕内部逻辑和GRAM刷新峰值电流接近100mA。这个电流USB供电完全没问题但如果你用ESP32板载的3.3V LDO供电并且同时接了其他传感器模块LDO的输出能力可能扛不住导致电压跌落屏幕出现花屏或间歇性白屏。我的建议是背光单独用一个GPIO控制不要长期直连3.3V这样还能顺便通过PWM调亮度如果有多块外设优先用外部3.3V电源统一供电。电平转换问题。如果你的主控是5V逻辑例如Arduino UnoST7735的3.3V IO规范不允许5V信号直接输入需要加电平转换芯片。但ESP32、ESP8266都是3.3V逻辑直接接线没问题。这里提醒一下电脑USB转串口的板子比如常见的CH340、CP2102模块输出如果是5V供电给ESP32开发板供电时走的是板载稳压器一般没问题但别把5V直接接到ST7735的VCC上会烧。设备枚举时电脑识别不到ESP32板卡的COM口这个情况基本都出在USB转串口芯片的驱动没装好——CH340和CP2102是最常见的两颗芯片Windows系统经常不会自动装驱动。这个问题我会在下一章单独讲。3. 固件烧录与环境搭建3.1 烧录MicroPython固件MicroPython官方发布的固件里ESP32和ESP8266的稳定版都可以直接从MicroPython官网下载。以ESP32 DevKit为例下载esp32-20240602-v1.23.0.bin这种命名的固件文件然后用esptool烧录。烧录前先确保你已经装好了esptool。我推荐用Python的pip安装pip install esptool烧录步骤按住ESP32板上的BOOT/IO0按键同时插上USB线让板子进入下载模式。查看系统设备管理器确认COM端口号。先擦除Flash这一步很关键不擦除直接烧容易出奇怪问题esptool --chip esp32 --port COM3 erase_flash烧录固件esptool --chip esp32 --port COM3 --baud 460800 write_flash -z 0x1000 esp32-20240602-v1.23.0.bin0x1000是ESP32固件烧录的固定偏移地址不能改。ESP8266用的是0x0000别混了。如果esptool报错提示无法连接或超时最常见的原因是板子没进入下载模式、COM口选错、或者串口芯片驱动有问题。逐个排查即可。3.2 串口驱动与工具链关于COM口识别问题我要专门说一句。市面上绝大多数ESP32开发板用的USB转串口芯片是CH340或CP2102这两颗芯片在Windows下经常没有预装驱动设备管理器里显示的是“未知设备”或带黄色感叹号。网络热词里大量出现“ch340串口驱动”“cp2102驱动官网下载”这类搜索说明这个坑绊倒了非常多的人。解决方法很简单去芯片原厂的驱动页面下载对应驱动安装CH340下载沁恒官网的驱动CP2102下载芯科Silicon Labs的驱动。安装完重新插拔USB线设备管理器里就会出现正常的COM口。顺带一句ST-Link和J-Link调试器用的驱动是另外一回事MicroPython开发用不到但如果你同时玩STM32这些也要装好。固件烧录完成后推荐两款工具Thonny图形界面、开箱即用内置MicroPython终端和文件上传下载面板很适合新手。ampy命令行工具适合脚本化操作。用pip安装adafruit-ampy然后ampy --port COM3 put main.py上传文件。我在实际工作中两个都用——日常调试用Thonny批量部署用ampy写脚本。4. 核心驱动实现与初始化序列4.1 初始化序列为什么不能省ST7735上电后芯片内部默认状态并不适合直接显示数据。必须按照芯片手册的要求发送一串初始化命令完成软件复位、睡眠唤醒、像素格式设置、显示方向设置、显示开关这些步骤才能正常显示。这个初始化序列是ST7735驱动里最核心、也最容易被忽略的部分。很多新手从网上抄了一段代码发现屏幕能亮就以为搞定了。实际上初始化序列里每个命令都有它存在的意义举个例子SWRESET软件复位让芯片回到已知状态SLPOUT退出睡眠模式开始内部振荡器和DC/DC转换器COLMOD设置像素格式为RGB565即每个像素2字节MADCTL设置扫描方向和颜色顺序这个寄存器直接影响显示方向和RGB/BGRCASET/RASET设置列地址和行地址范围RAMWR开始写显存数据DISPON打开显示如果漏掉SLPOUT屏幕大概率白屏MADCTL里BGR位没设对颜色会偏成红蓝互换COLMOD设错图像会完全花掉。所以初始化序列不是“能跑就行”理解了才容易排错。4.2 MicroPython最小驱动代码我给出一个精简版驱动框架删除后大约只有100行功能覆盖初始化、画点、填充矩形、显示图片。完整驱动逻辑可以在此基础上扩展。首先定义基础写命令和写数据的函数import machine import time # 引脚定义 CS machine.Pin(5, machine.Pin.OUT) DC machine.Pin(17, machine.Pin.OUT) RST machine.Pin(16, machine.Pin.OUT) BL machine.Pin(4, machine.Pin.OUT) # SPI初始化频率建议先低后高调试阶段用20MHz spi machine.SPI(2, baudrate20000000, polarity0, phase0, sckmachine.Pin(18), mosimachine.Pin(23)) def write_cmd(cmd): CS.value(0) DC.value(0) spi.write(bytes([cmd])) CS.value(1) def write_data(data): CS.value(0) DC.value(1) if isinstance(data, int): data bytes([data]) spi.write(data) CS.value(1)然后是ST7735R的初始化序列红板默认def init_st7735r(): RST.value(1) time.sleep_ms(50) RST.value(0) time.sleep_ms(50) RST.value(1) time.sleep_ms(150) write_cmd(0x01) # SWRESET time.sleep_ms(150) write_cmd(0x11) # SLPOUT time.sleep_ms(200) write_cmd(0xB1); write_data([0x01, 0x2C, 0x2D]) # FRMCTRL1 write_cmd(0xB2); write_data([0x01, 0x2C, 0x2D]) # FRMCTRL2 write_cmd(0xB3); write_data([0x01, 0x2C, 0x2D, 0x01, 0x2C, 0x2D]) # FRMCTRL3 write_cmd(0xB4); write_data(0x07) # INVCTR write_cmd(0xC0); write_data([0xA2, 0x02, 0x84]) # PWCTR1 write_cmd(0xC1); write_data(0xC5) # PWCTR2 write_cmd(0xC2); write_data(0x0A) # PWCTR3 write_cmd(0xC3); write_data(0x8A) # PWCTR4 write_cmd(0xC4); write_data(0x8A) # PWCTR5 write_cmd(0xC5); write_data(0x0E) # VMCTR1 write_cmd(0x36); write_data(0xC8) # MADCTL方向RGB/BGR write_cmd(0x3A); write_data(0x05) # COLMODRGB565 write_cmd(0x2A); write_data([0x00, 0x02, 0x00, 0x81]) # CASETx2~129 write_cmd(0x2B); write_data([0x00, 0x01, 0x00, 0xA0]) # RASETy1~160 write_cmd(0xE0) # GMCTRP1Gamma校正 write_data([0x02, 0x1C, 0x07, 0x12, 0x37, 0x32, 0x29, 0x2D, 0x29, 0x25, 0x2B, 0x39, 0x00, 0x01, 0x03, 0x10]) write_cmd(0xE1) # GMCTRN1 write_data([0x03, 0x1D, 0x07, 0x06, 0x2E, 0x2C, 0x29, 0x2D, 0x2E, 0x2E, 0x37, 0x3F, 0x00, 0x00, 0x02, 0x10]) write_cmd(0x13) # NORON time.sleep_ms(10) write_cmd(0x29) # DISPON time.sleep_ms(100)这个初始化序列里CASET和RASET设置的起始地址非常关键。ST7735的GRAM实际比显示区域大分辨率是132x162而可见区域是128x160所以需要设置列偏移通常用x2、y1。如果你的屏幕显示区域左移或右移了几个像素就是这两个参数没设对。我在实际项目里遇到最典型的案例是买回一块屏所有代码都一样但画面整体右移了3个像素——把CASET的起始列从0改成3就固定了。4.3 偏移量与屏幕变体适配ST7735R和ST7735S的区别主要体现在初始化序列和偏移量上。上面这段序列是ST7735R的通用序列如果你用的是绿板或者某些杂牌模块画面出现花屏、镜像、或者整体偏移优先排查三点初始化序列是否匹配芯片版本ST7735S需要把部分时序命令精简掉尤其是FRMCTRL和PWCTR相关的命令发多了反而会出问题。偏移量offset_x和offset_y。常见值组合是(0, 0)、(1, 2)、(2, 1)、(0, 168-160)等。我在驱动里会做成可配置参数方便快速试出来。颜色格式是RGB还是BGR。MADCTL的bit6是RGB/BGR控制位设为1时是BGR顺序设为0时是RGB顺序。用最笨的办法验证在屏幕上画一块纯红色区域如果显示出来是蓝色说明颜色顺序需要翻转。这一步非常建议在点亮初期就验证不然后面做UI时颜色全乱了你都不知道错在哪。画点函数和填充矩形函数def set_window(x0, y0, x1, y1): write_cmd(0x2A) write_data([(x0 8) 0xFF, x0 0xFF, (x1 8) 0xFF, x1 0xFF]) write_cmd(0x2B) write_data([(y0 8) 0xFF, y0 0xFF, (y1 8) 0xFF, y1 0xFF]) write_cmd(0x2C) def fill_rect(x0, y0, w, h, color): set_window(x0, y0, x0 w - 1, y0 h - 1) data color.to_bytes(2, big) buf data * (w * h) write_data(buf)用fill_rect刷全屏蓝色init_st7735r() BL.value(1) fill_rect(0, 0, 128, 160, 0x001F) # 蓝色按下复位键如果屏幕整个变蓝说明基础驱动已经通了。5. 显示文字与简单UI的实现技巧5.1 基础图形绘制有了fill_rect画线、画框、画圆都可以基于像素操作实现。最简单的是直接用framebuf模块。MicroPython自带framebuf可以先把图形绘制到内存缓冲区再一次性传给ST7735。这种模式的好处是API简单——line、rect、hline、vline、text这些方法都有绘制完再blit到屏幕。import framebuf # 创建一个128x160的RGB565缓冲区每像素2字节 buf bytearray(128 * 160 * 2) fb framebuf.FrameBuffer(buf, 128, 160, framebuf.RGB565) # 在内存里画一个红色矩形 fb.fill_rect(10, 10, 50, 30, 0xF800) # 把整个缓冲区推到屏幕 fill_rect(0, 0, 128, 160, 0x0000) # 先清屏 write_data(buf)注意framebuf的RGB565颜色格式和ST7735的RGB565格式不一定完全对应具体要看MADCTL里BGR位是否一致。我遇到过framebuf画出来颜色全反的情况后来在framebuf.FrameBuffer初始化参数里调整了颜色格式选项才解决。framebuf的位深模块在最新固件里改过几次用的时候留意一下版本差异。5.2 英文和数字显示英文字符的显示思路是用8x8或8x16点阵字模把每个字符对应成一组字节然后逐个bit绘制。最简单的方式是用framebuf.text()内置方法但内置字体只支持ASCII且字体较小。如果想做大字号、不同样式的数字可以用sdfonts或者加载外部位图字体。我在做仪表界面时常用的做法是这样# framebuf内置8x8字体 fb.text(Temp:, 0, 0, 0xFFFF) # 刷新窗口更新到屏幕字体选择上Guy Carver的sysfont.py里也内置了一组8x8的英文字体配合他的st7735.py库直接可以用风格比较接近工业屏的显示效果。如果只是显示几个数字完全不用引入大字体库用内置的就够了。5.3 中文显示方案ST7735没有内置中文字库MicroPython自带的framebuf也不支持中文。解决方案通常有两种第一种是图片转字模方案。用PC端工具如PCtoLCD2002、img2lcd把需要的中文字符渲染成指定字号的点阵数据转成字节数组嵌入代码然后用绘制函数逐像素输出。这种方案适合固定显示少量中文比如“温度”“湿度”“状态”字模数据量不大读取快。第二种是图片方案。把中文字符用PIL渲染成整张图片显示时直接解码显示。这样做灵活但需要解码图片或使用BMP/RGB565裸数据内存消耗大。我一般只在开机画面或者需要展示完整Logo时才用这种方式。中文字模方案一个实用的技巧是把常用的几十个汉字做成一个字库表每个字对应一个字节数组运行时用字典查字模。我做过一个温湿度计需要显示“温度”“湿度”“正常”“警告”等字总共20个汉字字模表占用大约1KB完全没压力。5.4 UI布局实战做一个简单的仪表面板我建议的布局流程是清屏填充背景色。顶部一行显示标题英文数字用framebuf.text完成。中部大字号显示数值可以用放大字体算法或者直接用大字号字模。底部一行用小字显示状态信息。每次更新数值时只刷新变化区域的窗口不用全屏刷新速度能快很多。这个流程看起来简单但实际写的时候有一个“刷新频率翻车”的常见问题如果你每次都全屏write_data(buf)在ESP32上至少得等几十毫秒刷新快了就能感觉到闪烁。优化方式是把静态内容和动态内容分两个缓冲区页面上只有数值部分变化时只刷新数值所在的小窗口。这个优化在线程循环更新数据时效果明显画面稳定很多。6. 常见问题与排查实录6.1 白屏/黑屏排查白屏是ST7735最经典的问题——屏幕看起来亮了背光工作但整屏白色没有任何内容。黑屏则是背光都没亮。排查顺序建议如下先确认背光引脚。如果BL直连3.3V依然黑屏用万用表量VCC对GND是否真的3.3V很多杜邦线接触不良或者面包板松动会导致供电不稳。确认复位引脚。RESET悬空或错误接法会让芯片一直处于复位状态。检查你的RST.value(1)代码是否执行到。确认SLPOUT和DISPON是否发送。初始化序列里漏掉这两个命令屏幕会白屏。这里注意白屏的本质是背光亮了但显示区域没有数据说明芯片没进入显示状态。确认CS和DC引脚是否接反。把DC和CS对调屏幕完全无反应。给一个快速判断方法写一个循环不停地拉低CS、翻转DC用示波器或者逻辑分析仪看波形。没有仪器的话就直接交换两脚再初始化一次。我自己的经验是白屏问题90%以上出在初始化序列或者复位时序上而不是SPI数据错误。因为SPI数据错了通常表现出来是花屏而非白屏。6.2 花屏/闪烁花屏通常意味着SPI通信不稳定或者参数不匹配。排查点SPI速率太高。ST7735的SPI时钟理论上能到几十MHz但实际要看你用的杜邦线有多长、有没有干扰。杜邦线超过10cm就有风险。我实测ESP32上20MHz很稳定上到40MHz就偶尔出现花屏。长线连接时降到10MHz很管用。数据线交叉干扰。SCL和SDA两线远离电源线并且最好不要用长跳线能短则短。RAM缓冲区溢出。如果你用了framebuf检查缓冲区大小是否和分辨率匹配。128x160x2是40960字节如果用RGB565模式却分配了1字节/像素那刷新时必然越界导致画面随机花。闪烁的另外一个原因每次更新界面时先把全屏刷成黑色再绘制内容。这个做法不仅慢而且视觉上闪得厉害。正确做法是只更新变化区域用set_window限定刷新范围。6.3 颜色偏色/镜像/偏移这类问题基本都指向MADCTL寄存器配置。MADCTL命令0x36的每一位控制扫描方向、行序、列序和RGB/BGR顺序。常见现象和修复方式现象原因改法颜色整体偏红/偏蓝RGB/BGR位设反0x36的bit3翻转画面上下左右镜像MY/MX位设反0x36的bit7/bit6翻转画面整体偏移偏移量不对调整CASET/RASET的起始坐标画面局部颜色错误Gamma设置错误检查E0/E1参数是否符合芯片序列我踩过最典型的一个坑在某块绿板上用ST7735R序列能显示但颜色偏得离谱红色显示成绿色。最开始我以为是BGR位问题把bit3翻来翻去都不对。后来换用ST7735S的初始化序列颜色就正常了。所以记住先确认芯片版本再调颜色位顺序不要反。6.4 内存不足的问题你如果用的是ESP8266在初始化framebuf缓冲区时很可能直接报内存错误。ESP8266的可用RAM只有几十KB128x160x2的40KB缓冲区很可能把堆撑爆。三种缓解方案使用1字节/像素的RGB332或灰度格式但ST7735原生支持RGB565需要转换层代码稍微复杂。分块刷新。把屏幕分成几个区域每个区域一个小缓冲区绘制完一块就写一块。换ESP32。说句实话如果项目不是特别受限于成本直接换ESP32最省心。我在ESP8266上做温湿度计的时候为了在小内存下流畅更新采用了分块刷新方案最上面一块状态区中间一大块数值区底部一小块日志区三个区域各自独立缓冲。整个项目跑下来内存占用控制在30KB以内实测稳定运行一周没有内存溢出。这个思路放在任何小内存单片机上都有参考意义。6.5 关于“第一次上电正常第二次白屏”的怪问题有朋友遇到过一种很诡异的情况板子断电再上电屏幕白屏但按一下复位键就正常显示。第一次排查很容易懵。这个问题的根源通常是上电时序。SPI通信初始化跑得太快ST7735内部的DC/DC转换器还没稳定你发送的初始化命令直接被忽略了。解决方案是在初始化前增加延时把RST拉低后至少等待120ms再释放同时SLPOUT之后多延时200ms。我在驱动里已经把延时写进去了如果你自己写驱动这个细节特别重要。提示MicroPython里time.sleep_ms()在启动阶段精度没问题但如果你用了utime模块要注意版本差异。7. 个人体验与后续扩展驱动ST7735这件事说难不难说简单也有不少细节。我前后调过五六块不同厂商的屏幕每块屏的“脾气”都不完全一样但只要你掌握了初始化序列、偏移量、颜色格式这三个核心点剩下的事情就是水到渠成。给刚入坑的朋友几个实际建议不管是红色板还是绿色板点亮后第一件事不是写UI而是做三个基础验证——全屏单色显示、画几个已知颜色的方块、显示一行英文。这三项通过说明硬件链路和驱动链路都是通的后面再做复杂功能心里就有底了。调试时用固定IP地址或者干脆用命令行交互环境。MicroPython最强的地方就是你在REPL里可以直接敲命令试不用反复重新烧录。我经常直接在thonny的Shell里输入fill_rect(0, 0, 128, 160, 0x001F)屏幕立刻变蓝整个过程不到一秒钟这种调试体验C语言没法比。如果想继续深入这个项目还有很多扩展方向通过PWM调节背光实现“夜晚模式”把ST7735和传感器组合做桌面天气站或者用ESP32的WiFi能力做远程数据监测屏。这个芯片的底子足够你玩很久。本文还有配套的精品资源点击获取

相关新闻

最新新闻

语音控制Minecraft换地形:RCON实现与服务器崩溃排查

语音控制Minecraft换地形:RCON实现与服务器崩溃排查

把“喊生物群系名就替换地形”做成一套能玩的系统,比想象中容易,也比想象中危险。最近我在一个 Minecraft 服务器上接了一套语音控制实验:玩家对着麦克风喊“改成沙漠”“切到雪原”“来一片樱花树林”,系统识别出目标生物群系后&…

2026/9/1 10:46:48
扑翼仿真入门:从叶素法到CFD的完整避坑路线

扑翼仿真入门:从叶素法到CFD的完整避坑路线

简介:这套资源是一份基于Python的扑翼机仿真与计算工具包,面向扑翼飞行器、仿生蝴蝶等方向的初学者和研究者,帮助解决扑翼运动中的空气动力学建模、升力/功率估算等基础问题。包内脚本覆盖升力模型、平均力积分、功率平衡、升力线矩阵、弹簧图…

2026/9/1 10:46:48
DSH Desktop窗口模式怎么选?兼容、扩展与增强三模式横评+原生材质指南

DSH Desktop窗口模式怎么选?兼容、扩展与增强三模式横评+原生材质指南

DSH Desktop窗口模式怎么选?兼容、扩展与增强三模式横评原生材质指南 【免费下载链接】deepseek-harness-desktop 为 DeepSeek Harness (DSH) 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。 项目地址: https://gitcode.…

2026/9/1 10:46:48
CyberChef 加密解密与数据处理完整指南

CyberChef 加密解密与数据处理完整指南

CyberChef 加密解密与数据处理完整指南 【免费下载链接】CyberChef The Cyber Swiss Army Knife - a web app for encryption, encoding, compression and data analysis 项目地址: https://gitcode.com/GitHub_Trending/cy/CyberChef CyberChef 是一个运行在浏览器里的…

2026/9/1 10:46:48
LaTeX入门指南:从零开始掌握学术排版,高效撰写论文与讲义

LaTeX入门指南:从零开始掌握学术排版,高效撰写论文与讲义

在实际的教学、科研和学术写作中,Word 等所见即所得的工具在处理复杂公式、交叉引用、文献管理和格式一致性时,常常显得力不从心。许多教师、研究生和工程师都听说过 LaTeX 的强大,但往往被其看似陡峭的学习曲线和复杂的安装配置过程劝退。La…

2026/9/1 10:46:47
泰克TDS1002示波器电源故障维修实战:从开关电源原理到排查修复

泰克TDS1002示波器电源故障维修实战:从开关电源原理到排查修复

这次我们来看一个非常实际的硬件维修案例:泰克 TDS1002 数字示波器不通电故障的排查与修复。对于电子工程师、维修技术人员或实验室设备管理员来说,示波器是核心的测试工具,一旦罢工,直接影响项目进度。TDS1002 作为一款经典的双通…

2026/9/1 10:41:47