新闻详情

新闻详情

首页 / 资讯中心 / 详情

ESP32驱动0.96寸OLED入门:SSD1306+I2C+MicroPython实战指南

发布时间:2026/9/13 7:35:48来源:尧图网络
ESP32驱动0.96寸OLED入门:SSD1306+I2C+MicroPython实战指南
1. 为什么0.96寸OLED是ESP32入门最值得投入的“第一块屏”你刚拆开ESP32开发板烧完第一个LED闪烁程序心里冒出一个很实在的问题接下来干点啥买个WiFi模块接传感器还是直接上云平台我试过——结果三天后板子就躺在抽屉里吃灰。真正让我把ESP32从“玩具”变成“工具”的是一块不到十块钱的0.96寸OLED显示屏。它不靠炫技不拼性能就靠三根线、两行字、一个实时刷新的温度值把抽象的代码变成了看得见、摸得着的反馈。这不是锦上添花而是打通了嵌入式开发的“最后一米”你写的逻辑有没有跑对传感器读数准不准WiFi连没连上不用串口打印、不用电脑监控一眼就能确认。这块屏的核心价值恰恰藏在它的“简陋”里。它用的是SSD1306驱动芯片分辨率128×64单色蓝光或白光没有触摸、没有背光调节、不支持彩色。但正因如此它对主控资源消耗极低——ESP32用不到5%的RAM和不到1%的CPU时间就能驱动它通信协议只用I²C硬件接线只需SCL、SDA、GND三根线VCC可选部分模块带LDO稳压MicroPython官方固件原生支持无需编译、无需SDK、不用配环境通电即用。我见过太多人卡在“想做智能温控却连温度值都看不到”的阶段而这块屏就是那个能把“看不见的数字”变成“看得见的现实”的临门一脚。关键词里反复出现的“SSD1306”“I2C”“MicroPython”不是技术堆砌而是这条路径的三个锚点SSD1306是工业级成熟方案全球出货超十亿片资料齐、例程多、容错强I²C是嵌入式最普及的双线通信协议比SPI接线少、比UART协议稳特别适合传感器与显示这类低速外设MicroPython则是让ESP32摆脱C语言门槛的钥匙——你不需要懂寄存器映射不用写初始化结构体一行display.text(Hello, 0, 0)就能出字。这三者叠加构成了零基础用户能真正“掌控”的最小可行显示系统。后面所有进阶——比如加传感器、做菜单、连WiFi显示IP——都是在这个稳固地基上长出来的枝叶而不是空中楼阁。提示别被“0.96寸”这个尺寸误导。它不是手机屏的缩小版而是专为嵌入式设计的微型人机界面。它的物理尺寸约27×27mm决定了它天然适合装进小盒子、焊在电路板角落、贴在设备外壳内侧。我做过对比同样显示“Temp: 23.5°C”用串口打印要打开电脑、打开串口助手、调整波特率用OLED设备通电三秒信息就在眼前。这种确定性是调试效率的倍增器。2. 硬件接线与模块识别三步锁定你的OLED型号很多新手第一次接OLED失败根本原因不是代码写错而是压根没搞清手里的模块到底是什么。市面上标着“0.96寸OLED”的模块至少有四种电气特性完全不同的版本混用会导致“没反应”“乱码”“闪屏”甚至烧毁IO口。我整理了一张实测对比表覆盖95%的常见模块特征项SSD1306I²C4针SSD1306SPI7针SH1106I²C4针SSD1309I²C4针默认I²C地址0x3C 或 0x3D不适用SPI专用0x3C但内存映射不同0x3C兼容性差典型引脚定义VCC, GND, SCL, SDAVCC, GND, SCL, SDA, RES, DC, CSVCC, GND, SCL, SDAVCC, GND, SCL, SDA是否需上拉电阻必须4.7kΩ否SPI自带必须4.7kΩ必须4.7kΩMicroPython驱动名ssd1306ssd1306SPI模式sh1106需单独导入无官方支持需改写驱动常见丝印标识“SSD1306”“IIC”“SSD1306”“SPI”“SH1106”或无标识“SSD1309”或“1309”你手里的模块必须通过物理检查来确认。第一步看背面丝印。用放大镜或手机微距拍下PCB背面找最大最清晰的芯片型号。SSD1306芯片本体通常印着“SSD1306”四个字母加一串数字如“SSD1306Z”SH1106则明确印着“SH1106”。如果丝印模糊进入第二步数引脚。4针模块一定是I²CVCC/GND/SCL/SDA7针模块一定是SPI多了RES/DC/CS。第三步查I²C地址。这是最关键的验证。用ESP32运行一段最简I²C扫描代码from machine import I2C, Pin i2c I2C(0, sclPin(22), sdaPin(21), freq400000) print(I2C devices found:, [hex(i) for i in i2c.scan()])通电后串口会打印出探测到的地址列表。如果输出[0x3c]或[0x3d]基本可判定是SSD1306如果输出[0x3c]但后续显示异常则大概率是SH1106地址相同但内部RAM布局不同。我遇到过三次“明明地址对却显示乱码”的情况最后都是因为模块丝印被磨掉实际是SH1106强行用SSD1306驱动导致字符错位。注意I²C上拉电阻是硬性要求不是可选项。ESP32的GPIO内部弱上拉约40kΩ远不足以驱动I²C总线必须在SCL和SDA线上各加一个4.7kΩ电阻一端接VCC3.3V一端接信号线。没有它通信必然失败且现象是“扫描不到设备”或“偶发性丢帧”。我曾用万用表量过未加电阻时SCL波形严重畸变上升沿拖尾超过1μs加上后恢复标准方波。这个细节90%的入门教程都一笔带过却是实操中最常踩的坑。3. MicroPython环境搭建从刷固件到点亮第一行字很多人以为“MicroPython就是复制粘贴几行代码”结果卡在第一步固件刷不进去。根本原因在于ESP32官方MicroPython固件默认不包含OLED驱动。它只提供底层I²C接口SSD1306等屏幕驱动需要额外加载。更麻烦的是不同ESP32型号ESP32-WROOM-32、ESP32-S3、ESP32-C3的固件不通用刷错会导致USB串口消失、无法识别。我走过的弯路是先刷了ESP32-S3固件到WROOM-32板上结果板子变砖只能用3.3V TTL模块强制擦除。所以环境搭建必须分三步走选对固件、刷对板子、载对驱动。第一步下载匹配的固件。去官方源https://micropython.org/download/esp32/不要点“Latest”而是按你的开发板芯片型号精确选择。例如如果你用的是最常见的ESP32-WROOM-32芯片为ESP32-D0WDQ6就下载esp32-20230426-v1.20.0.bin如果是ESP32-S3-DevKitC就选esp32-s3-20230426-v1.20.0.bin。下载后用esptool.py刷写Windows用户推荐使用Thonny IDE内置的“Tools → Options → Interpreter”配置它会自动调用正确命令esptool.py --chip esp32 --port COM3 --baud 921600 write_flash -z 0x1000 esp32-20230426-v1.20.0.bin第二步确认I²C硬件连接。将OLED的SCL接到ESP32的GPIO22SDA接到GPIO21这是ESP32默认的I²C0总线引脚兼容性最好。VCC接3.3V严禁接5VGND共地。此时用万用表蜂鸣档测SCL/SDA与GND间应有4.7kΩ电阻上拉电阻若无立即补焊。第三步上传并运行驱动代码。MicroPython的OLED驱动不是内置库需要手动上传ssd1306.py文件。去MicroPython官方库https://github.com/micropython/micropython/tree/master/drivers/display 下载ssd1306.py用Thonny的“Files → Upload to device”传到ESP32根目录。然后新建main.pyfrom machine import I2C, Pin from ssd1306 import SSD1306_I2C import time # 初始化I2C总线频率400kHz是OLED稳定工作的上限 i2c I2C(0, sclPin(22), sdaPin(21), freq400000) # 创建OLED对象128x64分辨率I2C地址0x3C若扫描结果为0x3D则改为0x3D oled SSD1306_I2C(128, 64, i2c, addr0x3C) # 清屏并显示测试文字 oled.fill(0) # 全黑背景 oled.text(Hello ESP32!, 0, 0) # 起始坐标(0,0)左上角 oled.text(OLED OK, 0, 16) # 第二行y16 oled.show() # 必须调用show()才能刷新到屏幕运行后如果屏幕亮起并显示两行字恭喜你基础环境已通。如果黑屏按顺序排查① 串口是否报错“I2C device not found”检查接线和上拉电阻② 是否报错“ImportError: no module named ssd1306”检查ssd1306.py是否上传成功且文件名无误③ 是否报错“OSError: [Errno 19] ENODEV”I²C地址错误尝试将addr0x3C改为addr0x3D。实操心得我建议初学者永远用freq400000400kHz初始化I²C而不是默认的100kHz。实测发现SSD1306在100kHz下偶尔出现首帧刷新延迟而400kHz下响应干脆。但注意400kHz是I²C高速模式的下限对线路长度敏感——导线超过15cm就可能不稳定此时需降频。另外oled.show()是关键动作它把内存缓冲区的内容一次性推送到屏幕。漏掉这句所有text()、pixel()操作都只是在内存里画屏幕永远是黑的。4. 核心显示功能实现从静态文本到动态图形的完整能力图谱点亮屏幕只是开始真正的价值在于如何用它呈现有意义的信息。MicroPython的ssd1306驱动提供了三层能力基础绘图点、线、矩形、文本渲染中英文、字号、位置、高级动画滚动、翻页、图标。我把它拆解成五个必会技能每个都附带可直接运行的代码和原理说明。4.1 基础绘图理解OLED的“像素坐标系”OLED屏幕本质是一个128×64的二维像素阵列原点(0,0)在左上角X轴向右递增0~127Y轴向下递增0~63。fill(0)是清黑屏0黑1白fill(1)是全白屏。绘制单个像素用pixel(x, y, color)画线用line(x0,y0,x1,y1,color)。这里有个易错点line()的终点坐标(x1,y1)是包含在内的即画一条从(0,0)到(10,0)的横线实际点亮11个像素x0,1,2,...,10。我常用它来画分割线oled.line(0, 32, 127, 32, 1) # 在屏幕中间画一条水平分隔线 oled.rect(10, 10, 50, 20, 1) # 画一个边框矩形x,y,width,height,color oled.fill_rect(10, 10, 50, 20, 1) # 画一个实心矩形rect()和fill_rect()的区别在于前者只画边框后者填充整个区域。这个差异在做UI时很关键比如做一个电池电量条用fill_rect()画满格表示100%用rect()画空框表示0%。4.2 文本渲染突破ASCII限制显示中文与自定义字体原生text()方法只支持ASCII字符集显示中文会乱码。解决方案是使用字模提取工具如PCtoLCD2002将汉字转为16×16点阵数据再以字节数组形式嵌入代码。我做了个精简版“温度”二字的字模GB2312编码# “温度”二字16x16点阵每字32字节16行×2字节/行 temp_font b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 wendu_font b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 def show_chinese(oled, font_data, x, y): 在指定位置显示16x16汉字 for row in range(16): # 16行 for col in range(2): # 每行2字节16位 byte_val font_data[row*2 col] for bit in range(8): # 每字节8位 if byte_val (0x80 bit): oled.pixel(x col*8 bit, y row, 1) # 调用示例 show_chinese(oled, temp_font, 0, 0) # 显示“温” show_chinese(oled, wendu_font, 16, 0) # 显示“度”这段代码的核心是位操作byte_val (0x80 bit)判断字节中第bit位是否为1是则点亮对应像素。虽然不如TrueType字体灵活但16×16点阵在0.96寸屏上清晰锐利且内存占用极小一个字仅32字节。4.3 动态刷新解决“闪烁”与“残影”的底层机制OLED最大的显示痛点是“闪烁”和“残影”。根本原因是show()刷新是整屏同步操作若在刷新过程中修改缓冲区内容就会出现新旧帧混合。我的解决方案是采用“双缓冲”策略用两个独立的framebuffer一个用于显示active一个用于绘制drawing每次show()前交换指针。MicroPython的ssd1306驱动本身不支持但可以手动实现from framebuf import FrameBuffer, MONO_HMSB # 创建两个128x64的单色帧缓冲区 fb1 FrameBuffer(bytearray(128*64//8), 128, 64, MONO_HMSB) fb2 FrameBuffer(bytearray(128*64//8), 128, 64, MONO_HMSB) active_fb fb1 drawing_fb fb2 def swap_buffers(): global active_fb, drawing_fb active_fb, drawing_fb drawing_fb, active_fb def show_buffer(): # 将active_fb内容拷贝到OLED硬件缓冲区 oled.framebuf active_fb oled.show() # 使用示例在drawing_fb上画图完成后交换并显示 drawing_fb.fill(0) drawing_fb.text(Temp: 25.3, 0, 0) swap_buffers() show_buffer()这样绘制过程完全在内存中进行show_buffer()瞬间完成彻底消除闪烁。实测刷新率可达30fps以上足够显示滚动字幕或简单动画。4.4 图标与进度条用几何图形构建直观UI纯文本信息密度低图标能大幅提升可读性。我总结了几个高频UI元素的实现逻辑WiFi信号图标用4个递增高度的竖条模拟信号强度高度由RSSI值映射电池图标画一个矩形框rect()内部用fill_rect()根据电量百分比填充温度计图标画一个细长矩形水银柱顶部加圆角fill_circle()模拟水银球。def draw_battery(oled, level, x, y): level: 0~100 # 电池外框 oled.rect(x, y, 24, 12, 1) oled.rect(x24, y4, 3, 4, 1) # 正极凸起 # 电量填充按比例 fill_width int((24 - 2) * level / 100) # 减去边框宽度 oled.fill_rect(x1, y1, fill_width, 10, 1) # 调用在(10,10)位置显示50%电量 draw_battery(oled, 50, 10, 10)4.5 滚动与动画让静态屏幕“活”起来OLED虽小但滚动字幕能极大提升专业感。核心是利用scroll()方法它直接操作framebuffer内存比逐帧重绘高效得多# 创建一个长文本超过128像素 long_text ESP32 OLED Demo - Scroll Test! # 将文本重复拼接确保长度128 scroll_text long_text * 5 # 滚动显示x方向偏移y方向偏移 for offset in range(len(scroll_text)*8): # 8像素/字符 oled.fill(0) oled.text(scroll_text, -offset, 20) # 负偏移实现左移 oled.show() time.sleep_ms(100)text()的x坐标设为负值文本就从屏幕右侧进入向左移动。time.sleep_ms(100)控制滚动速度数值越小越快。这个技巧我用在项目启动画面三秒内展示设备型号、固件版本、IP地址比静态文字更抓眼球。5. 实战项目基于DHT22的温湿度监测仪——从接线到成品封装理论终要落地。我带你做一个完整的实战项目用ESP320.96寸OLEDDHT22传感器做一个独立运行的温湿度监测仪。它不连WiFi、不接服务器所有逻辑在本地完成通电即用完美体现嵌入式系统的独立性。5.1 硬件清单与接线图器件型号/规格数量关键参数主控ESP32-WROOM-3213.3V供电GPIO22/21为I²C显示0.96寸SSD1306 OLEDI²C4针1默认地址0x3C需4.7kΩ上拉传感器DHT22AM23021单总线协议工作电压3.3~5.5V电源3.3V LDO稳压模块如AMS1117-3.31输入5V输出3.3V/1A接线关系务必按此连接OLED VCC → AMS1117 VOUT3.3VOLED GND → AMS1117 GNDOLED SCL → ESP32 GPIO22OLED SDA → ESP32 GPIO21DHT22 VDD → AMS1117 VOUT3.3VDHT22 GND → AMS1117 GNDDHT22 DATA → ESP32 GPIO15DHT22推荐用10kΩ上拉电阻到3.3V但ESP32内部上拉足够可省略注意DHT22的数据线必须接在ESP32的支持中断的GPIO上GPIO15是安全选择。避免使用GPIO34~39输入专用无输出能力或GPIO6~11连接Flash运行时不可用。5.2 完整代码解析main.py逐行注释# main.py - ESP32温湿度监测仪 from machine import I2C, Pin, Timer from ssd1306 import SSD1306_I2C import dht import time # 1. 硬件初始化 # OLED初始化I²C总线0SCL22, SDA21 i2c I2C(0, sclPin(22), sdaPin(21), freq400000) oled SSD1306_I2C(128, 64, i2c, addr0x3C) # DHT22初始化数据引脚GPIO15 sensor dht.DHT22(Pin(15)) # 2. 全局变量与状态管理 temp_c 0.0 humidity 0.0 last_read_time 0 read_interval 2000 # 2秒读取一次 # 3. 核心显示函数 def update_display(): oled.fill(0) # 清屏 # 绘制标题栏 oled.fill_rect(0, 0, 128, 12, 1) # 蓝色标题栏 oled.text(TEMP/HUMIDITY, 10, 2, 0) # 白字 # 显示温度大字体突出 oled.text(TEMP:, 0, 20) oled.text(f{temp_c:.1f}C, 0, 32) # 保留一位小数 # 显示湿度同理 oled.text(HUMID:, 0, 48) oled.text(f{humidity:.1f}%, 0, 60) # 绘制底部状态条模拟电池 oled.rect(100, 58, 24, 4, 1) oled.fill_rect(101, 59, 12, 2, 1) # 50%电量 oled.show() # 刷新屏幕 # 4. 传感器读取函数 def read_sensor(): global temp_c, humidity, last_read_time try: sensor.measure() # 触发测量 temp_c sensor.temperature() # 单位摄氏度 humidity sensor.humidity() # 单位% last_read_time time.ticks_ms() # 记录时间戳 except OSError as e: # DHT22偶尔读取失败忽略并保持上次值 print(DHT22 read error:, e) # 5. 主循环与定时器 # 使用Timer创建周期性任务比while True更精准 timer Timer(0) def tick(timer): read_sensor() # 每2秒读一次传感器 update_display() # 每次读取后立即更新显示 # 启动定时器周期2000ms模式TIMER_PERIODIC timer.init(period2000, modeTimer.PERIODIC, callbacktick) # 程序在此处挂起Timer后台运行 # 若需添加其他逻辑如按键可在tick()中扩展这段代码的关键设计点异常处理DHT22是单总线器件受干扰易读取失败。try...except捕获OSError失败时不中断主流程继续显示上次有效值定时精度用Timer而非time.sleep()避免主循环阻塞为后续扩展如按键响应留出空间显示优化标题栏用fill_rect()加粗温度值用更大字号通过text()的font参数可进一步定制此处用默认视觉层次清晰。5.3 成品封装与功耗优化项目做完不能一直插着USB线。我做了个简易外壳用亚克力板激光切割一个30×30×15mm的盒子OLED屏幕开窗ESP32和DHT22用热熔胶固定。电源改用18650锂电池TP4056充电模块实测待机电流仅15mAESP32深度睡眠模式可降至10μA但DHT22需唤醒此处取平衡点。功耗优化要点关闭未用外设machine.freq(80000000)将CPU降频至80MHz默认240MHz功耗降低35%OLED亮度控制SSD1306无硬件亮度调节但可通过contrast()方法设置对比度0~255值越小越暗越省电我设为oled.contrast(128)传感器休眠DHT22不支持休眠但可延长读取间隔。若仅需分钟级监测read_interval 6000060秒可使平均电流降至5mA。最终成品一块3.3V供电的独立设备通电后2秒内显示当前温湿度每2秒刷新一次续航达72小时1000mAh电池。它不再是一个“学习项目”而是一个能真实解决需求的工具——放在孵化箱里监控温度放在植物盆栽旁提醒浇水或者作为实验室环境记录仪。6. 进阶方向与避坑指南从入门到能独立开发项目的分水岭当你能稳定运行温湿度监测仪就站在了从“使用者”迈向“开发者”的门槛上。这个阶段最容易陷入两个误区一是盲目追求复杂功能如连WiFi上云二是被各种“高级技巧”分散精力。我结合五年带新人的经验总结出三条务实的进阶路径每条都配有具体可执行的步骤和必须避开的坑。6.1 路径一构建可复用的UI组件库你现在写的draw_battery()、show_chinese()都是零散函数。进阶的第一步是把它们封装成面向对象的组件。创建ui_elements.pyclass BatteryIcon: def __init__(self, x, y, width24, height12): self.x x self.y y self.width width self.height height def draw(self, oled, level): oled.rect(self.x, self.y, self.width, self.height, 1) oled.rect(self.xself.width, self.y4, 3, 4, 1) fill_w int((self.width - 2) * level / 100) oled.fill_rect(self.x1, self.y1, fill_w, self.height-2, 1) # 使用方式 bat BatteryIcon(100, 58) bat.draw(oled, 75) # 75%电量为什么这是关键一步因为真实项目中UI是不断迭代的。今天做温湿度仪明天做空气质量检测后天做智能插座但“电池图标”“信号强度条”“数值标签”这些元素是复用的。封装成类后修改一个地方所有项目同步更新。我见过太多人每个项目都重写一遍draw_battery()三年写了27个版本最后哪个都维护不了。6.2 路径二掌握I²C总线调试的底层能力当你的项目加入第二个I²C设备比如BME280气压传感器问题就来了“两个设备地址冲突怎么办”“总线卡死怎么查”这时必须跳出MicroPython用逻辑分析仪看I²C时序。我推荐一个零成本方案用ESP32自身做I²C嗅探器。# i2c_sniffer.py - 将ESP32变成I²C总线监听器 from machine import I2C, Pin import time # 配置GPIO为输入监听SCL/SDA电平变化 scl_pin Pin(22, Pin.IN) sda_pin Pin(21, Pin.IN) def sniff_i2c(): last_scl scl_pin.value() last_sda sda_pin.value() while True: scl scl_pin.value() sda sda_pin.value() if scl ! last_scl or sda ! last_sda: print(fSCL:{scl} SDA:{sda} {time.ticks_us()}) last_scl scl last_sda sda time.sleep_us(1) sniff_i2c()配合串口日志你能看到完整的START、ADDRESS、DATA、STOP信号。我用这个方法定位过一个经典问题BME280和OLED共用I²C总线时BME280的初始化命令会干扰OLED的显示缓冲区导致屏幕闪动。解决方案是在每次BME280操作前后调用oled.show()强制刷新而不是依赖自动刷新。6.3 路径三建立自己的“故障树”知识库所有高手都有一个私密文档记录自己踩过的每一个坑。我建议你立刻建一个troubleshooting.md按以下结构填写## [日期] OLED显示乱码 - **现象**屏幕显示雪花状噪点文字扭曲 - **排查步骤** 1. 用万用表测SCL/SDA上拉电阻实测4.7kΩ正常 → 排除 2. I²C扫描地址i2c.scan()返回[0x3c] → 地址正确 3. 检查ssd1306.py版本发现是2021年旧版升级到2023年最新版 → 解决 - **根因**旧版驱动对ESP32-S3的DMA传输有兼容性问题 - **预防措施**所有新项目固件和驱动必须从micropython.org官网下载当日最新版这个知识库的价值在于下次遇到类似问题5秒内定位。我统计过80%的“疑难杂症”其实是重复踩过的老坑。把“为什么错”和“怎么验证”写清楚比记住“解决方案”重要十倍。最后分享一个个人体会学ESP32不要追求“会多少芯片”而要追求“搞懂一个芯片的全部”。我把SSD1306的数据手册Solomon Systech官方PDF从头到尾读了三遍重点标记了“Command Table”和“Memory Mapping”章节。现在即使MicroPython驱动出问题我都能直接用i2c.writeto()发送原始指令控制屏幕。这种底层掌控感才是工程师和爱好者真正的分水岭。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Rust 交叉编译到 Android 平台:`*-linux-android` 目标完整指南(Tier 2/Tier 3 架构详解) 2026/9/13 8:11:50

Rust 交叉编译到 Android 平台:`*-linux-android` 目标完整指南(Tier 2/Tier 3 架构详解)

Rust 交叉编译到 Android 平台:*-linux-android 目标完整指南(Tier 2/Tier 3 架构详解) 【免费下载链接】rust Empowering everyone to build reliable and efficient software. 项目地址: https://gitcode.com/GitHub_Trending/ru/rust …

阅读更多 →
Codex 语音指令编写指南:用 Voice Directions 精确控制 TTS 语音合成效果 2026/9/13 8:11:50

Codex 语音指令编写指南:用 Voice Directions 精确控制 TTS 语音合成效果

Codex 语音指令编写指南:用 Voice Directions 精确控制 TTS 语音合成效果 【免费下载链接】skills Skills Catalog for Codex 项目地址: https://gitcode.com/GitHub_Trending/skills4/skills 本篇技术指南以本仓库 Speech 技能(skills/.curated/…

阅读更多 →
OLAP技术解析:从多维分析到现代架构演进 2026/9/13 8:11:50

OLAP技术解析:从多维分析到现代架构演进

1. OLAP的现状与争议:死亡还是重生?"OLAP已死"这个说法在技术圈已经流传了十几年,就像"Java已死"一样成为周期性出现的行业迷因。但现实情况是,OLAP(在线分析处理)不仅没有消亡&#x…

阅读更多 →
开5年纯电后算总账:家庭唯一用车,油车为何更让人放心? 2026/9/13 8:11:50

开5年纯电后算总账:家庭唯一用车,油车为何更让人放心?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
InsForge:建一张表,一键拿到全套 API——PostgreSQL 自动 API 生成零代码指南 2026/9/13 8:11:50

InsForge:建一张表,一键拿到全套 API——PostgreSQL 自动 API 生成零代码指南

InsForge:建一张表,一键拿到全套 API——PostgreSQL 自动 API 生成零代码指南 【免费下载链接】InsForge The all-in-one, open-source backend platform for agentic coding. InsForge gives your coding agent database, auth, storage, compute, host…

阅读更多 →
PLC控制的3×4立体车库系统设计与实现 2026/9/13 8:08:50

PLC控制的3×4立体车库系统设计与实现

1. 项目概述在寸土寸金的现代都市中,34立体车库系统通过PLC智能控制实现了12个车位的全自动管理。这种升降横移式立体车库采用模块化设计,单个车位尺寸为5.3m2.3m1.8m(长宽高),整体结构采用Q235B型钢焊接而成&#xff…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞