Python控制硬件:Arduino与树莓派实战对比与协同架构
聊到用Python控制硬件大部分教程会把Arduino和树莓派放在同一个标题下讲好像这俩就是同一个东西的两种形态。等我把两种方案都跑进真实项目里才发现开发体验完全不一样Arduino这条路核心是和串口协议斗智斗勇树莓派这条路则是跟Linux权限、GPIO抽象层较劲。这篇文章想把我这几年折腾两个平台的经验摊开说清楚聊聊环境配置、串口协议、GPIO控制以及把两者串成一个系统的做法。如果你正准备用Python去接Arduino或者打算用树莓派直接驱动外围设备不管是要做智能家居、机器人小车还是想给工位加一个自动化小装置这篇文章都能帮你提前绕开我踩过的坑。1. 先分清两条路单片机和小电脑的控制思路根本不同1.1 Arduino的实时性与裸机思维很多新手第一次拿到Arduino板子第一反应是这东西不就是个迷你电脑吗还真不是。Arduino核心是一片单片机代码编译成机器码后直接跑在裸金属上没有操作系统、没有进程调度、没有内核驱动这一层。你用Python写的程序没法直接在Arduino上运行Python代码跑在电脑这边通过串口把指令发给Arduino去执行。这个区别直接决定了你的编程思维。Arduino端是C程序一个loop()函数永远在转圈同时可以通过硬件中断处理紧急事件。比如电机编码器的脉冲测量用中断函数能做到微秒级响应而你在Python那边哪怕开了threading线程切换的时机也不是你说了算的。所以凡是涉及实时性、时间精度、频繁IO操作的活都应该放到Arduino这端完成。我也见过不少人试图在树莓派上复刻这种写法——用一个while True死循环去轮询引脚。短期跑没问题但系统负载一上来比如另一个Python进程正在做网络请求或者系统后台在自动更新这个循环的周期就会被拉得非常不稳定偶尔丢几个触发事件太正常了。这就是软实时和硬实时的本质差距。1.2 树莓派是Linux系统GPIO不是加强版单片机树莓派的本质是一台跑完整Linux系统的单板电脑。它的GPIO引脚挂在系统设备文件上Python程序通过内核模块读写引脚。这带来了巨大好处完整的Python生态随便用pip install一个包就能干活数据库、Web框架、MQTT客户端、OpenCV视觉处理全都原生支持。坏处同样明显——GPIO操作的时序确定性远不如单片机而且所有IO操作都绕不开Linux的权限模型。我经常跟人说一句话树莓派不是为了点灯存在的是为了点完灯之后还能把数据传到手机上存在的。如果你的项目核心只是采集传感器、控制电机、执行固定循环树莓派的配置成本其实远高于Arduino但一旦涉及网络、存储、界面、爬虫、图像识别这些电脑该干的活树莓派就是不可替代的角色。1.3 一张表快速做选型我根据自己的项目经验做了一张很粗暴但好用的选型表对比维度Arduino树莓派运行方式裸机执行上电即跑Linux系统需要启动引导实时性硬件中断级别稳定受系统调度影响软实时直接跑Python不能一般靠上位机原生支持功耗低适合电池供电较高需要稳定电源网络能力基本没有需扩展模块自带Wi-Fi和有线网典型定位传感器采集、电机执行的手脚数据处理、决策、服务的大脑成本低高选型的时候别问谁更强要问我在它上面跑什么。跑逻辑闭环和传感器采集选Arduino跑视觉、Web服务、日志分析选树莓派。而实际上这俩从来不是竞争关系最常见的场景是各干各的然后用一条串口线连起来协同工作——这个组合我会在第5章详细展开。2. 动手前的环境坑串口名、驱动和权限拦住了八成新手2.1 设备名到底叫什么COM口、ttyACM0还是ttyUSB0环境配置是劝退新手的第一道坎最大的问题就是找不到串口设备名。Windows下插上Arduino一般会多出一个COM3或COM4macOS下是/dev/tty.usbmodem...Linux下最常见的两个名字是/dev/ttyACM0和/dev/ttyUSB0。很多第一次在Linux下用Python控制Arduino的朋友照着教程写/dev/ttyACM0却打不开或者打开的是别的设备一脸懵。这里有个经验规律Arduino板载的USB转串口芯片一般是原生USB CDC设备在Linux下会注册成/dev/ttyACM*而用外接USB转TTL小板常见芯片是CH340、CP2102时注册的是/dev/ttyUSB*。所以如果你买的是带板载USB口的Arduino板大概率是ttyACM0如果用的是裸控制器加下载模块那多半就是ttyUSB0。最快确认设备名的办法有两个。第一插板子前后分别执行一次ls /dev/tty*多出来的那个就是它。第二用pySerial自带的枚举工具python -m serial.tools.list_ports它会打印所有可用串口名称和描述信息很多时候直接告诉你这是Arduino还是哪个USB转串口模块比自己猜靠谱得多。2.2 串口和GPIO的权限问题在Linux下/dev/ttyACM0这个设备属于dialout组普通用户默认没有读写权限。所以很多人第一次跑serial.Serial()就报PermissionError: [Errno 13]然后查驱动、换数据线全试了一遍都没用——问题根本不在硬件而在权限。解决办法是把当前用户加进dialout组sudo usermod -aG dialout $USER提示修改用户组之后必须注销重登或者重启一次组权限才会生效。别问我是怎么知道的。树莓派上还有类似的坑GPIO设备文件挂在gpio组I2C总线挂在i2c组。如果你在树莓派上用smbus2读I2C传感器报权限错误多半是用户不在i2c组。把这些组一次性加好能省掉后续大量莫名其妙的排障时间sudo usermod -aG gpio,i2c,dialout $USER2.3 固件烧录策略Firmata快速上手还是自研协议环境准备的最后一步是决定Arduino里烧什么程序。这里有两套主流方案取舍逻辑很有意思。方案A烧录一个通用固件比如StandardFirmata。这个固件就像一个万能遥控器把串口收到的命令翻译成对应的引脚操作GPIO、PWM、ADC都能处理。用Python的pyFirmata库就能直接操作Arduino引脚连C都不用写。优点是入门极快写几行Python就能点亮LED缺点是控制逻辑全在Python端Arduino只是翻译官实时性和可靠性完全受串口链路限制稍微复杂的闭环控制就做不了。方案B自己写Arduino固件和Python协议。Arduino端定义好串口命令格式Python端严格按格式收发。前期多花半小时但后期扩展空间完全不同——你可以在Arduino端做PWM闭环、中断计数、故障保护这些都是Firmata很难给你的。我的经验是验证想法、跑通Demo用Firmata做正经项目、需要长期稳定运行必须走方案B。3. 让PC指挥Arduino一条串口线背后的协议设计3.1 为什么不能直接print(hello)了事假设你已经能让Arduino的串口监视器打印hello了但把print(hello)换成Python的ser.write(bhello)却发现Arduino那边毫无反应。原因很简单串口只是一条字节管道它本身不包含这句话从哪里开始、在哪里结束的信息。Arduino端要用Serial.read()把字节慢慢读进来自己拼出完整的命令。如果没有事先约定两端就像两个只说方言的人谁也不知道对方在讲什么。所以做PC控制Arduino的第一件事不是写代码而是定协议。协议不需要复杂但必须有三个要素命令格式、结束符、应答机制。3.2 最小帧协议命令格式、分隔符与响应机制我最常用的一套极简协议是文本行协议每条指令是一个以换行符\n结尾的文本行字段之间用逗号分隔。换行符就是协议的分隔符Arduino端用Serial.readStringUntil(\n)就能把一条完整指令读进来Python端发完指令再发一个\n即可。文本协议比二进制协议直观调试时用串口监视器直接看不用解析字节对新手非常友好。这套协议可以这样定义方向帧格式含义PC → ArduinoM1,150\n把1号电机目标速度设为150PC → ArduinoS1\n查询1号传感器当前值Arduino → PCOK\n上一条命令执行成功Arduino → PCERR,1\n上一条命令执行失败错误码1Arduino → PCS1,23.5\n应答传感器查询值是23.5应答机制很重要。很多新手发完指令就不管了结果程序出问题时根本不知道是Python没发出去、Arduino没收到、还是收到了但执行出错。加上ACK和错误码每条指令的结果都是确定的调试时只要打印返回值链路状态一目了然。如果项目现场电磁干扰很严重比如旁边有电机驱动器或逆变器文本行协议还需要加一个简单的校验。常用做法是在行尾追加一个累加和校验字节Arduino端算一遍对不上就返回ERR,2。先用能发现问题的简单校验就够不用一上来就上复杂算法。3.3 Python端发送和Arduino端解析的完整代码协议定完代码就非常机械了。Python端用一个函数封装发送逻辑import serial ser serial.Serial(/dev/ttyACM0, 115200, timeout1) def send_frame(cmd: str) - str: # 保证帧以换行符结尾 if not cmd.endswith(\n): cmd \n ser.write(cmd.encode()) # 读取应答行并去掉末尾换行 resp ser.readline().decode().strip() return resp print(send_frame(M1,150)) print(send_frame(S1))Arduino端就是一个分派器读到一行完整的文本按M和S前缀交给对应的处理逻辑。以简单的电机控制和传感器查询为例void setup() { Serial.begin(115200); pinMode(9, OUTPUT); } void loop() { if (Serial.available() 0) { String cmd Serial.readStringUntil(\n); // 读一行 cmd.trim(); // 去掉多余空白 if (cmd.startsWith(M)) { // M1,150 - 电机编号和速度 int comma cmd.indexOf(,); int motor cmd.substring(1, comma).toInt(); int speed cmd.substring(comma 1).toInt(); if (motor 1) { analogWrite(9, speed); Serial.println(OK); } else { Serial.println(ERR,1); // 未知电机编号 } } else if (cmd.startsWith(S)) { int idx cmd.substring(1).toInt(); if (idx 1) { float v analogRead(A0) * (5.0 / 1023.0); Serial.print(S1,); Serial.println(v, 2); } else { Serial.println(ERR,1); } } } }这段代码看起来简单但里面藏着两个容易忽略的细节。第一readStringUntil(\n)是阻塞式的如果Python端发了数据却忘了发换行符Arduino就会一直等在这里看起来像死机。第二cmd.trim()必须加因为串口数据里可能混入\r有些USB转串口芯片会自动把换行转换成\r\n不清理的话字符串比较就全部失败。3.4 读回传感器数据轮询模式与主动上报模式传感器数据怎么回到Python两种模式都要会。轮询模式就是上面代码里S1的用法Python主动发查询命令Arduino收到后回复当前值。这种方式实现简单、主动权全在PC端适合传感器量少、查询频率不高的场景。缺点是每次读都有一次往返延迟而且Arduino没法主动上报突变事件——比如急停开关被按下Arduino只能等PC想起来才说。主动上报模式则是Arduino在loop()里周期性主动发送数据帧Python端开一个后台线程持续读串口并解析每一行。这更适合连续监控类数据比如温湿度每秒上报一次、姿态传感器每10毫秒上报一次。Python端的读取必须独立成线程因为serial.read()是阻塞的如果放在主循环里串口缓冲区一旦积压旧数据就会把新数据挤掉。import serial import threading import time ser serial.Serial(/dev/ttyACM0, 115200, timeout0.1) def read_loop(): while True: line ser.readline().decode().strip() if line: print(Arduino:, line) threading.Thread(targetread_loop, daemonTrue).start() # 主线程干别的或者持续发送命令 while True: ser.write(bM1,150\n) time.sleep(2)4. 树莓派自己就能干GPIO直连、PWM和I2C4.1 gpiozero与RPi.GPIO两个库的实际分工树莓派上用Python控制引脚绕不开两个库老牌的RPi.GPIO和官方推荐的gpiozero。很多新人在纠结该学哪个我的建议很直接新项目一律用gpiozero除非你真的需要RPi.GPIO那套底层控制。RPi.GPIO的典型写法是面向过程的你要自己setmode(GPIO.BCM)、setup(pin, GPIO.OUT)用完还得记得GPIO.cleanup()。它功能齐全能直接操作PWM和中断但代码组织比较零散适合对底层时序要求极高的场景。gpiozero则是面向对象的一个LED就是一个LED对象一个按钮就是一个Button对象开灯关灯、按键回调都是属性和事件代码读起来像自然语言from gpiozero import LED, Button from signal import pause led LED(17) # BCM编号17 btn Button(2) btn.when_pressed led.on btn.when_released led.off pause() # 保持程序运行等待事件这段代码没有一行手动轮询引脚状态的逻辑Button内部已经处理了上拉电阻配置和按键抖动when_pressed回调在后台线程触发。对应用层开发来说这就是产品级的抽象省掉的暗坑远比多出来的一层封装更有价值。4.2 从点亮LED到PWM调光常用操作的代码模板GPIO控制的几个基础操作各有各的细节风险我一并给出模板和注意点。点灯和延时是最基础的from gpiozero import LED from time import sleep led LED(17) for _ in range(3): led.on() sleep(0.5) led.off() sleep(0.5)PWM调光用PWMLEDfrom gpiozero import PWMLED from time import sleep led PWMLED(18) for duty in range(0, 101, 5): led.value duty / 100.0 # 注意是0~1的浮点数不是0~100 sleep(0.1) led.off()按键输入有两个注意点。一是默认的Button使用上拉电阻引脚无操作时读到高电平按下时接地变低电平如果你的按键接线是反的需要Button(pin, pull_upFalse)并加外部下拉。二是抖动问题物理按键按下瞬间会产生几毫秒的电平抖动gpiozero默认有抖动过滤窗口但如果你用RPi.GPIO手动轮询就得自己在软件里加延时过滤不然一次按键会被识别成好几次。4.3 smbus2读取I2C传感器附避坑经验树莓派的I2C总线挂在引脚2SDA和引脚3SCL上。系统层面先把I2C功能打开在终端执行sudo raspi-config进入Interface Options把I2C启用再装好工具sudo apt install i2c-tools python3-smbus然后扫一遍总线看传感器在哪个地址i2cdetect -y 1正常会打印出扫描表某个格子里显示传感器的设备地址比如常见的模拟温度芯片地址是0x48。这一步强烈建议先做因为不扫地址直接猜代码里写错了会浪费大量时间。用smbus2读传感器示例代码如下from smbus2 import SMBus bus SMBus(1) # 树莓派的第一组I2C总线 addr 0x48 def read_temp(): raw bus.read_word_data(addr, 0x00) # 很多芯片字节序是低字节在前需要拆开重拼 msb raw 8 lsb raw 0xFF return -0.25 * ((msb 4) | (lsb 4)) print(read_temp())这里有个常见坑read_word_data读回来的是2字节但I2C设备的字节序并不统一。很多芯片是低字节在前、高字节在后直接把返回值当整数算出来的温度完全不对。正确做法是拆成两个字节根据芯片手册里的位定义自己拼接。这类问题靠猜是猜不出来的必须对着手册算。5. 高阶玩法树莓派当大脑、Arduino当手脚的混合架构5.1 为什么这个组合最耐用做了几个项目之后我越来越认同一个组合树莓派和Arduino之间用一条串口线连接Arduino负责所有实时IO操作树莓派负责协议解析、逻辑判断和网络上报。原因很简单。Arduino上电就执行没有操作系统启动过程不会因为系统更新或某个进程崩溃而停摆。哪怕树莓派那边网络挂了、Python进程崩了Arduino依然可以按最后收到的指令做本地闭环紧急情况下还能执行预设的安全动作。反过来树莓派不用处理复杂的引脚时序可以把精力放在Python的大生态上。我做过一个模拟项目X需要在设备上同时跑温湿度采集、风扇PWM调速和远程状态页面。最开始全放在树莓派上结果系统负载一高PWM波形的周期就开始抖动风扇噪音忽大忽小后来把采集和PWM降级到Arduino上树莓派只负责读串口数据和提供Web页面稳定性问题一下消失了。5.2 通信协议里必须考虑的三件事混合架构的通信协议比PC直连Arduino要更讲究一些至少三个点必须先想清楚。第一是心跳与超时。树莓派要定期给Arduino发心跳帧比如每500毫秒发一个H\nArduino如果在1秒内没收到心跳就执行保护逻辑把所有输出设为安全值。这相当于给串口链路加了看门狗防止树莓派Python程序挂掉时外围设备乱动导致事故。第二是数据流方向管理。树莓派要下发指令、上传遥测两条方向都挤在同一条串口线上必须约定好帧格式和频率。我的经验是下行指令用独立字符前缀区分M、P、H上行遥测统一走T,metric,value格式树莓派端按换行符切分数据行。不要让Arduino每秒钟拼命发数据自己的应答会被淹没。第三是缓冲区余量。Arduino的串口接收缓冲区通常不大如果上行遥测和下行指令混杂且频率太高很容易溢出丢帧。解决办法很粗暴但有效降低上报频率、缩短帧长度、重要数据加序号Python端发现序号不连续后主动补查。5.3 一个温湿度监控的完整链路示例这套架构写一个简单但完整的例子就是温湿度监控。Arduino端每秒钟读一次温湿度传感器通过串口上报void setup() { Serial.begin(115200); } void loop() { // 假设readTemp()和readHumidity()已经在别处实现 float t readTemp(); float h readHumidity(); Serial.print(T,); Serial.print(t); Serial.print(,); Serial.println(h); delay(1000); }树莓派端用后台线程持续解析串口把数据写入结构化日志import serial import threading import time import csv ser serial.Serial(/dev/ttyUSB0, 115200, timeout0.1) stop threading.Event() def parse_loop(): with open(env_log.csv, a, newline) as f: writer csv.writer(f) while not stop.is_set(): line ser.readline().decode().strip() if not line.startswith(T,): continue parts line.split(,) if len(parts) ! 3: continue temp, humi float(parts[1]), float(parts[2]) writer.writerow([time.time(), temp, humi]) print(ftemp{temp:.1f} humi{humi:.1f}) threading.Thread(targetparse_loop, daemonTrue).start() while True: time.sleep(1)这个例子虽然小但已经包含串口非阻塞读取、数据行切割、字段校验、落盘记录这些关键环节。等你想把数据推送到云端或接入可视化面板时只需要在parse_loop里加一个HTTP请求或者用MQTT客户端发布——树莓派的价值到这里才真正体现出来。6. 实测里反复踩的五个坑从串口占用到电平不匹配6.1 串口被占用Arduino IDE还开着就打不开最常见也最容易被忽略的问题你先打开了Arduino IDE的串口监视器再运行Python代码结果报could not open port。原因在于一个串口设备同一时间只能被一个进程独占IDE的串口监视器不关Python就抢不到设备。解决办法是把串口监视器关掉或者运行lsof /dev/ttyACM0看看是哪个进程占着端口处理掉再重试。这个坑几乎每个人都踩过之前还一直以为是驱动坏了。6.2 非阻塞读与缓冲区溢出的数据处理经验串口数据读取不能靠感觉来控制。最容易翻车的写法是Arduino的loop()里不加任何延时每秒发几百条数据Python端来不及读缓冲区溢出结果丢掉一半数据。这时候你去看数据会发现数值跳来跳去、缺少连贯性还以为是传感器坏了其实是传输堵车。正确做法是两端配合Arduino端根据实际需求控频没必要跑得那么快就加delay()Python端一定要用独立线程及时把字节从内核缓冲区读走并用按换行符拼行的方式解析确保半条数据帧也能被正确处理。第3.4节给出的读线程代码就是可以直接改用的模板。6.3 3.3V和5V混接电平不匹配是长期隐患树莓派的GPIO是3.3V逻辑Arduino大部分引脚是5V逻辑。两者直接相连时Arduino输出给树莓派的高电平是5V而树莓派引脚并不耐受5V。长期这么接轻则误判电平重则烧毁引脚。可行的方案有三类用双向电平转换模块串一个电阻分压网络把5V降到3.3V或者干脆选3.3V供电的Arduino兼容板让两端逻辑电平一致。这里特别提醒一种看似聪明的做法——只连GND和信号线、不接电源靠模块自身的电平判断这往往会导致上电顺序问题设备状态非常不稳。6.4 供电不足电压跌落和反复复位的诡异组合Arduino插着电脑USB供电能正常跑一旦接上电机或继电器就反复重启这是典型的供电不足。电机启动瞬间的电流通常是额定电流的好几倍USB口的过流保护一触发板子电压跌落单片机直接复位。解决思路是让动力部分和控制部分分开供电电机用独立电源Arduino或树莓派用另一路电源然后两路电源的GND必须连在一起。很多人忽略共地结果信号电平没有参考基准通信时有时无。这是模拟电路的基础知识但在数字开发时代特别容易被跳过值得反复强调。6.5 一个通用的排查顺序项目出问题时我通常按这个顺序排查比乱改代码有效得多先量供电确认各路电压正常再看串口能不能通用一个短指令测试确认能收到应答再看协议解析用命令行工具直接往串口发原始帧观察Arduino的反应最后才看Python代码逻辑。底层供电不稳、串口不通的时候前端代码调试得再漂亮也没用。最后分享一个我自己受用很久的习惯真正跑项目之前先用串口助手或minicom这类工具手发一轮帧把Arduino的每一种响应都验证一遍然后再上Python。很多时候你以为协议写对了结果发一个M1,150\nArduino回了一个ERR,1就因为这帧里混进了不可见字符。这种问题用Python调半天不如在串口助手里一眼看穿。控制硬件和写纯软件最大的不同就在这里——你要面对的不只是自己写的代码还有一个真实物理世界的延迟、噪声和不确定性。习惯了这一层用Python控制Arduino或树莓派的路才算真正走通。

相关新闻

eSIM开户安全基石:二要素认证的技术拆解与工程实践

eSIM开户安全基石:二要素认证的技术拆解与工程实践

eSIM这个概念聊了很多年,真正大规模落地也就是近几年的事。我最早接触eSIM开户相关的项目,是在给某运营商做线上开户支撑系统的时候。那时候团队讨论最多的还是Profile怎么下发、兼容性怎么处理,等到线上开户量真正涨起来,大家才猛…

2026/10/16 4:48:25 阅读更多 →
eSIM开户的二要素认证:原理、落地与避坑指南

eSIM开户的二要素认证:原理、落地与避坑指南

eSIM开户已经不是什么新鲜事,但很多人不知道,真正决定开户能不能顺利完成的,不是手机型号,也不是网络条件,而是二要素认证。我在处理线上开户反馈时,经常遇到用户卡在“身份核验”这一步,要么证…

2026/10/16 4:48:25 阅读更多 →
KV Cache 显存优化实战:长上下文推理性能瓶颈与调优策略

KV Cache 显存优化实战:长上下文推理性能瓶颈与调优策略

1. 从一次对话卡顿说起:KV Cache 到底在解决什么问题如果你用过任何基于 Transformer 架构的对话模型,大概率遇到过这样一种体验:刚开始聊的时候,回复速度飞快,字是一个一个往外蹦的;聊到几十轮之后&#x…

2026/10/16 4:48:25 阅读更多 →

最新新闻

OpenPose实战避坑指南:多人姿态估计与骨骼角度计算

OpenPose实战避坑指南:多人姿态估计与骨骼角度计算

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

2026/10/16 5:28:35 阅读更多 →
两串电池被动均衡设计:MP2642GR-Z与STM32F302R8实践

两串电池被动均衡设计:MP2642GR-Z与STM32F302R8实践

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

2026/10/16 5:28:35 阅读更多 →
双串电池主动均衡系统设计:从硬件电路到固件策略

双串电池主动均衡系统设计:从硬件电路到固件策略

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

2026/10/16 5:28:35 阅读更多 →
雨课堂选择题结构化采集与教学题库构建实践

雨课堂选择题结构化采集与教学题库构建实践

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

2026/10/16 5:28:35 阅读更多 →
PLC与变频器Modbus RTU通讯实战:S7-200 SMART控制多台TECO N310

PLC与变频器Modbus RTU通讯实战:S7-200 SMART控制多台TECO N310

做设备改造这几年,PLC 和变频器之间的通讯是绕不开的活。前段时间接了一个某生产线的小改造,要求用一台西门子 S7-200 SMART 同时控制三台东元 TECO N310 变频器,远程给定频率、启停,还要把每台电机的运行频率、电流和故障状态实时…

2026/10/16 5:28:35 阅读更多 →
两节串联电池均衡方案:硬件自动均衡芯片与MCU协同实现

两节串联电池均衡方案:硬件自动均衡芯片与MCU协同实现

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

2026/10/16 5:27:35 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

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

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/15 9:49:14 阅读更多 →