尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Python控制Arduino与树莓派:从串口通信到智能小车实战

Python控制Arduino与树莓派:从串口通信到智能小车实战 1. 方案选型Arduino 还是树莓派还是全都要先说个背景。我折腾Python控制硬件这条路最早是从一块Arduino Uno入手的。当时手里有一堆传感器、舵机、电机驱动板想做个自动浇水的东西但Arduino的C写起来有点费劲尤其遇到字符串处理、HTTP请求这种活在8位单片机上简直是灾难。后来想干脆让电脑上的Python直接指挥Arduino算了于是走了几条不同的路踩过不少坑。现在再回头看很多人一开始都会纠结同一个问题Python操作硬件到底选Arduino还是树莓派我的答案是这俩根本不是二选一的关系而是在不同场景下各有各的不可替代性。Arduino本质是一块STM32或AVR单片机开发板裸机运行没有操作系统实时性极强。舵机PWM调速、电机闭环控制、传感器中断响应这类对时序要求苛刻的任务Arduino拿手。但它资源少得可怜——Uno只有2KB SRAM、32KB Flash跑不了Python解释器microPython除外那是另一种玩法。所以Python控制Arduino的真实含义不是让Python跑在Arduino上而是让Python跑在电脑或树莓派上通过串口、网络去指挥Arduino干活。Arduino扮演的是手和脚Python扮演的是大脑。树莓派则是一个完整的Linux系统可以装Python 3、OpenCV、TensorFlow直接操作GPIO管脚驱动LED、读取温湿度传感器、接摄像头跑视觉程序。它性能强能并行处理复杂逻辑但它最致命的短板是实时性不够稳定。因为Linux系统内核调度有不确定性关键信号可能延迟几毫秒甚至几十毫秒这在电机控制、高速脉冲采样场景下就是硬伤。另外树莓派的GPIO是3.3V电平直接驱动12V的电机驱动板也需要额外的电平转换逻辑并不像很多人想的那样插上就能用。所以在我的无人机悬停、智能小车这类项目里最靠谱的架构是树莓派做上位机负责视觉识别、路径规划、人机交互Arduino或ESP32做下位机负责舵机、电机的实时控制。两者通过USB串口或Wi-Fi通信。这就是目前业内常说的主从式架构也是我最推荐初学者优先学习和复刻的组合。关于硬件选型再补充两个实操经验。第一如果你只做简单教学实验比如点个灯、读个按键几十块钱的Arduino Nano就够用别一上来就买一堆昂贵的外设套件。第二如果考虑以后做具身智能小车这种项目树莓派建议直接选4GB内存以上的版本我实测树莓派4B 2GB版跑轻量级目标检测模型时内存几乎打满8GB版会从容很多后面加一个UPS电源扩展板可以实现断电保护避免SD卡文件系统损坏。2. 环境搭建与开发准备Python控制硬件环境搭建这一步决定了你后面是顺风顺水还是处处踩雷。我见过太多人卡在第一步不是串口驱动装不上就是Python库版本冲突。这里把两套环境分开讲清楚。2.1 Python 开发环境别再用系统自带Python不管你用Windows、macOS还是Linux都建议优先安装Python 3.10以上版本。原因有两个一是很多新的硬件库已经停止支持旧版Python二是虚拟环境功能在3.10以后更稳定。在Windows上去Python官网下载安装包安装时一定勾选Add Python to PATH否则命令行里敲python会提示找不到命令。macOS用户强烈建议用Homebrew安装别直接用系统自带的Python因为那是Apple系统工具依赖的旧版本乱动会有系统权限风险。Linux用户包括树莓派一般自带Python 3但版本可能偏旧建议用源码编译或官方仓库源更新。装好后第一件事是创建一个虚拟环境把硬件开发依赖隔离起来# Windows/macOS/Linux 通用 python -m venv hardware_env # Windows激活 hardware_env\Scripts\activate # macOS/Linux激活 source hardware_env/bin/activate然后安装核心依赖库。这里有一个很坑的点要提醒不要一次性用requirements.txt安装一堆库因为硬件库之间经常存在依赖冲突比如RPi.GPIO和gpiozero在某些版本会互相干扰。我的习惯是先装核心的跑通再按需补充pip install pyserial pip install pyfirmata pip install gpiozero pip install opencv-pythonVSCode是管理这套环境最顺手的IDE装上Python扩展后CtrlShiftP选择解释器指向刚才创建的虚拟环境后面写代码调试就都在同一个环境里不会出现命令行能跑、编辑器里Import报错的问题。2.2 Arduino 环境固件烧录与开发板管理Arduino这块有两个方向一是用Arduino IDE直接写C把固件烧录进去二是用Python库PyFirmata通过标准Firmata协议去控制。强烈建议初学者先走第一条路哪怕只是烧录一个空程序或Blink示例因为这一步能帮你确认串口驱动是否正常、板子是否识别。常见问题有两个在设备管理器里能看到Arduino对应串口但pySerial打开时报PermissionError。Linux下需要把当前用户加到dialout组sudo usermod -a -G dialout $USER然后重新登录。Arduino IDE下载板卡慢尤其是ESP32、ESP8266的板卡包。这通常是因为访问国外服务器解决办法是把开发板管理地址换成国内镜像源。具体配置方式各社区都有总结核心是修改偏好设置里的Additional Boards Manager URLs我用的是清华和阿里云的镜像地址实测下载速度能提升几十倍。另外提一下如果你手头暂时没有物理板子可以用Wokwi仿真平台在浏览器里跑Arduino代码它支持ESP32、ESP8266、Arduino Uno可以和真实板卡用同样的代码逻辑。在线仿真适合快速验证思路但很多硬件时序问题仿真模拟不出来比如舵机抖动、传感器噪声所以最终还是建议买块板子实测。2.3 树莓派系统准备从烧录到远程访问树莓派的系统安装现在官方Raspberry Pi Imager工具已经做得非常友好可以一键烧录系统到SD卡。有几个细节我每次都会强调第一烧录前在Imager里提前开启SSH、配置Wi-Fi、设置用户名密码。这样你不用接显示器和键盘插电后就能从电脑上用SSH远程登进去省掉一堆麻烦。第二树莓派到手后第一件事是改软件源。默认官方源在国外apt update慢得让人崩溃。把/etc/apt/sources.list和/etc/apt/sources.list.d/raspi.list里的源地址替换为国内镜像再执行sudo apt update sudo apt full-upgrade。第三VNC远程桌面是个高频坑。树莓派打不开VNC90%的原因是未在sudo raspi-config里启用VNC服务或者RealVNC Viewer连接时输入了错误的IP地址。正确方式是先确保树莓派和电脑在同一局域网然后通过hostname -I查看IP在VNC Viewer里输入IP:5900。如果还连不上检查一下防火墙或者重启VNC服务sudo systemctl restart vncserver-x11-serviced。树莓派的桌面环境还需要装一个顺手的中文输入法否则在浏览器里搜资料没法打中文运行sudo apt install fcitx5 fcitx5-chinese-addons装完重启即可。3. 用Python控制Arduino串口通信与硬件实操真正动手用Python控制Arduino核心就两个字——通信。Python把指令打包成数据通过串口发给ArduinoArduino解析后驱动硬件再把传感器数据回传。这一节我讲两种最主流的方案并给出可以直接抄的代码。3.1 方案一PySerial 自定义串口协议最硬核的通信PySerial是Python串口通信的工业级解决方案。用它开发开发板侧的结构是固定的在setup()里初始化串口在loop()里读取字符、解析指令、执行动作、回传结果。这里给出一个我实际项目中用到的精简版模板// Arduino 端代码 const int LED_PIN 13; String received ; bool commandReady false; void setup() { pinMode(LED_PIN, OUTPUT); Serial.begin(115200); // 波特率必须和Python端一致 } void loop() { while (Serial.available() 0) { char c Serial.read(); if (c \n) { commandReady true; break; } received c; } if (commandReady) { received.trim(); if (received.startsWith(LED_ON)) { digitalWrite(LED_PIN, HIGH); Serial.println(OK:LED_ON); } else if (received.startsWith(LED_OFF)) { digitalWrite(LED_PIN, LOW); Serial.println(OK:LED_OFF); } else if (received.startsWith(SERVO)) { // 解析 SERVO:角度 指令控制舵机 int angle received.substring(6).toInt(); // 舵机控制代码见下文 Serial.println(OK:SERVO: String(angle)); } else { Serial.println(ERROR:unknown command); } received ; commandReady false; } }Python端就简单多了import serial import time ser serial.Serial( port/dev/ttyUSB0, # Windows填COM3之类的串口号 baudrate115200, timeout0.5 ) def send_command(cmd: str) - str: ser.write((cmd \n).encode()) time.sleep(0.1) resp ser.readline().decode().strip() return resp print(send_command(LED_ON)) print(send_command(SERVO:90))这里有几个关键点都是踩过坑才明白的波特率必须两端一致。我用115200比较多因为9600在大数据量时容易阻塞。支持中文编码其实是个大坑Python那边如果用Windows控制台传中文编码会乱建议所有指令都设计成纯ASCII字符串。换行符\r\n vs \nWindows换行是\r\nLinux是\nArduino Serial.parse/read会把\r带进去导致比较失败。最好的办法是Python发\nArduino端在比较前统一trim。通信要有超时和重试机制因为USB串口偶尔会丢包尤其是用CH340转串口芯片时。我在项目里加了一个简单的重试逻辑发指令后1秒内没回OK就再发一次。3.2 方案二PyFirmata一条命令让硬件活起来如果你不想写任何C代码PyFirmata是另一个选择——先在Arduino里烧录一个StandardFirmata固件然后Python端直接用库控制引脚。我在舵机控制demo里常用这种方式快速验证import pyfirmata import time board pyfirmata.Arduino(/dev/ttyUSB0) # 舵机控制引脚假设在第9脚 servo board.get_pin(d:9:s) # ddigital, 9pin, sservo servo.write(90) # 旋转到90度 time.sleep(1) servo.write(0) # 回到0度PyFirmata的最大优势是上手极快适合做教学、快速原型。但它的致命缺点是实时性差——Firmata协议通过字节码逐条解释执行控制多个PWM引脚时CPU占用率和延迟都明显。我的建议是想快速验证硬件能不能用选PyFirmata做正式项目、要稳定精准控制一定选PySerial自定义协议。3.3 舵机控制的实用细节热搜词里频繁出现Arduino控制舵机说明这是入门必做实验。舵机SG90这类的核心是50Hz、0.5ms~2.5ms的PWM脉冲控制。用Arduino内置的Servo库最省心它会自动生成PWM信号不需要自己算timing。但有个很现实的坑Arduino Uno的Servo库和analogWrite引脚有冲突如果第9、10脚用了Servo再在那些引脚上执行analogWrite()会导致信号错乱。所以布局时务必把舵机和LED/电机分开引脚。树莓派Pico控制舵机是另一个方向。Pico的MicroPython环境中用machine.PWM()生成PWM信号需要手动设置频率和占空比逻辑更底层的但可配置性更强。我做机械臂时就是用Pico做多路舵机舵控板因为Pico的PWM通道多、价格便宜20多个舵机也不卡顿。3.4 定时器与数码管给Arduino加时间观念在入手自动化项目之后你会发现定时器和数码管是绕不开的。Arduino的delay()是最简单的延时但它是阻塞式的——延时期间CPU干不了任何其他事这在实际项目中非常致命。用millis()做非阻塞定时是必备技能const unsigned long interval 500; unsigned long previousMillis 0; void loop() { unsigned long currentMillis millis(); if (currentMillis - previousMillis interval) { previousMillis currentMillis; // 每500ms执行一次 } // 其他任务照常执行 }基于这个原理我做过一个Arduino数码管计时器。4位数码管用TM1637驱动芯片只需两根数据线和一根电源线库文件也简单。如果直接驱动7段数码管要搞清楚共阴还是共阳每个段码需要加限流电阻否则数码管亮度不均甚至烧毁。我记得第一次用1k电阻做共阳数码管全亮时发现亮度明显不足换成220Ω才正常这个细节值得新手注意。3.5 Arduino与ESP32从有线到无线如果你的项目需要把传感器数据传到远程服务器或者通过手机App控制可以考虑用ESP32代替Arduino作为下位机。ESP32自带Wi-Fi和蓝牙还支持Micro-ROS。Micro-ROS是ROS 2在微控制器上的实现它让ESP32可以以极轻量的方式接入ROS 2环境跟树莓派上的ROS 2节点直接通信。我去年用Micro-ROS搭过一个ESP32小车底盘树莓派订阅摄像头数据计算出转向指令后发布到ROS 2话题ESP32订阅话题解析后驱动电机整个链路延时在20ms以内实时性勉强够用。但是要警示一下ESP32的Arduino开发环境搭建要下载大量板卡包国内网络慢是常态。我建议用Arduino IDE 2.x版本把板卡管理地址换成可用的国内镜像后再安装或者去乐鑫官网下载离线包这能为你节省大量时间。4. 用Python直接操作树莓派GPIO与摄像头树莓派上的Python操作GPIO最主流的三个库是RPi.GPIO、gpiozero和pigpio。RPi.GPIO是最老牌的几乎任何教程都会提但它已经多年没更新树莓派5上无法正常工作官方建议用gpiozero替代。gpiozero是树莓派官方推荐的库语法更简洁还内置了设备抽象——一个LED对象就是LED(17)一个按钮就是Button(2)。pigpio则是通过守护进程提供PWM和中断回调精度最高适合需要软PWM的场景。LED点灯实验是树莓派GPIO的Hello World。在树莓派5上用gpiozero的写法是from gpiozero import LED from time import sleep led LED(17) # 物理引脚11, GPIO17 while True: led.on() sleep(1) led.off() sleep(1)这里要注意一个常见坑gpiozero的引脚编号默认是BCM编号不是物理引脚编号。如果你按照网上教程把线插到物理第11脚代码里写的却是LED(17)那其实是GPIO17刚好对应物理第11脚没问题。但如果你用的是树莓派40pin排针的其它位置务必对照引脚图确认。我写过一个函数从物理引脚号转BCM编号但多数情况下直接查官方引脚图更直观。读取传感器数据是GPIO的另一大类应用。比如DHT11温湿度传感器它有单总线协议时序敏感Python库可能不稳定。我建议用DHT22更精确加一个合适的库或者改用I2C接口的传感器比如BMP280、AHT20因为它们有官方驱动库数据准确度更高也少了很多微妙的信号问题。4.1 树莓派摄像头OV5647实战热词里的树莓派OV5647摄像头模块就是市面上最常见的500万像素Raspberry Pi Camera Module。在树莓派上用它有两种方式旧版raspistill/raspivid工具树莓派5已经取消只能用libcamera新版推荐用libcamera工具链和picamera2Python库。这里只讲新版方法# 启用摄像头然后重启 sudo raspi-config # 测试 libcamera-helloPython拍照from picamera2 import Picamera2 import time picam2 Picamera2() camera_config picam2.create_still_configuration(main{size: (3280, 2464)}) picam2.configure(camera_config) picam2.start() time.sleep(2) # 给摄像头预曝光时间 picam2.capture_file(test.jpg) picam2.stop()这个过程我踩过一个大坑装好pycamera2后一运行就提示找不到picamera2模块。排查到最后发现是系统Python路径问题——系统里同时存在系统自带Python和通过apt安装的Python包被装到了另一个环境。解决办法很简单始终用虚拟环境并且在虚拟环境里先pip install picamera2确认成功后再跑程序。4.2 树莓派5供电与稳定性UPS电源扩展板树莓派5的功耗比前代明显提高官方建议用5V 5A的电源否则电压跌落会导致外设识别异常和数据损坏。我买了一块5V 6A输出的UPS扩展板它除了提供稳定电源还能在断电时自动切换到电池供电给你足够时间安全关机防止SD卡文件系统损坏。这在野外巡检小车、无人机地面站这类场景里是救命功能。4.3 如何让树莓派管理更多设备树莓派作为上位机需要跟Arduino、ESP32、传感器等一堆下位机连接。我的做法是把所有USB设备在/etc/udev/rules.d/里设置固定别名比如/dev/arduino_uno、/dev/esp32_ros避免每次重启后设备节点名称随机变化导致Python代码里串口端口不稳定。这个配置在多人协作或长期运行的项目里特别重要。4.4 Python量化交易与树莓派一个有趣的偏门用法虽然这条和硬件不直接相关但搜索python量化交易策略代码的一大群人其实有很大比例会把策略跑在树莓派上——因为树莓派功耗低、可以7x24小时运行适合做沪深股市收盘后的复盘计算或者跑一些低频的定时交易信号。我在树莓派4B上跑过一个简单的双均线策略回测代码逻辑完全一样就是数据量大的时候内存吃紧。如果你只是做每日收盘后的一小时计算2GB内存版的树莓派够用但如果要跑分钟级的数据抓取和实时计算还是建议用4GB以上版本避免频繁swap拖慢速度。5. 协同实战一架人狗大作战级别的智能小车说了这么多基础内容现在串一个完整的综合项目来演示Python控制Arduino或树莓派到底能做什么以及这套组合拳怎么打。我选了智能小车这个题目因为它的核心需求覆盖了舵机、电机、摄像头、串口通信、异步调度几乎把前面所有知识点都串起来了。5.1 系统架构设计我的小车整体分三层感知层树莓派 OV5647摄像头负责采集画面并跑一个轻量级的目标检测模型识别特定颜色物体比如红色小球。决策层树莓派上的Python程序根据识别结果计算目标中心与视野中心的偏移量通过一个简单的PID控制器算出转向角度和速度值然后生成控制指令发给下位机。执行层Arduino舵控板接收指令控制两个直流电机通过L298N驱动板和一个小舵机控制摄像头云台角度。如果选ESP32则可以通过Wi-Fi订阅ROS 2话题省掉USB串口线的束缚。指令协议我用的是前面讲的PySerial自定义串口协议格式类似MOVE:100:30速度100、转向角30以及SERVO:90云台转到90度。每帧指令以换行符结尾小于50字节串口115200波特率下传输时间不到5ms完全满足20Hz控制频率的需求。5.2 Python端多线程处理这里有一个特别重要的程序设计经验Python端不要在主循环里边处理摄像头帧边发串口指令否则摄像头帧率下降、串口发送堵塞整个系统会卡死。正确做法是拆成多个线程import threading import queue import serial cmd_queue queue.Queue(maxsize10) def camera_thread(): # 摄像头采集、目标识别 # 计算出转向角后构造指令加入 cmd_queue cmd_queue.put(MOVE:100:30) def serial_thread(): # 从 cmd_queue 取指令通过串口发送 while True: cmd cmd_queue.get() ser.write((cmd \n).encode())摄像头线程和串口线程之间用queue解耦这样即便摄像头某一帧处理超时串口线程也能继续发送上一帧的指令小车不会突然失控。实际运行时我还会给指令加时间戳超过200ms的旧指令直接丢弃保证控制时效。5.3 把识别和控制跑通目标检测具体怎么跑我用的方案是在树莓派上装好OpenCV利用颜色阈值提取目标轮廓HSV颜色空间计算轮廓中心坐标然后和图像中心做偏差。这个方法的识别稳定性尚可但光照变化会有影响。如果想更稳可以考虑训练一个YOLOv5-lite模型8GB版树莓派实测能跑10帧左右勉强达到控制需求。整体调通之后小车能追着目标球走。但真正把PID参数调好花了整整一下午。比例项太大会抖动积分项太大会超调。我的经验是Kp先设0.3Ki设0.01Kd设0.1按照实际抖动情况微调这个方向基本错不了。从识别出目标到小车平滑跟上这中间其实隔着一个PID调参的坎。5.4 从能跑到具身智能如果你想把小车升级成具身智能设备方向就不只是追踪小球了。可以在树莓派上接入语音识别模块或者接入大模型API让车听懂语音指令。当下比较主流的方向是用树莓派跑LLM推理或连云端大模型将自然语言指令解析成具体的运动指令序列再下发给Arduino或ESP32执行。像前进两秒然后左转这种指令现在可以用比较简单的prompt工程实现。但是有一点必须说清楚把大模型塞进树莓派这件事对内存和算力要求很高8GB内存版树莓派也只能跑极小体量的模型更多场景还是选择把推理放到云端树莓派只做端侧采集和执行转发这样整体延迟和成本才可控。6. 常见问题与排查技巧实录硬件调试最耗时的不是在写代码而是排查那些看起来玄学的问题。我把这几年遇到的高频问题整理成一个速查表希望能帮你省下大量时间。常见现象可能原因解决思路Python报serial.serialutil.SerialException: PermissionError当前用户没有串口访问权限Linux把用户加入dialout组Windows检查驱动是否正确串口能打开但发指令没反应波特率不一致或Arduino没上电/没复位核对两端波特率一致按一下Arduino复位键检查串口监视器是否显示OK舵机抖动或位置不准电源电流不够或PWM源不稳定舵机独立供电与主控共地即可树莓派3.3V引脚不能直接驱动大舵机树莓派绿灯一直闪、系统无法启动SD卡启动镜像损坏或供电不足重新烧录系统检查电源树莓派5需要5V 5A通电时不要热拔SD卡VNC连接树莓派黑屏分辨率分辨率不兼容或VNC服务未启动在/etc/xdg/autostart中设置分辨率重启VNC服务Python运行sudo时找不到包系统Python和虚拟环境Python混淆用which python查位置务必激活虚拟环境后再装包GPIO控制LED没反应引脚号用错或GPIO复用冲突对照官方引脚图用pinout命令查看当前管脚状态摄像头画面严重偏色/过暗未配置白平衡或曝光时间用libcamera-still -o test.jpg测试必要时手动设置AWB模式Arduino IDE下载板卡包很慢国外服务器连接不畅更换国内镜像源或离线安装包有条件多留备份串口发送中文乱码Python字符串编码问题简化协议为纯ASCII发送前encode(ascii)Arduino端trim树莓派GPIO控制时PWM输出不稳定使用RPi.GPIO软PWM导致jitter改用gpiozero或pigpio的硬件PWM或接PWM驱动板除了这个表再写几个具体场景的排查过程。6.1 树莓派打不开VNC的完整排查我遇到过最闹心的情况是VNC Viewer能连到树莓派但画面一直卡在登录界面点进去黑屏。排查了很久最后发现是系统升级后RealVNC服务和桌面会话冲突。解决方式先确认VNC服务在运行——sudo systemctl status vncserver-x11-serviced如果没运行就sudo systemctl start vncserver-x11-serviced。然后sudo raspi-config- Interface Options - VNC 确认使能。还不行就改一下VNC虚拟桌面分辨率在VNC Server配置里把分辨率改成1280x720固定值一般能正常出画面。6.2 树莓派中文输入法装不上的问题在树莓派上装中文输入法如果你只apt install fcitx不装fcitx-chinese-addons系统菜单里根本找不到拼音输入方案。另外装完以后还必须在系统设置里Input Method切换激活否则打字时还是英文。这两个步骤都做完后重启桌面环境才生效。6.3 Arduino IDE占用C盘空间问题很多人在电脑上安装Arduino IDE时会发现C盘空间骤降。原因是板卡编译缓存、库文件、下载的板卡包默认全往用户目录里塞尤其是ESP32全家桶安装后可能占几个GB。解决方式在Arduino IDE偏好设置里把Sketchbook location和暂存目录都指到D盘或其它非系统盘另外定期清理%LOCALAPPDATA%/Arduino15下的旧包。有条件的话用Arduino CLI命令行工具管理更灵活也更省空间。6.4 树莓派Pico控制舵机的坑Pico控制舵机比Arduino多一个坑Pico的PWM频率默认是1kHz但舵机期望50Hz所以必须手动设置PWM.freq(50)。很多人直接用占空比就说舵机没反应其实就是频率设置错。还有一个坑是Pico的GPIO输出电压是3.3V但很多舵机的控制信号兼容性还不错可以直接驱动但供电一定要足够。如果是9g小舵机用Pico的5V输出勉强能转接到大舵机比如MG995必须先外接5V~6V电源否则Pico会被拉死直接重启。6.5 树莓派3B上跑Windows的伪需求你可能也搜到过树莓派3B Win10其实这是可以在树莓派上安装Windows IoT Core但那个系统并不是完整桌面Windows能跑的应用极其有限。如果你指望用树莓派3B当一台Windows电脑用那基本是不现实的。树莓派日常使用建议还是装Linux系统执行Python脚本、跑服务器、挂PT、做网络监控这才是它的正确打开方式。6.6 树莓派上运行HMCL我的世界启动器这个也经常被搜索到。HMCL是Hello Minecraft! Launcher可以在树莓派上跑Minecraft Java版但树莓派的CPU性能摆在那里帧率很低属于能开、能玩但卡顿明显的状态。更多时候大家是在树莓派上开一个Minecraft服务器而不是客户端。服务器性能反而更好带几个朋友玩没问题。7. 让Python控制硬件这条路走得更远最后分享一些比较个人化的体会。我用Python控制Arduino和树莓派这几年最深的感受是不要过度纠结用哪个板子或用哪个语言。Arduino和树莓派本质上都是工具真正的核心是你手里有哪些传感器你要解决什么问题。Python的巨大价值在于它能把从单片机交互到算法处理到云端服务整条链路都串起来你不需要在C、汇编、JavaScript之间来回切换有一种用一套语言搞定所有事的痛快感。如果你刚入门我的建议是先买一个Arduino Uno或ESP32跑通串口通信再搞一块树莓派点亮一个LED、拍一张照片。然后做个小项目比如做一个智能温室控制器树莓派上跑Python数据分析Arduino控制温湿度传感器和浇水泵。等这个项目完整跑通你对Python控制硬件这件事的整个地图也就清晰了。再顺手分享最后一个小技巧一定要养成写串口协议文档的习惯。哪怕只是自己开发的小项目把指令格式、波特率、引脚定义都记录下来否则过了三个月回看代码你会对着自己当初写的十六进制数据一脸懵。在我自己的项目里这些文档常常比代码更有价值。动手去做把手里那块板子当成玩具这个领域没有太多玄学踩过坑、看过日志、修好bug之后它会变成你最顺手的一件工具。
返回列表