基于树莓派实现串口UART数据自动录制与文件分割方案咨询
树莓派串口录制方案建议
Python pyserial库:最优选择之一
这绝对是靠谱且灵活的方案,完全适配你的需求:
- 树莓派预装Python,无需额外折腾环境部署;
- 实际要用的是
pyserial库(注意不是你提到的serial,安装命令是pip install pyserial),它能轻松实现串口连接、数据读取,配合Python的时间处理模块,定时分割存储的逻辑写起来毫无压力; - 你有Python基础,自定义扩展(比如过滤特定数据、异常重连、按文件大小分割)的成本极低,比CLI工具灵活得多。
替代方案对比(供参考)
- screen命令:树莓派预装,支持串口连接和日志记录,比如执行
screen /dev/ttyUSB0 115200 -L -Logfile serial_log_$(date +%Y%m%d_%H%M%S).txt就能开始记录,但定时分割需要结合shell脚本+crontab定时任务,自定义逻辑远不如Python方便; - minicom:需要手动安装(
sudo apt install minicom),也支持日志存储,但同样,定时分割得依赖外部脚本,灵活性不足。
实操建议
- 先安装依赖:
pip install pyserial - 核心代码示例(实现串口连接+定时分割存储):
import serial import time from datetime import datetime # 配置参数 SERIAL_PORT = "/dev/ttyUSB0" # 树莓派上USB串口一般是ttyUSB0/ttyACM0,用ls /dev/tty*确认 BAUD_RATE = 115200 SPLIT_INTERVAL = 3600 # 分割间隔,单位秒,示例为1小时 def main(): ser = serial.Serial(SERIAL_PORT, BAUD_RATE, timeout=1) current_log = None last_split_timestamp = time.time() try: while True: # 检查是否需要切换新日志文件 if time.time() - last_split_timestamp >= SPLIT_INTERVAL or current_log is None: if current_log: current_log.close() # 按时间戳命名日志文件 log_filename = f"serial_rec_{datetime.now().strftime('%Y%m%d_%H%M%S')}.txt" current_log = open(log_filename, 'ab') last_split_timestamp = time.time() print(f"已切换至新日志: {log_filename}") # 读取串口数据并写入文件 raw_data = ser.readline() if raw_data: current_log.write(raw_data) current_log.flush() # 确保数据实时写入,避免缓存丢失 except KeyboardInterrupt: print("录制已停止") finally: if current_log: current_log.close() ser.close() if __name__ == "__main__": main()
- 后台运行:可以用
nohup python3 serial_recorder.py &让脚本在后台执行,或者写成systemd服务实现开机自启。
内容的提问来源于stack exchange,提问作者Jenya Darby
相关产品推荐
相关产品推荐

