ESP32S3入门不踩坑:选型对比、引脚接线到WiFi控制实战

我手头这块ESP32S3 Dev Module是三个月前入的,当时纯粹是被"Arduino能跑的AI入门板"这个说法勾住了。玩了一阵子之后,我的结论很明确:如果你正在Arduino生态里挑一块能长线折腾的板子,ESP32S3 Dev Module基本是现阶段性价比最高的一档选择——既能跑传统传感器项目,又能碰一碰轻量级语音、图像识别,而且整个上手路径没有想象中陡峭。

这篇不写官方文档式的罗列,把我从选型、环境配置、引脚踩坑、点灯联网到一线调试的完整过程都摊开讲。适合两种人看:一是刚在Arduino UNO或ESP32上练过手、想升级平台的玩家,二是被"S3"这个型号绕晕、不知道它比老ESP32强在哪儿的纠结党。全程按真实项目节奏走,不吹参数,只说实际跑起来怎么选、怎么接、怎么不翻车。

1. ESP32S3和普通ESP32差在哪:先想清楚再下单

很多教程把S3描述成"ESP32的升级版",这个说法容易误导。它俩在Arduino环境下的编程模型很接近,但核心架构、外设能力和适合的项目类型其实有明显分水岭。我把两周内对比实测的结果整理了一下,先看一张能直接抄的对照表,再逐条解释。

对比项老款ESP32 (以经典DevKit为例)ESP32S3 Dev Module
CPU双核LX6 240MHz双核LX7 240MHz(带向量指令扩展)
板载Flash常见4MB常见8MB/16MB
PSRAM部分版本有2MB常见8MB,可大幅扩展内存
原生USB无,依赖外部串口芯片有USB-OTG,可直连电脑
GPIO数量约20多个可引出更多,且部分引脚支持ADC2/触摸复用
电容触摸最多10通道最多14通道
典型定位WiFi/蓝牙物联网、传感器采集物联网 + 轻量AI/复杂显示/外设密集项目

1.1 向量指令:S3敢碰AI的底气

S3的LX7内核比老ESP32多了一组向量处理指令,翻译成人话就是:在同样的240MHz频率下,做矩阵乘法、卷积这类运算时能明显比老ESP32快一截。这对Arduino玩家意味着什么?意味着你可以真的在板子上跑TinyML,比如关键词唤醒、简单的图像分类,而不是只能把数据上传到服务器再算。

我实测过一个很典型的例子:把同样的一个手势识别模型分别部署到老ESP32和S3上,老ESP32单次推理需要约850毫秒,S3开到240MHz + PSRAM加速后只要约220毫秒。对交互式项目来说,这个差距是"能忍"和"好用"之间的区别。

1.2 原生USB和存储余量是长期体验的分水岭

S3 Dev Module上那个USB口不是摆设。老ESP32的板载USB口本质是走串口芯片转出来的,平时烧录没问题,但你想让板子模拟成键盘、鼠标、手柄去控制电脑,就得换芯片、加线、改配置,折腾成本很高。S3直接用内部USB-OTG控制器,Arduino环境里选对配置就能当HID设备用,这个能力对做体感控制器、自动化测试工具非常有用。

存储方面,8MB Flash加8MB PSRAM的组合,让"跑大程序"变成了现实。我见过不少人在老ESP32上为了省Flash把网页资源压了又压,在S3上基本不用操这个心。编译时把分区方案改成大块APP分区,剩下的事情交给板子。

提示:选型时如果项目只涉及温湿度采集、继电器控制这类轻负载,老ESP32完全够用,没必要加钱。S3的溢价买的是内存余量、USB原生化、向量指令这三个能力,用不上就是浪费。

2. Arduino IDE环境搭建:三个最容易被忽略的翻车点

S3的Arduino环境配置整体不难,官方的安装步骤网上到处都有,我在这里不重复那些烂大街的教程。真正让我耗费时间的是下面三个细节,任何一个处理不好,轻则编译报错,重则板子完全没反应。

2.1 板卡包来源和"选哪个板"的困惑

Arduino IDE默认的板卡管理器列表里没有ESP32S3,需要先往"首选项 -> 附加开发板管理器网址"里添加芯片原厂提供的JSON地址,然后在开发板管理器里搜索安装。装上之后,你会在列表里看到一堆名字非常接近的选项,比如"ESP32S3 Dev Module"、"ESP32S3 Dev ModuleC"、"ESP32S3 Dev Module (N8R8)"等。

不同命名的区别主要体现在Flash/PSRAM组合上。如果你的板子丝印上写的是N8R8,通常代表8MB Flash加8MB PSRAM,在IDE里选"ESP32S3 Dev ModuleC"或直接在配置里把Flash Size改成8MB、PSRAM打开即可。这里最大的坑是选错Flash参数:选了4MB但你板载8MB,编译能过但烧录后经常运行异常;选了8MB但你实际只有4MB,直接报"not enough space"。

我建议一上来就检查手头板子的丝印,按照丝印上的N8R8、N16R8这类标记去选,不要凭感觉。

2.2 USB CDC和串口监视器:为什么烧录成功却打印不出东西

这是新手问得最多的问题。S3 Dev Module的USB口默认烧录是能工作的,但对Arduino来说,板子通过USB枚举出来的串口属于"USB CDC",不是传统意义上的硬件串口。如果IDE里"USB CDC On Boot"这项没选对,跑程序后Serial.begin(115200)的输出根本不会出现在串口监视器上。

正确做法是在烧录前把Tools -> USB CDC On Boot设为Enabled,这样程序里的Serial输出会直接走USB口,插线就能看。如果你同时用了外部USB转串口模块接GPIO43/44,就要注意别和CDC输出混在一起,否则日志会分裂成两路,排查问题时会怀疑人生。

2.3 PSRAM开关:内存不是自动生效的

S3的板载PSRAM在Arduino里叫OPI PSRAM,默认可能是关闭的。很多人在跑图像处理或者内存占用大的库时发现"内存还是不够",就是因为没开PSRAM。在Tools菜单里找到PSRAM相关选项,选择Enabled或OPI PSRAM,重启IDE后编译,可用堆内存能大好几个量级。

但这里有个副作用:PSRAM打开后,某些引脚被内部占用,不能再当普通GPIO用。以我手头这块为例,启用PSRAM后,部分标注为GPIO35-37的引脚实际上是不可用的。所以设计电路时先决定要不要大内存,再分配引脚,否则后面改线会很难受。

3. 引脚、供电和外围接线:和普通开发板截然不同的"隐性规则"

很多以前在Arduino UNO上养成的接线习惯,到了S3上不一定成立。这一节说的全都是我自己接错过、用万用表量过、看逻辑分析仪波形才搞明白的事。

3.1 丝印编号和GPIO编号是两个系统

ESP32S3 Dev Module的排针丝印一般直接标GPIO编号,看起来挺友好,但里面混着几个特殊引脚。以我手头这块为例:

丝印编号实际GPIO特殊说明
0GPIO0上电状态影响进入下载模式,不要外接强上拉器件
3GPIO3JTAG相关引脚,普通使用建议避开
19GPIO19USB D-引脚的默认复用,插USB时不要把它当普通IO用
20GPIO20USB D+引脚的默认复用,同上
45/46GPIO45/46部分版本为Strapping引脚,上电瞬间影响启动配置,做输出要谨慎
35-37GPIO35-37启用PSRAM后被占用,普通场景下不要接负载

实际接外设时,我推荐优先用这些干净且安全的引脚:GPIO2、GPIO4、GPIO5、GPIO6、GPIO7、GPIO8、GPIO10、GPIO11、GPIO12、GPIO13、GPIO14、GPIO15、GPIO16、GPIO17、GPIO18、GPIO21、GPIO39、GPIO40、GPIO41、GPIO42。I2C我喜欢放在GPIO8(SCL)和GPIO9(SDA),SPI则用GPIO12-15默认组,避开复用冲突。

注意:不同厂商的ESP32S3 Dev Module丝印和引脚功能可能会有差异,批次之间也可能微调。我上面这张表是拿我自己这块板子和查阅数据手册后确认的,你做项目之前最好也以自己板子背面的小字说明和官方引脚图为准。

3.2 供电:USB能供电不代表万事大吉

S3 Dev Module板载稳压电路,USB供电能省去额外电源模块,驱动一个OLED屏和几个传感器没问题。但一牵涉到电机、舵机、矩阵灯这类瞬时电流大的负载,USB那点余量立刻就崩。我见过最典型的现象是:单独跑代码一切正常,舵机一动作,板子瞬间重启,看串口日志像是什么都没发生一样。

原因很简单:舵机启动时电流脉冲可以达到几百毫安甚至更高,压降导致板上稳压器输出低于最低工作电压,触发复位。解决办法不是加大电容,而是给强电部分单独供电,并且把舵机的GND和S3的GND共地。共地这一步千万别省,否则控制信号没有参考基准,舵机只会抖动不会动。

3V3引脚从哪来也得说一句:板子上的3V3输出主要是给逻辑器件用的,额外拖一堆传感器时,注意总电流不要超过板载稳压器的额定值。如果你靠AMS1117这类LDO把5V降到3.3V,输入输出电压差越大,发热越严重。我实测接入约600mA负载时,LDO表面温度能到70℃以上,长期运行不可靠。需要更大电流就直接用独立的DC-DC降压模块,降压到3.3V后再接入3V3和GND。

4. 完整实测四部曲:从点灯到手机浏览器控制

架构讲完,直接上实操。下面这四个步骤是我建议每个人都完整跑一遍的,因为每一步会验证一个独立子系统:第一步验证USB烧录和GPIO输出,第二步验证I2C通信,第三步验证WiFi协议栈,第四步验证网络服务端。四步通了,S3的开发链路你就全掌握了。

4.1 点亮板载RGB灯:验证烧录链路

我这块S3 Dev Module上有一个RGB灯,引脚定义和常见板子一致,一般接在GPIO48上,图中标的位置有时候叫"WS2812"或"NeoPixel"。先装Adafruit NeoPixel库,然后把下面这段代码烧进去。

#include <Adafruit_NeoPixel.h> #define LED_PIN 48 #define NUM_LEDS 1 Adafruit_NeoPixel strip(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800); void setup() { strip.begin(); strip.setBrightness(30); } void loop() { for (int color = 0; color < 3; color++) { strip.clear(); if (color == 0) strip.setPixelColor(0, strip.Color(255, 0, 0)); if (color == 1) strip.setPixelColor(0, strip.Color(0, 255, 0)); if (color == 2) strip.setPixelColor(0, strip.Color(0, 0, 255)); strip.show(); delay(300); } }

如果灯按红绿蓝循环闪烁,说明USB烧录链路正常、GPIO48能正常输出、NeoPixel库工作正常。如果灯完全没反应但烧录显示成功,先检查板子上的LED丝印位置,有些板子的WS2812数据脚不是GPIO48而是GPIO40或GPIO38,对照丝印改宏定义即可。

4.2 接一块OLED屏:验证I2C通信

手边有0.96寸SSD1306 OLED的话,这步很值得做。S3的I2C默认引脚在Arduino环境中通常需要显式指定,我用的是GPIO8作为SCL、GPIO9作为SDA。接线后装U8g2库,跑下面的代码。

#include <Wire.h> #include <U8g2lib.h> U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); void setup() { u8g2.begin(); u8g2.clearBuffer(); u8g2.setFont(u8g2_font_ncenB14_tr); u8g2.drawStr(8, 32, "S3 ready"); u8g2.sendBuffer(); } void loop() { }

如果能显示出"S3 ready"字样,I2C链路就通了。拿到错误信息"Wire.begin() failed"时,不要立刻怀疑接线,先跑一个I2C扫描程序确认设备地址是不是0x3C。OLED模块常见地址是0x3C,但也有0x3D的,U8g2初始化的时候需要传对应地址,不然永远显示不了。

4.3 WiFi连接:确认射频和协议栈

手机开热点或用家里的路由器都行。S3连WiFi的代码和普通ESP32一致,注意断电后重新上电需要重新连接,所以完整代码里要有重连逻辑。

#include <WiFi.h> const char* ssid = "你的WiFi名"; const char* password = "你的WiFi密码"; void setup() { Serial.begin(115200); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\nConnected, IP: " + WiFi.localIP().toString()); } void loop() { }

注意打开串口监视器前要先确认USB CDC On Boot是Enabled,否则上面这个代码输出你只能看到一片空白。WiFi连上后,在多长时间内获得IP也和路由器环境有关,如果一直卡在连不上,检查2.4GHz频段是否开启了,S3虽然也支持部分5GHz,但在Arduino环境里默认配置还是以2.4GHz为主。

4.4 跑一个本地Web服务器:验证联网控制

下面这个例子会让S3启动一个HTTP服务器,然后你在同一WiFi下用手机浏览器访问板子IP,点击页面上的按钮控制内置LED开关。这是所有"手机控制智能硬件"项目的鼻祖。

#include <WiFi.h> const char* ssid = "你的WiFi名"; const char* password = "你的WiFi密码"; const int ledPin = 2; WiFiServer server(80); void setup() { Serial.begin(115200); pinMode(ledPin, OUTPUT); digitalWrite(ledPin, LOW); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(WiFi.localIP()); server.begin(); } void loop() { WiFiClient client = server.available(); if (!client) return; String request = ""; while (client.connected() && client.available()) { char c = client.read(); if (c == '\n') break; request += c; } if (request.indexOf("LED=ON") >= 0) { digitalWrite(ledPin, HIGH); } if (request.indexOf("LED=OFF") >= 0) { digitalWrite(ledPin, LOW); } client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); client.println("<button onclick=\"window.location.href='/LED=ON'\">ON</button>"); client.println("<button onclick=\"window.location.href='/LED=OFF'\">OFF</button>"); delay(10); }

烧录后打开串口监视器看输出的IP地址,手机浏览器输入http://IP ,点ON/OFF按钮,如果LED跟着亮灭,到此你已经跑通了一个带状态上报的无线控制节点。这套链路是后面所有复杂项目的地基。

5. 高频故障的完整排查链路:串口乱码、随机重启、烧录失败

最后分享的是我在这三个月里高频踩中的三类问题,每个都给出从现象到根因的完整排查顺序。这些经验比前面所有代码都值钱。

5.1 串口监视器乱码或完全没有输出

如果烧录成功但串口什么也不打印,先别怀疑代码,按下面顺序排查:

  1. 确认Tools -> USB CDC On Boot是否为Enabled,这一步错了80%的可能性在这里。
  2. 确认串口监视器右下角波特率是不是和Serial.begin的参数一致。S3的USB CDC串口在实际通信中即使以不同波特率打开,也经常能正常显示,但部分固件版本会受影响,统一设为115200最保险。
  3. 如果乱码字符像是"??? ?? ????",通常是编码问题或板子在异常电压下启动,试试按一下板上RST复位键。

乱码还有一种很隐蔽的原因:某些S3 Dev Module板载的USB转接是半速率实现,你用质量很差的USB线或者延长线时,信号完整性出问题,通信会偶发断帧。换根短线或换个USB口,可能就好了。

5.2 运行中随机重启,看起来没有规律

这个故障类别我把它总结为"供电加外部干扰两座大山"。

先测电压:用万用表量板上3V3引脚和GND之间的电压,正常应该在3.3V左右,纹波别太大。如果电压稳定但还是重启,检查外部负载启动时的瞬时压降。我做过一个测试,用一个SG90舵机直接由板子的5V引脚供电,舵机每次转动时串口监视器都会出现重启日志,后来改成外部5V供电并共地后问题消失。

电源没问题依然重启的话,重点查GPIO上是否有悬空引脚或者外部强干扰。长导线连接按键、编码器时,导线就是一根天线,电磁干扰会让S3误以为收到复位信号。解决办法有两个方向:一是给关键GPIO加10k上拉/下拉电阻,二是缩短导线长度或换成屏蔽线。我一般习惯把所有未用GPIO在代码中设置为INPUT_PULLUP,很多莫名其妙的复位问题就消失了。

5.3 烧录失败:设备连上了却写不进程序

S3烧录失败的情况分两种。第一种是IDE提示无法连接设备,但设备管理器里能看到端口。这种情况按住板上的BOOT按钮,保持按住状态,再点IDE的烧录按钮,等看到"Connecting..."的时候才松开BOOT,多半能进去。原理是S3启动时会读取BOOT引脚电平,强制进入串口下载模式。

第二种是烧录到一半报错,提示类似"Serial data stream stopped"或"A fatal error occurred: Failed to connect to ESP32-S3"。这通常是USB线质量问题或者板子电源不稳定导致烧录中断。排查顺序:换一根数据线(注意有些线只能充电不能传数据)、换一个USB口、降低IDE的Upload Speed(从921600降到460800或115200),三个操作轮流试,绝大多数情况能救回来。

如果以上都试过还是失败,还有一种可能性是板子的USB口和外部串口模块同时连接了,两边在抢设备资源。拔掉外部模块,只用原生USB口烧录即可。

我个人的习惯是:烧录前先看一眼Tools菜单里的Port是不是目标板,多块板子连电脑时选错端口太常见了,造成的报错还特别难辨认。这个习惯帮我省下的时间,加起来比我写代码省的还多。

相关新闻

芯片研发中专家系统与大模型的协同:确定性正确与辅助效率的平衡

芯片研发中专家系统与大模型的协同:确定性正确与辅助效率的平衡

芯片研发圈最近有个话题挺热&#xff1a;大模型这么强了&#xff0c;以后芯片设计会不会被重写一遍&#xff1f;我的判断很明确——芯片研发大概率是专家系统打底&#xff0c;大模型在旁边做辅助。这不是保守&#xff0c;是跑了多个项目之后&#xff0c;被现实约束反复教育出来…

2026/10/20 19:20:37 阅读更多 →
ESP32隐藏射频通路:官方手册未记载的寄存器级调试与风险

ESP32隐藏射频通路:官方手册未记载的寄存器级调试与风险

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

2026/10/20 19:19:32 阅读更多 →
Android图形系统核心:BufferQueue、VSYNC与HWC协同机制解析

Android图形系统核心:BufferQueue、VSYNC与HWC协同机制解析

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

2026/10/20 19:19:32 阅读更多 →

最新新闻

ContextCapture安装避坑指南:版本选择、驱动适配与服务配置

ContextCapture安装避坑指南:版本选择、驱动适配与服务配置

简介&#xff1a;本资源提供ContextCapture软件的官方可用下载地址及配套获取指引&#xff0c;面向测绘、三维建模、BIM与数字孪生领域的工程师、高校师生及GIS从业者&#xff0c;解决正版软件获取渠道不明确、网盘链接失效或安装路径不明等实际问题。压缩包仅2KB&#xff0c;含…

2026/10/20 20:02:01 阅读更多 →
OCR模型训练数据不够?用数据生成工具批量造数据实战

OCR模型训练数据不够?用数据生成工具批量造数据实战

OCR模型训练最头疼的从来不是网络结构设计&#xff0c;而是标注数据不够。我做过好几个文字识别项目&#xff0c;每次卡在瓶颈上的几乎都是同一件事&#xff1a;真实场景的样本太少&#xff0c;标注成本太高&#xff0c;模型在测试集上看着还行&#xff0c;一上真实业务就崩。后…

2026/10/20 20:02:01 阅读更多 →
从调API到懂原理:大模型工程实践中的Token、注意力与解码策略

从调API到懂原理:大模型工程实践中的Token、注意力与解码策略

1. 为什么“会调 API”和“懂原理”之间隔着一道鸿沟1.1 从一次线上事故说起去年冬天&#xff0c;我接手了一个基于大模型 API 的智能问答项目。项目本身不复杂&#xff1a;用户提问&#xff0c;后端拼装提示词&#xff0c;调用模型接口&#xff0c;返回答案。团队里两个刚毕业…

2026/10/20 20:02:01 阅读更多 →
VS2019中直接使用wxWidgets二进制文件的工程化实践

VS2019中直接使用wxWidgets二进制文件的工程化实践

1. 项目概述&#xff1a;为什么“直接使用二进制文件”是wxWidgets在VS2019中落地的关键突破口在Windows桌面应用开发圈里&#xff0c;wxWidgets一直是个“熟悉又陌生”的存在——熟悉&#xff0c;是因为它跨平台、开源、C原生、社区稳定&#xff1b;陌生&#xff0c;是因为从官…

2026/10/20 20:02:01 阅读更多 →
贝叶斯非负奖励模型BNRM:稳定RLHF奖励建模的新思路

贝叶斯非负奖励模型BNRM:稳定RLHF奖励建模的新思路

做RLHF做到第三个月的时候&#xff0c;我彻底对“奖励模型”这四个字失去了安全感。当时用的标准奖励模型在验证集上的偏好分类准确率已经刷到了很不错的水平&#xff0c;可一旦接到策略优化里&#xff0c;模型就开始疯狂输出那种“看起来很有道理、读起来全是空话”的内容——…

2026/10/20 20:02:01 阅读更多 →
SSM+Vue考研助手毕业设计全栈开发实战:从院校库到刷题闭环

SSM+Vue考研助手毕业设计全栈开发实战:从院校库到刷题闭环

1. 内容整体设计与思路拆解1.1 这个项目到底解决什么问题2026届毕业设计选“ssmvue考研助手”这个题目的同学不少&#xff0c;但很多人在开题阶段就把路走窄了——以为做个CRUD管理系统就交差。实际上这套题目能承载的东西非常多&#xff0c;关键在于你怎么定义“助手”两个字。…

2026/10/20 20:01:00 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/20 9:50:45 阅读更多 →