零基础学ESP32:手机蓝牙控制舵机实战
说实话很多玩单片机的人第一次真正觉得“有点东西”的时刻不是点亮LED而是让手机离开发板半米远按一下按钮舵机就听话地转到指定角度。项目标题“零基础学ESP32蓝牙控制舵机——手机一点舵机就转”说的就是这么件事手机通过蓝牙发一个角度值ESP32收到后控制舵机转到对应位置。听起来简单但它背后牵扯到蓝牙协议怎么选、PWM脉宽怎么算、舵机供电怎么设计、数据格式怎么约定全是后面做小车、机械臂、智能家居都要用的底层逻辑。这个项目最适合两类人一是刚接触ESP32、想找个“完整链路”练手的初学者二是已经玩过Arduino UNO、但没试过无线控制的爱好者。你会学到的不只是“怎么让舵机动”而是“手机和单片机之间怎么对话”。整个过程不需要任何基础硬件成本几十块钱一个下午就能跑通。我下面按我实际踩坑的顺序把从硬件选型、接线、环境配置、代码到联调的每个环节都拆开讲一遍。1. 项目思路拆解三件事怎么串成一条线1.1 为什么选ESP32一颗芯片干掉“无线”和“控制”两件事如果你之前用的是Arduino UNO那你应该深有体会想让它无线上网或蓝牙通信得外挂一块HC-05蓝牙模块或者ESP8266 WiFi模块模块本身不贵但接线麻烦、供电容易出问题而且两块芯片之间还要通过串口UART传数据等于多了一层调试负担。ESP32不一样它是乐鑫Espressif出品的一颗双核芯片片上直接集成了2.4GHz WiFi和蓝牙经典蓝牙BLE双模你不用再插任何无线模块直接在代码里调用蓝牙功能就行。这玩意儿多少钱国产开发板十几块到三十几块比“UNOHC-05”的组合还便宜性能却强很多——主频240MHz、520KB SRAM、几十个GPIO后续不管是加传感器、加摄像头还是同时开WiFi和蓝牙都还有富余。这个项目的控制链路是手机App ——蓝牙无线传输—— ESP32 ——PWM信号—— 舵机。手机负责发指令ESP32负责解释和执行舵机负责出力。整条链路里ESP32是“大脑”蓝牙是“耳朵”舵机是“手”。选它做这个项目等于一次把“无线通信电机控制”两个重要方向同时入门了。我见过不少新手一上来就纠结要不要加一个HC-05蓝牙模块答案是不需要。ESP32自带的经典蓝牙SPP可以直接当串口用这省掉了外接模块的接线也让你在写代码时不必处理两片芯片之间的通信协议专心理解“发数据、收数据、转角度”这一条主线。1.2 蓝牙选经典还是BLE零基础别纠结先跑通再说ESP32的蓝牙有两种模式很多人第一次接触就被这个绕晕了一种是经典蓝牙Bluetooth Classic也就是你蓝牙耳机、蓝牙音箱用的那种另一种是低功耗蓝牙BLE常见于手环、ibeacon信标、现在的智能家居传感器。这个项目选哪种我的建议非常明确选经典蓝牙而且是经典蓝牙里的SPP协议Serial Port Profile串口透传。SPP协议做的事情是把蓝牙通道“伪装”成一个串口——手机那边发出来的字节流ESP32这边就像从串口收到的数据一样直接读ESP32想回复手机也就像往串口写数据一样直接写。这种“透传”特性让调试过程极其直观你在手机上输入“90”代码里读到的就是字符串“90”没有GATT服务、没有特征值、没有MTU那一堆概念。BLE能不能做这个项目能做但真的很不推荐零基础上手。BLE通过GATT通用属性协议暴露Service和Characteristic手机端要扫描、连接、订阅、读/写特征值任何一个环节理解不到位你都会卡在“手机连上了但收不到数据”这种问题上。而SPP调通之后你甚至可以把ESP32当成一块“无线串口板”以后玩GPS模块、图传、调试其他单片机都能直接复用这套逻辑。这背后的原理不复杂SPP在经典蓝牙协议栈里跑底层其实走的是RFCOMM简单说就是“在蓝牙链路上模拟串口”就像你用网线做虚拟串口一样。你不需要懂RFCOMM细节只要记住——手机连上ESP32之后两边就像用一根看不见的串口线连在一起。对新手来说能把数据发过来、收回去比什么技术选型的大道理都重要。1.3 舵机控制原理不是让电机转而是让电机“停”在指定角度舵机Servo这个“电机”和普通直流电机最大的区别在于它不是靠“通没通电”来判断转不转而是靠一个精确的脉冲宽度来决定停在哪个角度。标准舵机的控制信号是PWM波周期固定为20ms也就是50Hz其中高电平脉宽在0.5ms到2.5ms之间。脉宽和角度对应关系大致是这样脉宽舵机角度0.5ms0°1.0ms45°1.5ms90°中位2.0ms135°2.5ms180°这个关系很好理解你给舵机一个“目标脉宽”舵机内部的控制电路会去比较这个目标脉宽和它输出轴上电位器反馈回来的当前脉宽两者不一致就驱动电机转一致就停住。换句话说你给的不是“力度”而是“目标位置”剩下的交给舵机自己闭环完成。把舵机比作水龙头可能不太准我更愿意拿“停车场抬杆”来类比你不需要指挥电机怎么转只需要告诉它“抬到45度”还是“抬到90度”它自己会纠正。这解释了一个很重要的现象为什么舵机在堵住时还在嗡嗡发力因为它发现“目标位置”没达到还在拼命修改误差。明白这个原理你就知道代码里servo.write(90)这行背后的意义了——它不是简单“给90度电压”而是让Servo库自动生成一个脉宽约1.5ms、频率50Hz的PWM信号。Arduino的Servo库把这些细节全部封装好了但在后面的接线和供电环节你仍然需要知道舵机内部有电机和齿轮因为它要吃掉不小的电流。2. 硬件准备与接线先把每一根线搞明白2.1 物料清单其实只要五样东西这个项目的硬件成本很低我建议按照下面的清单准备不要贪多物料推荐型号/规格参考价说明主控板ESP32 DevKit V138pin15-30元新手选带USB口的开发板最容易烧录舵机SG90 9g 舵机5-10元最经典的入门舵机扭矩1.8kg·cm级别电源5V/2A USB电源或4节AA电池盒10-20元舵机单独供电用稍后细讲杜邦线公对公至少3根3-6元建议多准备几种颜色方便区分面包板400孔或800孔5-10元方便插线和共地强烈建议严格来说如果你只是临时测试用USB线给开发板供电再单独给舵机供一路5V是最省事的组合。但要注意所谓“单独供电”不是说插两个充电宝就行而是电源之间的地线必须连在一起否则信号电压没有基准舵机轻则乱动重则完全不动。这个共地的问题是后面排查的大部分故障根源。选SG90舵机时注意别买到劣质仿品。正品SG90通常是三根线颜色一般为棕色GND、红色VCC、橙色/黄色信号线。有些杂牌舵机线序不一样买回来第一步用万用表蜂鸣档测一下红色线对应的引脚和另外两脚之间不应该是短路状态。如果你没有万用表至少记住“先接GND再接VCC”接反了容易烧舵机控制板。2.2 供电设计新手翻车率最高的环节我可以负责任地告诉你这个项目十个失败案例里至少一半是供电问题。SG90这样的小舵机正常转动时电流大概在100mA到300mA之间堵转时电流能冲到500mA甚至更高。而ESP32 DevKit板子本身开启蓝牙/串口后平均电流也要100mA以上WiFi开启瞬间峰值甚至能到500mA。关键问题来了很多USB口的最大输出就是500mA如果你图省事把舵机直接接在ESP32开发板的5V引脚上再用USB口一起供电那么舵机一转总需求轻松超过USB口的供能能力电压开始跌落ESP32看到电压不稳直接复位重启。表现是什么舵机刚动了一下开发板重启蓝牙断开然后你以为是程序的问题开始疯狂改代码——实际上线重新接一下就能解决。正确方案是ESP32开发板用USB口供电调试烧录顺手舵机单独用一路5V电源可以是电池盒、老手机充电器改装模块或者一个5V/2A的AD-DC降压模块然后把两路电源的负极GND连在一起。这样舵机的大电流不流经开发板开发板只负责提供控制信号稳定得一匹。如果你手头工具齐全还可以在舵机电源正负极之间并联一个470uF到1000uF的电解电容这个电容的作用是“蓄水池”当舵机瞬间要大量电流时电容先顶上缓冲电压跌落。虽然接线多加了一个元件但对消除舵机抖动有明显帮助我在后面章节还会提到。2.3 接线实操三根线一根都不能错整个项目的接线图其实就一条舵机三根线分别接ESP32的两个电源引脚和一个GPIO引脚。SG90线序以最常见的橙色/红色/棕色为例舵机线颜色接ESP32哪个位置信号线橙/黄GPIO13电源线红5V或外部5V地线棕GND与外部电源共地GPIO引脚选哪个我习惯选13原因有几个GPIO13在ESP32 DevKit上引出方便不容易和板载LED、启动引脚冲突。要避开GPIO0BOOT引脚会影响下载模式、GPIO2板载LED相关、GPIO12JTAG相关上拉会影响启动。虽然你用ESP32Servo库配置任意引脚都能工作但选13这种“安静”的引脚能少踩很多莫名其妙的上电异常坑。具体接线流程我一般这样走先把舵机信号线插到面包板再连一根杜邦线到ESP32的GPIO13然后舵机红线接电源正极如果你用外部电源这里接外部5V正极棕线接电源负极——注意这里的“电源负极”必须同时连到ESP32的GND你可以用一块面包板做汇接点把舵机负极、外部电源负极、ESP32的GND三根线插在同一排。先接地线再接正极是防止带电插拔时短路的习惯动作。接完线建议再用万用表通断档量一下舵机电源两端有没有短路GPIO13和GND之间是不是有误接。我见过不止一例看起来接对了实际杜邦线松了插在面包板相邻孔导致短路。五秒钟的检查能省掉半小时排查。3. 开发环境搭建与代码实现3.1 一步装好ESP32开发板包用一条URL解决写代码之前先把Arduino IDE装好。我用的是Arduino IDE 2.x版本界面比1.x清爽很多库管理也更好用。打开后先做一件最重要的事让Arduino IDE认识ESP32这块板子。菜单“文件 - 首选项 - 附加开发板管理器网址”英文版叫Additional Boards Manager URLs粘贴下面这条地址https://espressif.github.io/arduino-esp32/package_esp32_index.json如果你下载速度很慢可以换成国内社区维护的镜像加速地址效果是下载开发板支持包时不再动不动卡住。这是ESP32入门最常见的网络坑提前解决掉后面就是一路顺畅。然后在左侧“开发板管理器”搜索esp32找到“esp32 by Espressif Systems”点击安装。这个包大概几百MB包含所有ESP32系列芯片的编译工具链和底层库装一次就行。装完之后在“工具 - 开发板”菜单里选择“ESP32 Dev Module”如果你的板子是DevKit V1这种标准38pin板端口选择你的USB转串口设备。Windows上一般是COM3或COMxmacOS/Linux上是/dev/cu.usbserial-xxxx。另外舵机控制要用ESP32Servo库。注意Arduino标准库里的“Servo”库不能直接在ESP32上用因为ESP32的定时器和AVR不同直接用会编译报错或角度乱跳。在Arduino IDE的“库管理器”里搜索ESP32Servo认准作者是Jaroslav Páral或“ESP32Servo by Kevin Harrington etc.”安装最新版即可。3.2 舵机控制代码逐段拆解直接上代码前我先把结构讲清楚。整个程序分三块蓝牙初始化、舵机初始化、数据处理循环。下面这段是直接可用的#include BluetoothSerial.h #include ESP32Servo.h BluetoothSerial SerialBT; // 创建一个蓝牙串口对象 Servo myServo; // 创建一个舵机对象 void setup() { Serial.begin(115200); // 板载USB串口用于电脑端调试 myServo.attach(13, 500, 2400); // GPIO13脉宽500us到2400us myServo.write(0); // 初始化角度0度 if (!SerialBT.begin(ESP32_Servo)) { // 蓝牙广播名称 Serial.println(蓝牙初始化失败请检查蓝牙配置); } else { Serial.println(蓝牙已就绪设备名ESP32_Servo); } } void loop() { if (SerialBT.available()) { // 手机发来数据了吗 String cmd SerialBT.readString(); // 读全部数据 cmd.trim(); // 去掉换行/空格 int angle cmd.toInt(); // 字符串转整数 if (angle 0 angle 180) { // 角度范围校验 myServo.write(angle); SerialBT.println(OK: String(angle)); // 回执 Serial.println(收到角度: String(angle)); } else { SerialBT.println(ERROR: 角度需在0-180之间); } } delay(20); }逐个说重点myServo.attach(13, 500, 2400)这一行第一个参数是信号引脚后面两个参数是脉宽上下限单位微秒。默认的0到180度通常对应500到2400微秒这符合大多数SG90舵机的规格。如果你发现舵机到不了0度或180度或者在中位发抖可以微调这两个值这是舵机校准的标准操作。SerialBT.begin(ESP32_Servo)是整个项目的灵魂它启动经典蓝牙的SPP服务并把设备名命名为ESP32_Servo。手机扫描到的就是这个名字。注意返回值检查我在这里用if(!SerialBT.begin(...))判断如果失败会在电脑串口打印提示避免你对着一个没启动的蓝牙闪设备名干瞪眼。SerialBT.readString()读取的是手机发来的完整字符串然后用cmd.toInt()把它转成数字。这么做比单个字符方式灵活比如手机发“37”程序就能知道要转到37度不是只能发0-9。delay(20)是防止循环过快占用CPU20毫秒对舵机控制完全够用。另一个需要说明的是为什么我还用了Serial并在电脑串口打印信息这是双通道调试。ESP32的USB串口和蓝牙串口是独立的我在电脑串口监视器里看到“收到角度: 90”同时手机上也收到“OK:90”两边一对照就知道数据在哪一段丢了。这个习惯建议所有初学者都保留。3.3 完整代码可以直接抄作业上面那版代码功能已经完整但我平时给别人演示时还会加两个小“体验升级”一是让舵机平滑转动而不是猛跳二是增加一个“帮助指令”避免你忘记格式时必须翻文章。#include BluetoothSerial.h #include ESP32Servo.h BluetoothSerial SerialBT; Servo myServo; String inputBuffer ; void setup() { Serial.begin(115200); myServo.attach(13, 500, 2400); myServo.write(0); if (!SerialBT.begin(ESP32_Servo)) { Serial.println(蓝牙初始化失败); } else { Serial.println(蓝牙已就绪); } } void smoothMove(int target, int stepDelay) { int current myServo.read(); // 获取当前角度 while (current ! target) { if (current target) current; else current--; myServo.write(current); delay(stepDelay); // 每走一步停一下转得平滑 } } void loop() { if (SerialBT.available()) { String cmd SerialBT.readStringUntil(\n); cmd.trim(); if (cmd help || cmd ?) { SerialBT.println(请输入0-180之间的数字例如90); } else { int angle cmd.toInt(); if (angle 0 angle 180) { smoothMove(angle, 15); // 每秒约转60度 SerialBT.println(OK: String(angle)); Serial.println(角度已到: String(angle)); } else { SerialBT.println(ERROR: 输入角度超出范围(0-180)); } } } }readStringUntil(\n)配合手机端“发送新行”选项使用效果最好手机发出的指令以换行符结尾程序读到换行就知道一条指令结束响应速度比readString快也不会因为超时被卡住。如果你用的手机App不知道为什么死活不带换行程序可能会等默认1秒超时才执行——看起来就是“发送没反应过一秒才动”这时候去App设置里勾选“append newline”就好。烧录方式就是点IDE左上角箭头。ESP32 DevKit普遍带自动下载电路正常点击“上传”就能进入下载模式。如果提示“Failed to connect to ESP32: Timed out”按住板子上的BOOT键再点上传等到出现“Connecting…”提示时松开BOOT键基本就能解决问题。4. 手机App连接与整机联调4.1 手机端工具怎么选Android与iPhone差别很大手机端需要一个“蓝牙串口终端”类App作用是把你的手机变成一个虚拟串口终端能在蓝牙通道上自由收发字符。Android平台选择很多我常用的是“Serial Bluetooth Terminal”界面简单支持设置发送新行newline、支持自定义快捷指令按钮非常适合调试。你把它装好后不需要写任何App代码就能完成这个项目的第一阶段。iPhone这边要稍微注意iOS对经典蓝牙SPP支持不如Android开放不少传统蓝牙串口App装好后连不上设备。如果你手边只有iPhone有几个选择一是搜索支持“SPP”或“RFCOMM”的蓝牙串口工具二是改用BLE方案的代码逻辑ESP32侧改成BLE UART服务三是干脆找一个Android旧手机或平板来调试。我一般推荐入门阶段先借Android设备把整条链路跑通之后再回来看BLE也不迟。4.2 配对与连接注意两个细节手机和ESP32连接很多人会卡在这一步原因可能非常小。首先打开手机蓝牙设置扫描设备你应该能看到一个名为ESP32_Servo的设备。点击配对如果弹窗让你输入PIN码一般输入1234或0000ESP32默认是这样。极少数手机可能会问“是否配对”确认就行。第二个细节配对成功不等于“App连接成功”。你要打开Serial Bluetooth Terminal在App里选择这个设备点击连接。连接成功后App界面上会变成“Connected”状态。如果你只在手机系统蓝牙设置里配对了没在App里连接程序里SerialBT.available()永远是false发任何指令都没反应。还有个新手容易踩的坑手机和ESP32的距离别太远经典蓝牙虽然标称10米但隔着一堵墙、又夹着USB线供电稳定性会下降。我调试时习惯把手机放在离板子50厘米以内先把链路跑通再慢慢拉远距离测。4.3 联调流程从串口监视器到手机发指令我强烈建议分三步联调每一步都能明确判断故障在哪一段第一步连USB线打开Arduino IDE的串口监视器波特率设115200。上电后你应该看到“蓝牙已就绪设备名ESP32_Servo”。如果这一条没打印出来问题在代码或开发板先别去折腾手机。第二步串口监视器正常后打开手机蓝牙设置配对ESP32_Servo再用Serial Bluetooth Terminal连接。连接成功后你可以在App里发送一条测试指令。我先不发数字先发一个help看手机是否收到“请输入0-180之间的数字例如90”的回复。收到说明双向通信没问题收不到检查App连接状态和PIN码。第三步发送90回车换行。此时舵机应该平滑转到90度手机App收到OK:90。再发0和180确认极限角度正常。三步都通过这个项目就彻底跑通了。顺手调试时还可以注意一个现象ESP32的蓝牙和板载USB串口互不干扰你在发送舵机指令的同时Arduino IDE里能看到“角度已到: 90”这就是双通道同时验证非常直观。5. 常见问题、避坑与进阶方向5.1 手机搜不到ESP32或连不上这是出现频率最高的一类问题。排查顺序跟着我走现象可能原因解决办法手机扫描不到设备蓝牙没启动成功串口监视器看是否打印“蓝牙已就绪”检查代码中begin名字扫描到了但配对失败PIN码不对试1234或0000或删除已配对记录重新配对配对成功但App连不上只在系统里配对没在App点击连接在Serial Bluetooth Terminal里重新选择设备并连接连接后发送无反应指令没带换行符在App设置里勾选append newline或把代码里readStringUntil改成readString距离一远就断线供电不足或干扰缩短距离给舵机独立供电检查USB线质量另外有一个隐藏点如果之前手机配对过一次ESP32断电重启后部分手机可能出现配对记录失效。处理方法很简单在手机蓝牙设置里“取消配对”重新走一遍配对流程即可。ESP32经典的SPP服务每次上电都会重新广播不像有些设备需要额外触发。5.2 舵机抖动、乱转、没力气舵机问题的根源大概率不是代码逻辑而是电流或信号稳定性的问题。先说抖动你发送90度后舵机停在附近来回小幅摆动甚至听到嗡嗡声。最常见的原因是供电电压波动——舵机每做一个微小修正电流波动就会影响参考电压导致控制电路误判。解决办法前面提过给舵机单独供电在电源两端并联一个大电容470uF以上用短而粗的杜邦线电源线不要和信号线绞在一起。“没力气”通常表现为舵机空载能转但用手指轻轻一捏就停。这是扭矩不足或电压不够的表现。先量一下舵机电源电压如果低于4.8V问题就出在这里。劣质SG90在电压低于4.5V时扭矩会急剧下降。另外有些山寨SG90标称1.8kg·cm实际扭矩远低于此换一个正品或MG90S金属齿轮舵机更省心。“乱转”则要分情况如果舵机在非指令状态下自己来回跑大概率是信号线上有干扰或者GPIO引脚选择有问题。检查信号线是否过长超过20cm建议用屏蔽线或降低PWM频率、是否和电源线平行走线过近。如果你把信号线接到了GPIO12上电瞬间可能会进入异常状态这类引脚在ESP32上要避开。还有一个很多人忽略的细节ESP32Servo库初始化时舵机没上电。在setup里attach和write(0)的顺序也很重要。我自己的习惯是attach(13, 500, 2400)之后立刻write(0)让舵机一上电就有一个明确的初始目标避免它因为“没有收到过有效脉宽”而在上电时猛抽一下。如果你发现上电瞬间舵机还是会抖一下可以在舵机电源正极线路上加一个手动开关等ESP32初始化完成后再给舵机上电是最直观的彻底解法。5.3 烧录失败与串口各种问题烧录失败是新手第二常见的挫折来源。常见的报错是A fatal error occurred: Failed to connect to ESP32: Timed out...Connecting...这个报错的含义是电脑没有成功让ESP32进入下载模式。ESP32正常烧录时ROM引导程序会在芯片上电瞬间等待下载握手信号如果你的板子没有自动下载电路或者当前USB串口状态不稳定就会连接超时。解决办法是按住开发板上的BOOT键不放点击Arduino IDE的上传按钮看到输出窗口出现“Connecting…”后松开BOOT键等待烧录完成。这个方法在绝大多数ESP32 DevKit上都有效。串口监视器上的问题最常见的是乱码。乱码几乎都是波特率不对程序里Serial.begin(115200)你监视器却选了9600自然全是“锟斤拷”。这个其实不算坑但真的有人在这上面耗了半小时。另一个“诡异”的现象是串口监视器打开时烧录按钮点下去没反应。这是因为串口监视器占用了COM口烧录工具无法访问。解决办法关掉串口监视器再烧录或者用Arduino IDE 2.x自带的“烧录后自动打开监视器”。还有一类问题来自USB驱动ESP32 DevKit用的USB转串口芯片主要是CP2102或CH340。Windows 10以上系统一般自动装驱动但如果你的板子插上后电脑完全没反应去检查设备管理器里COM口是否出现。如果看到“USB Serial”但有黄色感叹号就要手动装CP210x或CH340驱动。这个问题和学习ESP32本身无关却卡掉了一大批人。5.4 跑通之后还可以做什么蓝牙控制舵机这个项目跑通你的技术储备就已经够做很多有趣的东西了而且几乎都是“换皮不换骨”的操作。第一个扩展方向把单个舵机变成多个舵机。ESP32Servo库支持同时控制十几个舵机你只要创建多个Servo对象分别attach到不同引脚手机发一条类似“1:90,2:45”的指令用逗号分隔舵机编号和角度就能做机械臂或者仿生手臂的关节控制。很多淘宝上的总线舵机机械臂就是这么个玩法只是把PWM舵机换成了串行总线舵机在一条数据线上串联多个舵机每个舵机有自己的ID协议稍有不同但思路一致。第二个方向把蓝牙换成WiFi或同时保留WiFi。ESP32自带WiFi你可以把舵机接进智能家居系统用浏览器里的网页控制面板代替手机App。标题里提到的“ESP32内嵌Web网页”就是这条路在ESP32上挂一个小网站手机上浏览器打开滑块拖动舵机就跟着动那体验比蓝牙串口App爽不少。第三个方向把舵机装上车。舵机是差速小车转向系统的核心部件之一你用蓝牙控制舵机后再加两个直流电机和驱动模块就能做出一台手机遥控的小车。网上提到的“ROS2 Humble串口桥接ESP32小车”也是从这一步开始的——先用串口可以是蓝牙虚拟串口把ESP32和树莓派连起来车上的行为决策放在树莓派底层电机控制放在ESP32。我在实际带人做这个项目的过程中最深的体会是对初学者来说最重要的不是把代码写得多漂亮而是建立“分层排查”的思维。你说“我发90度舵机动不了”这可能是手机App配置问题可能是蓝牙链路问题可能是GPIO接线问题也可能是供电问题——每一层都要有一个独立的验证方法而不是反复改代码碰运气。上面讲的联调流程就是这套思路的体现串口监视器验本地help指令验蓝牙0到180验舵机。养成这种“一段一段验证”的习惯后面做任何复杂项目都会受益。最后再分享两个小技巧一是调试时给手机App设置几个快捷按钮把0、45、90、135、180预先存好测试时不用每次都敲数字方便很多二是如果舵机在某个角度始终有轻微抖动不要急着改代码先用手指轻扶舵机臂感受一下——如果感觉它在和什么东西“较劲”多半是机械结构卡住了不是程序问题。硬件和软件的问题分开看是玩单片机最重要的一课。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →