Python控制Arduino与树莓派:从入门到实战的完整指南
把Python和Arduino、树莓派放到一块儿很多人第一反应是“不搭”——搞单片机的人开口闭口C语言搞嵌入式的人每天都在跟寄存器较劲Python这种“跑在解释器里的脚本”怎么也来掺和硬件但如果你像一部分同行一样本身是软件方向出身突然要接一个硬件相关的项目或者只是单纯想用Python控制Arduino或树莓派做点自动化的小玩意儿你会发现这条路不仅走得通而且比想象中顺畅得多。这篇文章把我在实际项目里折腾过的路子整理一遍什么时候该用Python做硬件控制、Arduino和树莓派这两个板子怎么选、怎么从零搭起一套实用的控制链路以及那些文档里不会写的坑。内容不算高深但都是能直接抄作业的实操记录。1. 为什么用Python控制硬件开发板1.1 Python在硬件控制中的角色定位先说清楚一个容易混淆的事Python不是用来替代单片机上的C语言的它是站在 C 语言旁边做“上位机”和“胶水层”的。Arduino 板子上跑的还是编译好的 C/C 固件树莓派上跑的是一个完整的 Linux 系统而 Python 干的是下面这些活在电脑上通过串口给 Arduino 发指令、收数据做数据可视化和后期处理在树莓派上直接读写 GPIO 引脚控制 LED、继电器、传感器作为树莓派上更高层逻辑的调度器把摄像头识别、网络请求、MQTT 上报这些能力跟底层硬件串起来换句话说Python 负责的是“策略层”微控制器负责的是“执行层”。很多做图像识别、Web 开发出身的程序员硬件基础薄弱但业务逻辑能力强用 Python 控制开发板正好避开自己最不擅长的寄存器配置、指针和中断处理把精力放在真正要解决的问题上。1.2 这套方案的核心优势与适用人群为什么不是拿 C 语言把活全干了我自己的体会是Python 带来三个实打实的好处第一开发速度快。写一段串口通信代码Python 里 pySerial 只需几行C 里要设置结构体、配置波特率、处理超时还得考虑跨平台编译时间差距是数量级的。第二生态成熟。做图像识别可以直接调 OpenCV做数据展示直接上 Matplotlib做 Web 控制台直接起 Flask这些库跟硬件控制组合起来能干出非常多花活。C 语言当然也能干但要把这些库一个个编译起来能把人折腾到怀疑人生。第三调试成本低。Python 代码改了立刻就能跑不用等交叉编译。对于原型验证阶段、课程设计、创客项目这类“先跑通再说”的场景这个优势特别值钱。什么人适合这套方案我做下来感觉有三类从软件转硬件方向的人急着出demo的学生或独立开发者以及需要快速做自动化实验的科研人员。如果你是专业做嵌入式产品、代码要跑在批量生产的板子上、对实时性要求到毫秒级那还是老老实实回到 C/C 的领域。Python 在这个场景不是替代是互补。2. Arduino和树莓派到底该怎么选2.1 两者本质上的区别很多新手上来就问“Arduino 和树莓派哪个好”这个问题本身就是个伪命题。这俩不是同一层级的东西硬要类比的话Arduino 更像一个“单细胞生物”——只负责一件事反应快指哪打哪树莓派更像一台“微型电脑”——能跑系统、能上网、能跑复杂程序但论实时响应反而没那么直接。Arduino 本质上是一个微控制器开发板核心是单片机芯片没有操作系统程序烧进去之后就按你的逻辑循环执行。它跟外部设备打交道非常直接某个引脚拉高LED 就亮了中间没有系统调度延迟。代价是它的资源非常有限几个 KB 的内存、几十 KB 的 Flash跑不了 Python跑不了 Linux干不了图像处理这种重活。树莓派则是一个单板计算机跑的是 Linux 发行版。它内存以 GB 计存储用 SD 卡有完整的文件系统能装 Python 和一大堆库。它控制 GPIO 也完全没问题但因为头上顶着一个操作系统引脚操作会有几十微秒到几毫秒的不确定性。而在“跑复杂逻辑”这件事上Arduino 就完全无能为力了。2.2 选型判断标准参考我后来总结了一套简单的判断标准先把你要做的事拆开看它更依赖“计算能力”还是更依赖“实时 IO”。要控制电机做精确的步进动作、读取高精度传感器、要求定时拍照的间隔误差不能超过几毫秒——优先 Arduino要做图像识别、网络通信、跑数据库、做 Web 服务器、接摄像头处理视频流——选树莓派两种需求都有那就两个都上树莓派管大脑Arduino 管手脚两者之间通过串口或 I2C 通信下面这个表格是我常用的对比维度分享给有选择困难症的朋友对比维度Arduino树莓派本质微控制器开发板微型计算机单板电脑运行方式无系统直接执行编译后的固件跑完整 Linux 操作系统Python支持本身不跑Python需由上位机控制可原生运行Python脚本实时性高引脚响应直接受系统调度影响有不确定性外设接口大量GPIO硬件接口丰富GPIO存在但更擅长网络/USB适合场景传感器采集、电机控制、精确时序视觉处理、网络服务、综合控制中枢上手难度中低中需要接触Linux基本操作典型成本较低较高相对这里想特别强调一句没有谁替代谁的问题。我见过不少项目是树莓派跑图像识别识别到特定物体之后通过串口发一个字符给 ArduinoArduino 负责执行具体机械动作——这种组合各取所长比单用任何一个都稳得多。3. 用Python控制Arduino的完整链路3.1 前置准备认识你的串口电脑控制 Arduino 最常见的物理通道是 USB 串口。Arduino 板子通过 USB 线连到电脑以后会在系统里虚拟出一个串口设备。Windows 上叫 COM3、COM4 这种名字Linux 上叫 /dev/ttyUSB0 或 /dev/ttyACM0。Python 要跟 Arduino 通信第一步就是找到这个串口并打开它。这里有个很典型的坑很多廉价 Arduino 兼容板用的是 CH340 或 CP2102 这类 USB 转串口芯片Windows 系统不认识它们设备管理器里会显示一个带问号的未知设备。这不是板子坏了是缺驱动。去查对应芯片型号的驱动装上串口就会正常出现。我个人遇到过不止一个学弟卡在“为什么我的 Arduino 插上电脑没反应”十有七八都是这个问题。在 Linux 系统下还有一个权限问题。默认情况下普通用户没有权限打开 /dev/ttyUSB0哪怕插上了也打不开。临时解决办法是用 sudo 跑 Python一劳永逸的做法是把当前用户加入 dialout 组sudo usermod -a -G dialout $USER改完需要重新登录一次。这个如果没做后面所有程序都会报“没有权限”而且看不出原因能卡你半天。3.2 Arduino端固件先让板子听懂指令Python 这边只是负责发字节真正干活的是 Arduino 上烧录的固件。举个例子我想用 Python 控制一个连接到 Arduino D13 引脚的 LEDArduino 端写这样的代码#define LED_PIN 13 void setup() { pinMode(LED_PIN, OUTPUT); Serial.begin(9600); // 和Python端波特率保持一致 } void loop() { if (Serial.available() 0) { char cmd Serial.read(); if (cmd 1) { digitalWrite(LED_PIN, HIGH); Serial.println(led_on); } else if (cmd 0) { digitalWrite(LED_PIN, LOW); Serial.println(led_off); } } }这段固件本身很简单但背后有几个值得注意的小细节Serial.begin(9600) 里的波特率必须跟 Python 端一致否则收到的全是乱码我只读一个字符作为指令没有用 readString因为 readString 会阻塞等待换行符实时性很差执行完指令后主动回一个字符串方便 Python 端确认指令是否被正确接收这个“主动回报”的习惯我是强烈建议建立的。不然 Python 发完指令就不知所云灯亮了没、传感器读数多少完全没反馈排查问题全靠猜。3.3 Python端用pySerial建立通信Python 端需要安装 pySerial 这个库pip install pyserial然后是最基础的控制代码import serial import time ser serial.Serial(COM3, 9600, timeout1) time.sleep(2) # 等待Arduino复位完成 ser.write(b1) response ser.readline().decode().strip() print(response) # 应输出 led_on ser.write(b0) response ser.readline().decode().strip() print(response) ser.close()这里有两个新手很容易栽跟头的点。第一打开串口之后必须加个 sleep。Arduino 板子在串口打开的一瞬间会硬件复位如果立刻发数据固件还没跑到 loop 函数里数据就丢了。我以前不知道这个一直以为代码有 bug查了半天发现是时序问题。这个等待时间建议至少 1.5 到 2 秒。第二发数据要发字节类型不是字符串。Python 3 里 b1 和 1 是有区别的serial.write 只接受 bytes如果你写 ser.write(1) 会直接报错。平时我习惯用 ser.write(1.encode()) 或者直接在字符串前面加 b。3.4 进阶级多字节指令与数据回传单字符指令在简单场景够用但项目稍微复杂一点就捉襟见肘了。比如你想控制舵机转到任意角度那就得传一个 0 到 180 之间的数值。我常用的做法是“头部载荷结束符”的简单协议import serial import time ser serial.Serial(/dev/ttyUSB0, 9600, timeout1) time.sleep(2) # 控制舵机到90度指令格式: angle angle 90 cmd f{angle} ser.write(cmd.encode())对应的 Arduino 端固件#include Servo.h Servo myServo; void setup() { myServo.attach(9); Serial.begin(9600); } void loop() { if (Serial.available() 0) { String data Serial.readStringUntil(); data.replace(, ); int angle data.toInt(); myServo.write(angle); Serial.println(ok); } }这个设计好在哪因为它有明确的边界。readStringUntil() 会一直读到结束符为止不会出现把两次指令数据粘连在一起的问题。如果你的指令变成“90”和“90”连续发送中间没有分隔符接收端根本分不清哪是哪。反向的数据回传也很关键。Arduino 端用 Serial.println 输出传感器数据Python 端可以连续读取并实时绘图。以前我做过一个温湿度采集的项目把 Arduino 连着的 DHT11 的数据通过串口传给电脑Python 每秒钟读一组数据并画成折线图import serial import matplotlib.pyplot as plt ser serial.Serial(COM3, 9600, timeout1) temps [] count 0 plt.ion() while count 100: line ser.readline().decode().strip() if line.startswith(temp:): temp float(line.split(:)[1]) temps.append(temp) count 1 plt.clf() plt.plot(temps) plt.pause(0.1) ser.close()这个例子的思路可以扩展到任意传感器参数记录——只要 Arduino 那边按“标签:数值”的格式输出Python 这边就能简单解析不用搞复杂的二进制格式。4. 用Python直接控制树莓派GPIO4.1 推荐使用gpiozero而非直接用RPi.GPIO树莓派控制 GPIO 有两种主流 Python 方案老牌的 RPi.GPIO 库以及树莓派官方现在推荐的 gpiozero。说实话我第一次摸树莓派时用的还是 RPi.GPIO后来项目里换到 gpiozero就再也没回去过。gpiozero 的优势不是性能而是它把常用电子元器件抽象成了 Python 对象。比如控制一个 LEDRPi.GPIO 的写法是设置模式、设置引脚、写高低电平。gpiozero 的写法是直接创建一个 LED 对象from gpiozero import LED from time import sleep led LED(17) while True: led.on() sleep(1) led.off() sleep(1)初看只是语法变化但深层的价值是把“引脚操作”和“设备行为”解耦了。你要控制一个按钮代码是from gpiozero import Button button Button(2) button.wait_for_press() print(按钮被按下了)触发事件的时候甚至连轮询都不需要了注册一个回调函数from gpiozero import Button from signal import pause def on_pressed(): print(press detected) button Button(2) button.when_pressed on_pressed pause()这种写法让代码的可读性和维护性大幅提升。做一个稍大的项目时这种抽象真的能节省大量时间——你的逻辑代码不用到处散落着 GPIO.setup 和 GPIO.output 这些底层调用了。4.2 没有屏幕和键盘怎么远程开发树莓派树莓派很多时候是“无头模式”跑的——没有接显示器、键盘、鼠标。这种情况下怎么开发我的标准姿势是 SSH。Windows 上直接用终端 SSH 就行或者用第三方终端工具连接ssh pi树莓派的IP地址检查树莓派身份验证后你会进入树莓派的 shell可以装库、跑脚本、看输出。但用终端编辑器在 SSH 里改代码体验很差我个人的推荐方案是 VS Code 的 Remote SSH 插件本地写代码实时同步到树莓派上跑调试体验几乎跟本地开发没区别。如果你不是写复杂项目只是改两行代码用 scp 把文件传过去也行scp my_script.py pi树莓派IP:/home/pi/另外强烈建议配置 SSH 公钥登录免去每次输密码的痛苦。在本地电脑上生成公钥然后复制到树莓派上ssh-copy-id pi树莓派IP配好之后 SSH 登录就再也不用敲密码了。4.3 树莓派串口控制Arduino的串联玩法树莓派本质上也是一台 Linux 电脑所以前面讲的 pySerial 在树莓派上照样能用。把 Arduino 用 USB 线插到树莓派上识别出来的串口一般是 /dev/ttyACM0 或 /dev/ttyUSB0然后跑同样的 Python 代码import serial ser serial.Serial(/dev/ttyACM0, 9600, timeout1) ser.write(b1)这个架构的妙处在于Arduino 不再需要 USB 线连电脑树莓派可以独立作为一个控制节点。我在实际的场地监控项目里就用过这个方案树莓派放在现场通过 USB 控制 Arduino 驱动的舵机和继电器同时树莓派自己跑一个 Web 服务让我在局域网内任何设备上打开网页就能控制设备。整个系统高度独立电脑端只是作为一个可选的访问入口。5. 进阶玩法I2C通信与Web控制5.1 让两个板子通过I2C协作USB 串口是树莓派和 Arduino 通信最简单的方式但它有一个限制只支持一对一的连接。如果你有多个从设备或者想省下 USB 口I2C 是个好选择。I2C 是一种总线协议支持一个主设备挂多个从设备每个从设备有独立的地址。树莓派作为主设备Arduino 作为从设备Python 端用 smbus2 库from smbus2 import SMBus bus SMBus(1) # 向地址0x04的设备发送1字节数据 bus.write_byte(0x04, 0x01)Arduino 端需要加入 Wire 库来响应 I2C 请求#include Wire.h #define I2C_ADDR 0x04 void setup() { Wire.begin(I2C_ADDR); Wire.onReceive(receiveData); } void loop() { delay(100); } void receiveData(int byteCount) { while (Wire.available()) { char c Wire.read(); // 处理接收到的指令 } }I2C 在实践中比串口稳定干扰小而且不占 USB 口。但坑也很集中地址冲突。如果你挂多个相同地址的设备必须给设备改地址或者用多路复用器否则通信会乱。另一个常见问题是接线SDA 和 SCL 两根线不能接反还必须共地。5.2 写一个Web页面来远程控制GPIO树莓派接上网络以后能干很多串口干不了的事。我最常用的模式是用 Python 的 Flask 框架写一个轻量 Web 服务通过网页按钮控制 GPIO。from flask import Flask, request from gpiozero import LED app Flask(__name__) led LED(17) app.route(/led, methods[POST]) def control_led(): state request.json.get(state) if state on: led.on() return {status: ok, led: on} elif state off: led.off() return {status: ok, led: off} return {status: invalid}, 400 if __name__ __main__: app.run(host0.0.0.0, port5000)这里有几个要点。host 必须设成 0.0.0.0 而不是默认的 127.0.0.1否则外部设备访问不到。启动服务后在局域网内任意设备的浏览器访问 http://树莓派IP:5000就能发 POST 请求控制 LED。这个思路往外延伸一下就是智能家居的基本原型把继电器换成控制电灯、水泵把 Web 服务换成小程序后台就是一个完整的物联网设备了。我做过一个多位环境监测的小项目就是走这个架构浏览器上打开页面就能看到温湿度曲线同时还能远程开关排风扇。5.3 三层架构实例一个可落地的组合方案最后分享一个自己觉得比较有代表性的三层架构这种“电脑 树莓派 Arduino”的搭配在很多项目里都能看到电脑/云端跑业务逻辑比如触发自动化规则、存储历史数据、提供管理界面树莓派作为边缘网关负责跟云端通信解析指令同时控制一个 ArduinoArduino执行细粒度的硬件操作如 PWM 控制电机转速、读取编码器信号举个例子假设你要做一个自动浇花系统。电脑上跑一个定时任务到点发指令给树莓派树莓派收到后通过串口告诉 Arduino 打开电磁阀Arduino 收到指令后拉高继电器引脚电磁阀通电开始浇水。传感器读取土壤湿度则由 Arduino 直接采集回报给树莓派树莓派再把数据传给电脑记录。这个架构里每一层都做自己最擅长的事代码好写问题也好定位。如果哪一层出了问题直接在那层的日志里查就行不需要在一堆纠缠的代码里大海捞针。6. 常见问题排查与避坑实录6.1 串口通信的“疑难杂症”串口通信的问题在我遇到的 Bug 里占了近一半。最常见的现象是Python 端代码看起来没问题但 Arduino 就是没反应。我总结了一下通常是这几个原因串口号不对。你程序里写 COM3但设备管理器里板子实际是 COM5。最简单的办法是插拔一次 USB看设备管理器里哪个端口出现/消失那就是板子的串口波特率不匹配。Arduino 端代码写的是 115200Python 端却用的 9600两边看起来都正常但数据对不上串口被占用。之前有一个 Python 进程没退出串口被占着释放不了。Windows 上这种问题尤其烦人提示“Access denied”。解决办法是关掉所有可能占用串口的程序或者重启设备数据编码问题。读上来的数据是 b1\r\n你 decode 之后忘记 strip 掉 \r\n字符串匹配永远不成功还有一个很多人不知道的点Arduino 有的板子串口打开时会自动复位。你 PC 端打开串口的瞬间Arduino 会重新启动setup 函数会再跑一遍。如果 setup 里有初始化动作或者延时它会吃掉你头 1.5 秒发过去的数据。之前的 sleep(2) 就是干这个用的。6.2 GPIO与供电的不稳定现象树莓派 GPIO 有的引脚不工作或者电平不稳定十有八九是供电问题。树莓派通过 GPIO 能输出的电流很有限直接驱动一个继电器或大功率 LED 往往不行轻则工作不正常重则烧毁引脚。我的建议是凡是电流需求超过几十毫安的负载一律不要直接接 GPIO用三极管或者继电器模块做隔离由外部电源给负载供电GPIO 只负责输出控制信号。Arduino 也存在类似的问题。当 Arduino 通过 USB 供电时它给传感器输出的电流也有限。如果同时接好几个传感器和舵机电压就会掉下来表现为舵机抖动、传感器读数漂移。解决方案很简单外部电源给电机/舵机供电Arduino 只负责信号控制两者共地。“共地”这个细节特别重要。两个板子之间通信前必须保证参考地一致否则逻辑电平的判定会出错表现就是数据乱码或者设备误动作。我在 Arduino 和树莓派通过串口通信时就踩过这个坑最后发现是 USB 线里的地线接触不良换了根线解决了。6.3 能大幅提升开发体验的配置技巧配置技巧这部分我认为最值得投入的是日志和状态机。给程序加日志听起来简单实际坚持做的人不多。我在 Python 端用了 logging 模块分级打日志INFO 记录指令和收到的回报DEBUG 记录更详细的数据ERROR 记录异常。这样程序在线跑几天后如果出了问题翻日志就能定位到是哪一步出了状况不用依赖现场复现。Arduino 端则建议把固件做成带反馈的状态机而不是简单的“收到指令就执行”。每个状态都有明确的返回值Python 端用字典映射这些返回值来判定状态。比如state_map { idle: 待机, running: 运行中, error:overheat: 过热保护, }这个做法让上位机永远知道下位机在干什么而不是发完指令就石沉大海。如果要调试串口通信本身还有一个非常有用的工具是分线器逻辑分析仪可以抓到线上的原始波特率、数据帧格式。一次排查“数据明明发了但对方收不到”的问题我用逻辑分析仪发现是第三方 USB 转串口线的时序有问题直接换线解决。如果没有这个分析仪这个问题可能排查一下午都没结果。远程开发时我还会用 tmux 维持长会话。跑一个采集脚本要挂几个小时甚至几天SSH 一旦断开进程就可能被杀掉。用 tmux 启动脚本tmux new -s monitor python3 monitor.py然后按 Ctrlb 再按 d 把会话放到后台SSH 断开也不影响。下次工作重新 SSH 上来tmux attach -t monitor 就能回到原来的界面。这个技巧在做长时间采集任务时简直是救命稻草。写在最后的个人体会这里分享两个我从这些项目里得到的最深刻的感受。第一个感受是Python 控制硬件开发的本质是“用更舒服的语言解决复杂逻辑”但对硬件的敬畏心不能丢。写代码控制一个 LED 的时候你犯的错可能只是灯不亮但当你去控制 220V 供电的设备或者做一个有安全风险的装置时一点小错误就可能是安全事故。我自己在项目里会强制加一层“物理急停”不管程序逻辑多完善都要确保手上有一个断电按钮或者硬件级保护开关。这不是代码问题是安全意识问题。第二个感受是环境搭建好以后剩下的都是熟练工。我第一次配树莓派的无头环境、配串口、跑通 GPIO 控制花了差不多一整天。第二次做同样的事半小时以内就能完成。硬件开发的初始门槛确实不低但一旦跨过去后面就是一片坦途。最后再分享一个小技巧如果你打算做这类项目一定给自己的每个设备贴上标签写好 IP 地址、串口号、账号密码。小项目搞到后面设备一多光靠脑子记这些信息百分之百会乱套。用 Markdown 或者一个笔记软件维护一份设备清单技术上不复杂但能帮你省下大量无谓的排查时间。Python 控制 Arduino 或树莓派说到底就是两件事让上层逻辑足够聪明让底层执行足够可靠。这两件事都做好了一套硬件控制系统的基本盘就稳了。

相关新闻

LiteLLM实践:统一大模型API网关,搞定多模型接入与治理

LiteLLM实践:统一大模型API网关,搞定多模型接入与治理

做AI应用最让人头疼的不是模型效果,而是各家接口不统一。今天要聊的LiteLLM(项目名是litellm),就是解决这个问题的开源方案:一套网关,把所有模型服务商的API收拢成同一个格式,后端怎么换&#x…

2026/10/13 21:20:14 阅读更多 →
LiteLLM实战:用AI网关统一多模型接入、路由与成本管理

LiteLLM实战:用AI网关统一多模型接入、路由与成本管理

litellm这个名字,如果你最近在碰多模型接入的事,应该不陌生。我最初是在一个需要同时对接多家模型服务商的项目里遇到它的:需求方今天想测A家的对话模型,明天又要试B家的长文本模型,代码仓库里堆了各家的SDK&#xff0…

2026/10/13 21:20:14 阅读更多 →
达梦数据库TPCC基准测试:BenchmarkSQL 5.0改版实战指南

达梦数据库TPCC基准测试:BenchmarkSQL 5.0改版实战指南

简介:这是一份面向数据库管理员、测试工程师与IT选型人员的BenchmarkSQL达梦适配版工具包,用于对达梦数据库开展标准化基准测试,评估其在高并发事务场景下的TPS、响应时间等性能指标,并可与Oracle、MySQL、PostgreSQL等主流数据库…

2026/10/13 21:19:13 阅读更多 →

最新新闻

考研数据结构复试高频考点、手写代码与面试应对策略

考研数据结构复试高频考点、手写代码与面试应对策略

初试成绩出来之后,很多同学会陷入一种“不知道该干什么”的状态。刷题吧,好像复试不考这么细;看论文吧,又不知道从哪看起;真要准备机试,又发现手生的厉害。我自己当年备考“考研数据结构复试题目整理”的时…

2026/10/14 4:25:51 阅读更多 →
考虑主从配电网分布式优化的ADMM算法Matlab实现与串并行对比

考虑主从配电网分布式优化的ADMM算法Matlab实现与串并行对比

最近在推进一个关于主从配电网分布式优化控制的课题时,核心目标是用交替方向乘子法(ADMM)把主网和多个配电子网之间的协同优化拆开做,整个算法在Matlab里落地,并对比了串行和并行两种执行机制下的收敛行为。从模型搭建…

2026/10/14 4:25:51 阅读更多 →
2026 AI 论文工具排行榜|按「国内毕业论文适配度」打分,适合盲审抽检环境

2026 AI 论文工具排行榜|按「国内毕业论文适配度」打分,适合盲审抽检环境

前言 很多海外 AI 工具在国外学术写作里表现亮眼,但拿到国内本科、硕士毕业论文场景,就会水土不服。国内高校论文有一套独立规则:GB/T7714 参考文献格式、固定 Word 排版规范、AI 痕迹检测、参考文献溯源抽查、逻辑盲审。 本次排行榜不再看通…

2026/10/14 4:25:51 阅读更多 →
一次GC频繁问题排查:从JFR到代码优化的完整实践

一次GC频繁问题排查:从JFR到代码优化的完整实践

大概一个多月前,我接到一条让我头疼不已的告警:某个订单查询接口的 P99 延迟从平时的 80ms 一路飙到 800ms 以上,CPU 使用率每隔几分钟就像过山车一样冲到接近 100%。一开始我照例查了流量、数据库慢查询、第三方依赖,全都没有异常…

2026/10/14 4:25:51 阅读更多 →
pdf.js在线查看PDF工具:渲染原理、避坑指南与性能优化实践

pdf.js在线查看PDF工具:渲染原理、避坑指南与性能优化实践

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

2026/10/14 4:25:51 阅读更多 →
Dropout 正则化原理与实战:从过拟合到泛化能力提升

Dropout 正则化原理与实战:从过拟合到泛化能力提升

1. 为什么一个"随手关掉神经元"的操作能成为深度学习的基石第一次在代码里写下nn.Dropout(p0.5)的时候,我其实没太当回事——不就是训练时随机扔掉一半神经元嘛,听起来像个正则化的小把戏。直到有一次复现一篇图像分类论文,模型在训…

2026/10/14 4:24:51 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →