二次开发工具使用
本教程介绍二次开发工具的安装与使用方法,重点说明如何在 Servo Driver with ESP32 上上传修改后的程序,用于在 ST / SC 系列舵机程序的基础上进行二次开发。本次使用的开发工具为 Arduino IDE,下文介绍 Arduino IDE 中舵机依赖库及开发环境的安装与使用。
1. Arduino 安装及环境搭建
1.1 Arduino IDE 是什么
Arduino IDE(Integrated Development Environment,集成开发环境)是一个基于开源代码的开发平台,具备独立的编程语言与开发环境。Arduino IDE 提供丰富的库文件,大幅简化了诸如显示器、传感器等复杂硬件及软件平台的使用过程。
1.2 Arduino IDE 安装
下载 Arduino IDE
先到 Arduino 官网 下载最新版本 Arduino IDE 的安装包。官方 IDE 支持不同操作系统下载,根据您的操作系统进行选择。这里下载的是 Windows 的,如果已安装,直接跳到第二步。安装过程很简单,一直点击下一步即可。

安装过程中会提示安装驱动,一直点击安装即可。

设置 Arduino IDE 为中文界面
第一次安装完成后,打开 Arduino IDE 是英文界面的,可以点击 “File” → “Preferences” 。


1.3 开发环境安装
机器人上驱动板的主控模组是 ESP32,所以我们在 Arduino IDE 开发环境中需要安装好 ESP32 对应的开发板。步骤如下:
-
打开 Arduino IDE,点击 “文件” → “首选项”。

-
在附加开发板管理器网址中添加如下链接,点击“确定”保存设置。
https://dl.espressif.com/dl/package_esp32_index.json

如果您需要添加多个开发板 URL,那无需将 ESP32 开发板支持的 URL 删掉,可以直接将其他 URL 添加至另一行,默认显示是逗号分隔开 URL 的。
例如:如果您需要添加 ESP8266 开发板的 URL,直接添加至另一行,显示出来如下为:
https://dl.espressif.com/dl/package_esp32_index.json,http://arduino.esp8266.com/stable/package_esp8266com_index.json


- 点击 packages 进行下载并解压缩,在 “我的电脑” 中输入以下路径:
C:\Users\username\AppData\Local\Arduino15
username 需要根据自己电脑的用户名更改,将解压的 packages 文件复制到 Arduino15 文件夹下。

在 Arduino15 目录下的 packages/esp32/hardware/esp32 路径中,可查看安装的 ESP32 开发板支持包版本为 1.0.6。
ST/SC 系列舵机开源程序基于 ESP32 开发板支持包 1.0.x 版本编写,推荐使用 1.0.6 版本。若使用 3.x 等其他版本,ESP-NOW 接收回调函数接口可能不兼容,后续上传程序时会出现 esp_now_recv_cb_t 相关的函数类型不匹配错误。
1.4 依赖库安装
下载 依赖库文件 并解压缩,将解压后的库文件夹复制到 Arduino 的用户库目录(libraries) 中。默认路径如下:
C:\Users\username\Documents\Arduino\libraries
username 需要根据自己电脑的用户名更改。

打开 Arduino IDE,点击 “File” → “Preferences”,查看 Sketchbook location。例如:
Sketchbook location:
C:\Users\ag\Documents\Arduino
则库目录为:
C:\Users\ag\Documents\Arduino\libraries

1.5 上传程序
- 下载 SC 系列舵机开源程序,解压后双击打开 ServoDriver.ino。注意这个目录下的所有文件要在同一个文件夹下。

Servo Driver with ESP32 出厂自带的程序是 SC 系列舵机开源程序,如果使用的是 ST 系列舵机,请点击下载 ST 系列舵机开源程序
-
点击 “Tools” → “Port”,查看当前已有的串口设备。记住自己电脑上已有的 COM,不需要点击这个 COM(不同电脑显示的 COM 可能不同,也可能没有已有的 COM)。
-
使用 USB 线将 Servo Driver with ESP32 与电脑连接,再次点击 “Tools” → “Port”,观察与步骤 2 相比新增的串口设备,再点击新出现的 COM(我这里新出现的 COM 为 COM7)。

-
在 Arduino IDE 中,点击 “Tools” → “Board” → “ESP32” → “ESP32 Dev Module”。

-
点击“工具”,其他设置如下:(Partition Scheme 最好用 Huge APP,PSRAM 必须使用 Enabled)
-
设置全部完成后,点击左上角的上传图标开始上传程序。
如果上传期间遇到了问题,需要重新安装或者更换 Arduino IDE 版本时,在这之前,您需要将 Arduino IDE 卸载干净,卸载软件后需要将 C:\Users\username\AppData\Local\Arduino15 这个文件夹内的所有内容手动删除(一些隐藏文件需要显示才能看到),接着再重新下载安装。
2. 进阶配置
2.1 修改最大扫描 ID
为了检测已连接的舵机,程序会从 ID 1 开始依次发送 Ping 指令,直到达到设定的最大 ID。如果舵机的 ID 较大,或连接了较多舵机,可以适当增大 MAX_ID 的值;如果已知舵机 ID 范围较小,则可减小该值,以缩短扫描时间。
在 ServoDriver.ino 中修改以下参数即可:
// Set the maximum ID to scan
int MAX_ID = 20;
MAX_ID 默认值为 20,最大支持设置为 253。数值越大,扫描时间越长。
2.2 ESP-NOW 通信配置
驱动板之间通过 ESP-NOW 进行无线通信。默认程序支持一对一控制,您也可以自行扩展为一对多或多对多通信。
在 ESP-NOW 通信中,每个设备都拥有唯一的 MAC 地址。建立通信前,控制端(Leader)需要知道被控端(Follower)的 MAC 地址,以便将控制数据发送到指定设备。
驱动板支持以下三种工作模式:
| 模式 | 说明 |
|---|---|
| Normal | 普通模式,不参与 ESP-NOW 通信 |
| Leader | 控制端,向其他设备发送控制数据 |
| Follower | 被控端,接收并执行控制数据 |
当使用一块驱动板控制另一块驱动板时,需要将其中一块配置为 Leader,另一块配置为 Follower。
2.2.1 获取 Follower 的 MAC 地址
首先连接作为 Follower 的驱动板。驱动板上电后会自动获取自身 MAC 地址,并显示在 OLED 屏幕第一行。记录该 MAC 地址,后续配置 Leader 时需要使用。
2.2.2 设置 Follower 模式
打开 ServoDriver.ino,将 DEFAULT_ROLE 修改为 2:
// set the default role here.
// 0 as normal mode.
// 1 as leader, ctrl other device via ESP-NOW.
// 2 as follower, can be controled via ESP-NOW.
#define DEFAULT_ROLE 2
编译并上传程序到 Follower 驱动板。上传完成后,驱动板每次上电都会自动进入 Follower 模式。
此步骤并非必须,也可以在 Web 配置页面中手动切换工作模式。
2.2.3 配置目标 MAC 地址和 Leader 模式
连接作为 Leader 的驱动板,打开 ServoDriver.ino。将 broadcastAddress[] 改为 Follower 的 MAC 地址,记得在每个数值前加上 0x。
// the MAC address of the device you want to ctrl.
uint8_t broadcastAddress[] = {0x94, 0xB5, 0x55, 0x1D, 0xD1, 0x0C};
以上是示例,每个设备的 MAC 地址是不同的,需要根据实际情况更改。
将 DEFAULT_ROLE 修改为 1:
// set the default role here.
// 0 as normal mode.
// 1 as leader, ctrl other device via ESP-NOW.
// 2 as follower, can be controled via ESP-NOW.
#define DEFAULT_ROLE 1
编译并上传程序到 Leader 驱动板。上传完成后,Leader 将自动与指定的 Follower 建立 ESP-NOW 通信。
两个设备分别连接相同 ID 的舵机后,可参考 Web 端使用教程 控制 Leader 驱动板上的舵机。Leader 会将当前选中的舵机(Active Servo)的 ID 和位置数据(Position)发送给 Follower,Follower 接收到数据后,将控制对应 ID 的舵机同步运动。
-
仅在舵机模式(Servo Mode)下有效。若舵机工作于电机模式(Motor Mode),由于无法直接控制目标角度,无法实现位置同步功能。
-
建议使用不同的 WiFi 名称。当同时使用多个驱动板时,建议为每块驱动板设置不同的 WiFi SSID。否则在手机、电脑等设备搜索并连接 WiFi 时,可能难以区分不同的驱动板,从而误连接到错误的设备。有关 SSID 的修改方法,请参考 2.3 WIFI:AP 与 STA 模式。
2.3 WIFI:AP 与 STA 模式
驱动板支持 AP(Access Point)模式 和 STA(Station)模式 两种 WiFi 工作模式。
| 模式 | 说明 |
|---|---|
| AP | 驱动板创建 WiFi 热点,手机或电脑可直接连接该热点访问 Web 控制页面。 |
| STA | 驱动板连接到已有的 WiFi 网络,并加入该局域网。 |
2.3.1 配置 AP 模式
在 AP 模式下,驱动板会创建一个 WiFi 热点。您可以在 ServoDriver.ino 中修改热点名称(SSID)和密码:
// WIFI_AP settings.
const char* AP_SSID = "ESP32_DEV";
const char* AP_PWD = "12345678";
修改完成后,将 DEFAULT_WIFI_MODE 设置为 1:
// set the default wifi mode here.
// 1 as [AP] mode, it will not connect other wifi.
// 2 as [STA] mode, it will connect to know wifi.
#define DEFAULT_WIFI_MODE 1
上传程序后,驱动板上电将自动创建对应的 WiFi 热点。
2.3.2 配置 STA 模式
在 STA 模式下,驱动板会连接到指定的 WiFi 网络。在 ServoDriver.ino 中填写目标 WiFi 的名称和密码:
// WIFI_STA settings.
const char* STA_SSID = "OnePlus 8";
const char* STA_PWD = "40963840";
然后将 DEFAULT_WIFI_MODE 设置为 2:
// set the default wifi mode here.
// 1 as [AP] mode, it will not connect other wifi.
// 2 as [STA] mode, it will connect to know wifi.
#define DEFAULT_WIFI_MODE 2