很多人在刚接触硬件开发时都会问:我想用Python控制开发板,是选Arduino还是树莓派?这个问题我刚开始做项目的时候也纠结过,后来踩了一圈坑才明白,它不是一道二选一的题。Arduino是一个以单片机为核心的开发平台,树莓派是一台能跑Linux系统的微型主机,两者的工作方式、适合的任务、甚至“用Python控制”的实现路径都完全不同。这篇文章我想把这两个平台搭配Python的玩法、环境配置、典型项目思路、常见报错和排查链路都梳理一遍,给正准备入门或者已经在折腾的朋友一个相对完整的参考。
1. 先把Arduino和树莓派的定位搞清楚,再决定Python脚本往哪个方向写
1.1 Arduino是单片机,树莓派是Linux小主机
Arduino的硬件核心是AVR、ARM等单片机芯片,比如最常见的Arduino Uno用的是ATmega328P,只有2KB RAM、32KB Flash。烧录代码后程序是裸机运行的,没有操作系统这个概念,上电即跑,中断响应级别是微秒到毫秒级。所以Arduino天生适合做实时性要求比较高的底层控制,比如驱动舵机、直流电机、读取编码器、处理传感器中断信号。
树莓派则完全不同。以树莓派4B为例,它是一颗四核ARM Cortex-A72处理器,内存从2GB到8GB,跑着完整的Linux系统(树莓派OS、Ubuntu等)。它本质上是一台小型电脑,可以同时开Python进程、数据库、Web服务,甚至加载本地神经网络模型做推理。树莓派虽然也带GPIO引脚,但Linux系统不是实时系统,普通GPIO翻转会有调度延迟,所以树莓派更适合做“大脑”,而不是做“肌肉”。
很多人一上来就问Arduino和树莓派哪个强,这其实是在拿螺丝刀和电钻比谁更硬,要看具体拧什么螺丝。我做过的几个项目里,凡是涉及精确时间控制的,比如平衡小车、机械臂关节,底层几乎都是Arduino;凡是涉及视觉识别、路径规划、物联网上报的,跑在树莓派上更顺手。
1.2 Python在两种板上承担的角色完全不同
这个点特别容易混淆,必须先说清楚。普通Arduino Uno、Nano这类板子,固件里跑的不是Python,出厂默认引导程序烧录的是C++代码。所谓“用Python控制Arduino”,实际指的是两种常见做法:
第一种,Python程序运行在PC或者树莓派上,通过USB串口、UART、WiFi或蓝牙给Arduino发指令,Arduino解析指令后去操作引脚。这也是最稳定、最通用的方式。我早期做智能小车项目时,就是树莓派上跑Python做视觉识别,识别到目标后通过串口发一个简单的字符命令,Arduino那边根据命令控制电机转速和方向。
第二种,给支持MicroPython的板子烧MicroPython固件,比如ESP32、树莓派Pico、部分STM32开发板,然后直接在板子上运行Python脚本。注意,这种Python不是CPython的完整实现,而是一个精简的嵌入式Python解释器。Arduino Uno和Nano的AVR芯片内存太小,装不下MicroPython,所以这类玩法主要集中在ESP32和RP2040板子上。
树莓派上的Python则是标准的CPython环境,可以直接调用GPIO库读写引脚,不需要中间转换层。你可以把树莓派当作一个可以直接控制硬件的通用计算机,这也是它做原型开发特别方便的原因。
1.3 两者搭配的典型场景
我整理了一个我常用的对比表,方便你在方案选型时快速判断:
| 对比项 | Arduino Uno/Nano | 树莓派 4B/5 |
|---|---|---|
| 核心部件 | 单片机(AVR/ARM) | ARM处理器 + Linux系统 |
| 内存 | 2KB~几百KB | 2GB~8GB |
| 操作系统 | 无(裸机) | Linux |
| GPIO实时性 | 高,微秒级中断 | 有调度延迟,适合毫秒级控制 |
| Python支持 | 需串口通信或MicroPython固件 | 原生Python + GPIO库 |
| 适合任务 | 传感器采集、电机控制、信号处理 | 视觉识别、Web服务、边缘计算、复杂逻辑 |
| 典型项目 | 智能小车底盘、舵机云台、温湿度采集 | 摄像头识别、家庭服务器、机器人主控 |
实际项目里我更喜欢树莓派+Arduino的搭配。树莓派负责“想”,Arduino负责“做”。比如做一台可以自动跟随的机器人,树莓派用摄像头识别目标,计算位置偏移,通过串口把转向角度和速度发给Arduino,Arduino再去控制电机。这样即使树莓派某个进程卡住,Arduino也能维持基本运动逻辑,不会让小车原地乱撞。
2. Arduino搭配Python的常见玩法:串口通信和Firmata协议
2.1 Arduino IDE安装、库位置改动的常见操作
玩Arduino第一步是装IDE。官方IDE有1.8.x经典版和2.x新版,我建议直接用Arduino IDE 2.x,界面更现代,自动补全和烧录监控都集成得比较好。
装完后马上会碰到一个问题,第三方库或者自己写的库默认放在用户目录下的Arduino/libraries文件夹里。比如Windows下是C:\Users\你的用户名\Documents\Arduino\libraries,Linux下是~/Arduino/libraries。这个默认路径在两种情况下会让你难受:一是系统盘空间不够,二是你希望把库和项目一起放到移动硬盘上方便多台电脑同步。
改库位置的方法很简单,在Arduino IDE里打开“文件 → 首选项”,找到“项目文件夹位置”或“Sketchbook location”,改成你想要的目录,IDE会自动把库目录切到新路径下的libraries子目录。改完之后一定要重启IDE,否则有些库还是读不到。还有一个硬核办法,用符号链接把旧位置链接到新位置,适合那种IDE版本升级后迁移配置的场景。
我实际踩过的坑是,改了项目文件夹位置后,旧项目使用的相对路径全部失效,很多第三方库的下载和更新也会指向新目录,所以迁移时最好先把旧库完整备份,然后逐个测试哪些库能用,别一股脑全删。
2.2 pySerial通信:最小可运行的上位机例子
串口是Python控制Arduino的最常见方式。Arduino端先写一个简单的C++程序,接收字符指令并控制LED:
// Arduino端 const int ledPin = 13; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { if (Serial.available() > 0) { char cmd = Serial.read(); if (cmd == '1') { digitalWrite(ledPin, HIGH); Serial.println("led_on"); } else if (cmd == '0') { digitalWrite(ledPin, LOW); Serial.println("led_off"); } } }烧录好之后,PC端先用pip install pyserial安装pySerial,然后跑这个Python脚本:
import serial import time # Windows下一般是COM3、COM4,Linux下是/dev/ttyUSB0或/dev/ttyACM0 ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1) # 等Arduino重启完成,避免立刻发指令被忽略 time.sleep(2) ser.write(b'1') response = ser.readline() print(response.decode().strip()) ser.write(b'0') response = ser.readline() print(response.decode().strip()) ser.close()这个例子的核心逻辑就是“Python发命令,Arduino执行命令,再回传结果”。实际项目里我不会用这么简单的字符协议,但思路是一样的:双方约定一个命令集,比如MOVE F 100表示前进100毫秒,MOVE B 50表示后退50毫秒,Arduino端用String或者字符数组解析,Python端用serial.write发送。
需要注意几个细节:波特率两端必须一致;USB串口设备在Linux下需要权限,没用root权限时经常遇到PermissionError,解决办法是把当前用户加入dialout组:
sudo usermod -a -G dialout $USER2.3 pyfirmata控制舵机:不刷固件的便捷方案
如果你想跳过自己写Arduino C++代码,直接用Python操作引脚,可以试试Firmata协议。Firmata是一个跑在Arduino上的通用固件,通过串口把Arduino的引脚操作暴露给上位机。
操作步骤:
- 在Arduino IDE里选择“文件 → 示例 → Firmata → StandardFirmata”,上传到板子。
- PC端安装pyfirmata:
pip install pyfirmata - 断开Arduino连接的时候重新插一下USB,让StandardFirmata跑起来,然后运行Python脚本。
控制舵机的示例:
from pyfirmata import Arduino, SERVO import time # Linux下常见设备名,Windows用COM口 board = Arduino('/dev/ttyUSB0') # 第9号数字引脚,SERVO模式 pin = board.get_pin('d:9:S') pin.write(90) # 转90度 time.sleep(1) pin.write(0) # 转0度 time.sleep(1) pin.write(180) # 转180度 board.exit()pyfirmata的d:9:S意思是digital引脚9,SERVO模式。舵机是接信号线到9号引脚、电源线和地线按接线图接好,注意舵机需要的电流比较大,别直接用小开发板上的3.3V供电,最好用外接5V电源,共地后才能正常工作。
这种方案的好处是开发速度快,不用频繁在IDE和Python之间来回切换烧录;坏处是Firmata协议有一定的通信开销,高频实时控制场景下(比如动态平衡、高速PWM输出)不太够用。我建议用它做原型验证,最终产品还是写C++更可控。
2.4 wokwi仿真平台适合验证逻辑
有时候手边没有硬件,或者想给项目写文档、做演示,可以用Wokwi这个浏览器仿真平台。它支持Arduino Uno、ESP32、树莓派Pico等多种开发板,可以直接在网页里搭建电路,模拟LED、舵机、传感器、LCD屏幕等外设。
Wokwi对Python的作用更多是验证串口通信协议。你可以先在Wokwi里搭一个Arduino仿真环境,写好C++固件,然后本机Python通过串口连到仿真端口,跑通指令流程后,再挪到真实硬件上。这样能省不少来回烧录的时间,也适合在没硬件的电脑上临时测试PySerial代码。
不过要提醒一句,仿真永远不等于真实硬件。Wokwi对时序的模拟比较理想化,真实场景里的电源噪声、电平抖动、串口收发延迟这些坑它不会帮你暴露出来。所以我的用法是:逻辑先用仿真验证,物理问题还是得上真板子踩。
3. 树莓派从系统安装到Python控制的完整链路
3.1 系统烧录、换源、Python环境配置
树莓派上跑Python,第一步是把系统装好。最推荐的是Raspberry Pi Imager官方烧录工具,选择目标SD卡、选择系统镜像,然后写入。树莓派5目前推荐装最新的树莓派OS,基于Debian的bookworm分支;如果要在树莓派上跑需要大量x86兼容软件的场景,也可以装Ubuntu 22.04 Server或Desktop版本。
装完系统后进入终端的第一个操作就是更新软件源。树莓派官方源在国外,国内直连经常慢到怀疑人生,所以很多人会换用清华镜像源。对Ubuntu 22.04来说,典型的做法是把/etc/apt/sources.list里的ports.ubuntu.com替换成清华镜像,因为树莓派是arm64架构。树莓派OS则是改/etc/apt/sources.list.d/raspi.list和/etc/apt/sources.list里的权限与源地址。
换源的命令不复杂,但很多版本差异会导致源文件路径不一样。我的建议是动手改之前先确认自己的系统版本:
lsb_release -a cat /etc/os-release然后用sed或者nano修改对应文件。改完一定要执行:
sudo apt update && sudo apt upgrade -y如果在apt update过程中频繁报错,先检查网络是否能访问镜像站,再看文件里是否有多余空格或注释符。热词里经常出现“树莓派换源买到了什么版本”,其实就说明很多人卡在版本兼容这一步。
系统源搞定后,Python环境反而简单。树莓派OS和Ubuntu都自带Python 3,但系统自带的Python版本可能不够新。我建议用python3 --version检查,如果需要升级,用sudo apt install python3 python3-pip python3-venv装好基础工具。这里我强烈建议使用虚拟环境,后面会细说。
3.2 GPIO库选型:RPi.GPIO、GPIO Zero、pigpio对比
树莓派上用Python控制GPIO,核心是选库。我遇到过很多新手上来就装RPi.GPIO,结果树莓派5上跑不了或者频繁警告。这不是代码问题,而是RPi.GPIO这几年维护缓慢,新内核上兼容性变差。
| 库名称 | 维护状态 | 适用板型 | 特点 |
|---|---|---|---|
| RPi.GPIO | 旧,更新较少 | 树莓派4B及之前 | 经典库,教程多,但新系统兼容性差 |
| GPIO Zero | 官方推荐,活跃 | 树莓派5也支持 | 接口简洁,适合快速原型 |
| pigpio | 较活跃 | 树莓派4B/5需验证 | 支持硬件PWM、远程GPIO控制 |
| lgpio | 新,面向新内核 | 树莓派5 | libgpiod封装,性能好 |
如果你用的是树莓派5,我建议优先使用GPIO Zero或者lgpio;如果只是做个简单测试且系统还是旧版本树莓派OS,那RPi.GPIO也不是不能用,只是装的时候要用pip install RPi.GPIO时注意区分是系统仓库里的版本还是社区修复版。
GPIO Zero的写法很直观:
from gpiozero import LED from time import sleep led = LED(17) # BCM编号,17号引脚 led.on() sleep(1) led.off()一个LED和按钮都能用几行代码驱动。它的代码风格比较接近“声明式”,对新手友好,但底层参数调节不够细。做PWM呼吸灯、舵机这类需要精确脉宽控制时,我反而会用pigpio或者直接操作系统接口。
3.3 引脚编号与PWM输出细节
树莓派引脚有两个常用编号体系:BOARD(物理引脚号)和BCM(Broadcom芯片名)。GPIO Zero默认用的是BCM编号,比如LED(17)就是把BCM 17映射到物理引脚11。接错板子的时候经常看到有人一脸懵,因为BCM 17和物理引脚17并不是同一个位置,用之前最好拿一张引脚图对照一下。
PWM输出是树莓派的一个弱项。普通GPIO的软件PWM由Linux内核调度产生,精度一般,做呼吸灯没问题,但控制航模舵机或者做电调信号时就不够稳。树莓派的硬件PWM只有少数几个引脚支持,比如BCM 12、13、18、19。我的建议是:需要稳定PWM时优先选这些引脚,并且用pigpio这类库来初始化和输出。
软件PWM驱动舵机的典型代码:
import pigpio import time servo_gpio = 18 pi = pigpio.pi() # 50Hz舵机,脉宽范围500us到2500us pi.set_servo_pulsewidth(servo_gpio, 1000) # 大约0度 time.sleep(1) pi.set_servo_pulsewidth(servo_gpio, 1500) # 90度 time.sleep(1) pi.set_servo_pulsewidth(servo_gpio, 2000) # 180度 pi.stop()注意set_servo_pulsewidth的单位是微秒,不是占空比。这个方法的好处是底层用的硬件定时器,输出比较稳定。给舵机供电时同样要注意外部电源共地,我见过太多人把舵机直接接树莓派5V口,结果电压被拉低、系统重启。
3.4 摄像头模块与视觉方向的衔接
树莓派搭配摄像头最常见的就是OV5647模块,也就是大家常说的树莓派Camera Module V1/V2。树莓派OS新版本里,拍照和视频采集推荐用libcamera工具链和picamera2 Python库。
安装:
sudo apt install python3-picamera2拍照:
from picamera2 import Picamera2 picam2 = Picamera2() config = picam2.create_still_configuration() picam2.configure(config) picam2.start() picam2.capture_file("test.jpg") picam2.stop()这个流程在树莓派4B和5上都能跑通。注意启用摄像头前需要在raspi-config里开启Camera接口,否则Picamera2()初始化会报错。开摄像头后如果系统很卡,多半是内存不足,可以在/boot/firmware/config.txt里调大gpu_mem,或者使用分辨率更低的预览模式。
摄像头和Python结合后,最常见的进阶方向是部署自己的YOLOv5模型做目标检测。你可以在PC上训练好模型,导出为TorchScript或ONNX格式,然后放到树莓派上跑推理。这里有个容易被忽视的问题:树莓派4B/5的内存和CPU算力有限,YOLOv5的nano模型勉强能实时跑,标准版会非常慢。优化思路一般是先降低输入分辨率、再用ONNX Runtime或TensorRT优化,最后如果还不够就考虑外接Edge TPU或NPU模块。树莓派5上部署YOLOv5,我建议先用纯CPU版本跑通流程,再一步步做推理加速。
4. 实际项目中我会怎么选择:几个典型组合方案
4.1 PC Python + Arduino的入门组合
如果你是第一次做硬件和Python结合的项目,我推荐先用PC跑Python,USB线连接Arduino,做一个最简单的温湿度采集或者LED控制。这个组合的价值在于分工清晰:Python端可以方便地打印日志、画曲线、存数据库;Arduino端负责处理传感器数据和引脚输出。入门项目可以做这样一个系统:
- Arduino接DHT11温湿度传感器,定时读取并发送到串口;
- Python通过pySerial读取串口数据,解析成结构化数据;
- Python把数据写入CSV,或者用Flask开一个本地网页实时展示温度曲线。
这个组合不需要树莓派,也不涉及复杂的Linux配置,最适合把“串口通信”这个底座打牢。
4.2 树莓派单独完成采集、控制与推理
如果项目需要视觉能力,同时又要驱动一定数量的外设,可以考虑树莓派单机方案。比如做一个视觉跟随小车:树莓派接摄像头识别目标,通过GPIO控制电机驱动模块,全程Python一个进程搞定,不需要另外一块主控板。
这种方案的优点是软件栈统一,开发效率高;缺点是GPIO实时性有限、功耗比Arduino高、一旦Linux系统卡死外设也跟着失控。所以我给这种方案划了一条线:外设数量尽量少于五个,控制频率不要超过几十赫兹,比如摄像头追踪目标、控制两路电机,这种场景完全够用。
4.3 树莓派+Arduino的主从异构方案
项目越来越复杂之后,我会回到“树莓派做主控、Arduino做执行器”的异构方案。这也是很多成熟机器人项目的基线架构。
通信方式一般有两种:树莓派的UART串口连接Arduino,或者USB线连接。UART需要先启用树莓派的串口功能,并在/boot/firmware/config.txt里把串口映射到GPIO引脚;USB连接则更简单,即插即用。通信协议我建议用两行以内的约定,不要一开始就上复杂协议:
# Python发送给Arduino的指令格式 MOVE 100 50 # 前进,速度100,转向50 SERVO 9 90 # 9号舵机转90度Arduino端用Serial.readStringUntil('\n')接收一整行,再用空格拆分成命令和参数。Python端用serial.write((cmd + '\n').encode())发送。这个方案的实时闭环仍然由Arduino负责,树莓派挂了Arduino也会维持最后一条指令,安全性高很多。
4.4 几种方案怎么选,我给一个快速判断顺序
判断顺序其实就三步:先问这个项目有没有视觉或复杂AI需求,有就加重树莓派;再问这个项目的外设控制是否需要微秒级实时性,需要就加Arduino;最后问项目规模是否允许功耗大、体积大部分,允许就用树莓派单机。如果两个答案都偏向中间,那就采用主从异构方案。硬件选型没有绝对正确,只有适不适合当前任务。
5. 常见故障的排查链路:从板上红灯到Python报错
5.1 Arduino上传超时和端口识别不到
这个报错在所有Arduino新人里几乎都会出现,症状一模一样:点上传按钮,进度条卡几秒,然后提示avrdude: stk500_getsync() attempt 1 of 10: not in sync或Problem uploading to board。
我的排查顺序是这样的:
- 先看板子型号是否选对。偷懒选成Arduino Uno,但手里是Nano或者NodeMCU,肯定超时。
- 再看端口是不是被占用。Arduino IDE自带的串口监视器、Python脚本、其他串口工具同时开着同一个串口,很容易导致上传失败。关掉其他程序再试。
- 拔掉所有外围设备,只留USB线。外设短路或大电流干扰经常导致复位失败。
- Windows环境下检查设备管理器,如果显示CH340或者CP210x,说明用了国产USB转串口芯片,需要装对应驱动。Linux下用
ls /dev/ttyUSB*或/dev/ttyACM*查看设备是否存在。 - 如果一直失败,检查板子的旧Bootloader问题。很多便宜的Uno兼容板用的是老版本Bootloader,需要在IDE的“工具 → 处理器”里选择
ATmega328P (Old Bootloader)。
我曾经排查过一块上传一直失败的板子,最后发现是USB线太细导致供电不稳。换一条带屏蔽的USB线立刻好了。USB线这东西往往是最容易被忽略的坑。
5.2 树莓派红灯闪烁、磁盘写入被拒绝
树莓派板载红色LED闪烁,通常意味着系统启动失败或者供电不足。刚通电时红灯常亮是正常的,但如果在开机过程中持续闪烁甚至熄灭,最大嫌疑是电源不能提供足够的电流。手机充电器标称5V 2A,实际很多是虚标,接上鼠标键盘就没有余量了。建议直接换5V 3A以上的独立电源,最好用树莓派官方电源。
另一种红灯闪烁的情况是SD卡上的系统文件损坏。我经历过树莓派5突然红灯狂闪,拔下来把SD卡插到电脑上,读卡器提示分区无法访问。这种情况只能重新烧录镜像。如果是重要数据没备份,很多文件可能已经找不回来了。所以我现在的习惯是:系统配置好之后立刻做一次完整镜像备份,用dd或者Raspberry Pi Imager的“读取备份”功能都行。
磁盘写入被拒绝这个热词我推测是烧录镜像或者挂载SD卡时遇到的问题。在Windows上,烧录工具提示“访问被拒绝”,通常是因为杀毒软件在后台占用SD卡,或者系统把SD卡分区识别为正在使用中的可移动磁盘。关闭杀毒软件、重新插拔读卡器之后重试,大概率能解决。在Linux/macOS上,如果mount之后写入失败,检查SD卡是否被设为只读,很多SD卡侧面有个小的写保护锁。
5.3 SSH连不上或只能进命令行没有图形界面
树莓派OS默认不开SSH服务。无显示器第一次连接时,烧录系统后需要在SD卡的boot分区放一个名为ssh的空文件,这样开机后才会启动SSH服务。不放这个文件,任何SSH客户端都连不上。
局域网内连接方式:
ssh pi@树莓派IP如果不知道树莓派的IP,从路由器后台找设备列表,或者用ping raspberrypi.local解析mDNS地址。树莓派5的默认主机名可能已经变了,最好在配置时自己改成一个好记的名字。
“只能进命令行没有图形界面”这个问题一般是因为安装的是Lite版系统,或者开机默认进入命令行模式。如果你想要图形界面,执行:
sudo raspi-config在“System Options → Boot / Auto Login”里选择Desktop Autologin,重启后进入桌面。还有一个场景是用VSCode远程开发,你只通过SSH连上后,在VSCode里安装Remote-SSH扩展,再打开远程文件夹,就能看到图形化的文件树和终端窗口,这个体验比纯命令行友好很多。
5.4 Python库装了却导入失败
树莓派上最常见的Python报错是ModuleNotFoundError: No module named 'xxx'。明明刚用pip install装过,但运行时还是找不到。原因八成是你装了虚拟环境之外的包,或者用错了解释器。
排查思路:
- 用
which python3和which pip3确认当前使用的是哪个解释器。 - 用
python3 -m pip --version检查包安装路径。 - 如果系统里有多个Python版本,比如树莓派OS自带的3.9和后来手动编译的3.11,
pip装的包可能只进了3.9,但python3打开的却是3.11。 - 最稳妥的解决方案是永远在虚拟环境里运行项目:
python3 -m venv ~/myenv source ~/myenv/bin/activate pip install pyserial python-dotenv虚拟环境的好处是每个项目有独立的依赖目录,不会和系统包互相污染。树莓派5上部署YOLOv5这类依赖很多的项目,如果不拆环境,极容易遇到“A库需要numpy 1.x,B库需要numpy 2.x”的冲突。
至于热词里出现的“要安装缺失的节点,请先在你的python环境中运行pip install -u --pre comfyui-m”,这是某些AI绘图工具在检测到Python依赖不完整时的固定提示。遇到这种提示,先看它希望你激活哪个环境,再按提示安装即可,本质就是上面说的环境和依赖管理问题。
6. 最后分享几个我自己的使用习惯
做了几年软硬结合的项目,最深的体会是:先把链路跑通,再谈优化。很多新手喜欢一开始就搭一套复杂的架构,结果Arduino端还在调舵机,树莓派那边又要跑数据库,最后哪头都没搞利索。我自己现在的流程是二十行代码先点亮一盏灯,然后串口发一个字符,逐步把链路所有环节验证一遍,再往上面堆功能。
硬件实验最怕的其实是供电。Arduino外接直流电机时,电机的瞬时启动电流很大,和传感器共用一路电源会导致电压跌落,轻则数据异常,重则单片机复位。树莓派更敏感,所以我在所有项目里都会准备一个稳压模块或者独立电源,然后保证所有模块共地。
还有一点,日志和数据记录一定要早做。Python做上位机时,随手把原始串口数据用CSV存下来,排错的时候能救你命。我有一次调一个看似随机出现的通信丢包问题,就是因为保存了时间戳之后才发现在整秒时刻板子会重启,最后定位到是舵机峰值电流打掉了电源电压。
最后想说的是:Arduino和树莓派之间的选择会随着项目变化而变化,今天做小车可能觉得树莓派方便,明天做精确控制又觉得Arduino更稳。没必要把自己绑定在某一个平台上,两者配合着用,才是做嵌入式系统最舒服的状态。如果这篇文章能让你少踩几个我踩过的坑,那就很值了。