

The Serial Bus Servo Driver (Manufacturer Part ID: 25514 / Bus Servo Adapter (A)) by Waveshare is a versatile device designed to control multiple servo motors over a single communication line. This component simplifies the management of servo motors in robotics and automation applications by enabling efficient communication and control. It is particularly useful in scenarios where space and wiring complexity need to be minimized.








The following table outlines the key technical details of the Serial Bus Servo Driver:
| Parameter | Specification |
|---|---|
| Operating Voltage | 5V DC |
| Communication Protocol | UART (Serial Communication) |
| Baud Rate | Configurable (default: 115200 bps) |
| Servo Compatibility | Supports TTL serial bus servos |
| Number of Servos | Up to 253 servos on a single bus |
| Control Modes | Position, speed, and torque control |
| Dimensions | 40mm x 30mm x 10mm |
| Operating Temperature | -20°C to 85°C |
The Serial Bus Servo Driver features the following pin layout:
| Pin Name | Description |
|---|---|
| VCC | Power input (5V DC) |
| GND | Ground |
| TX | UART transmit pin (connect to RX of the controller) |
| RX | UART receive pin (connect to TX of the controller) |
| BUS+ | Positive terminal for the servo bus |
| BUS- | Negative terminal for the servo bus |
Below is an example Arduino sketch to control a servo using the Serial Bus Servo Driver:
#include <SoftwareSerial.h>
// Define RX and TX pins for SoftwareSerial
#define RX_PIN 10 // Connect to TX of the Serial Bus Servo Driver
#define TX_PIN 11 // Connect to RX of the Serial Bus Servo Driver
SoftwareSerial servoSerial(RX_PIN, TX_PIN);
void setup() {
servoSerial.begin(115200); // Initialize UART communication at 115200 bps
delay(100); // Allow time for the Serial Bus Servo Driver to initialize
// Example command to set servo ID 1 to position 500 (range: 0-1000)
sendServoCommand(1, 500);
}
void loop() {
// Add your main code here
}
// Function to send a command to the servo
void sendServoCommand(uint8_t servoID, uint16_t position) {
uint8_t command[6];
command[0] = 0x55; // Header byte 1
command[1] = 0x55; // Header byte 2
command[2] = servoID; // Servo ID
command[3] = 3; // Length of the command
command[4] = 1; // Command type: Move to position
command[5] = position & 0xFF; // Position low byte
command[6] = (position >> 8) & 0xFF; // Position high byte
// Send the command over UART
for (uint8_t i = 0; i < 7; i++) {
servoSerial.write(command[i]);
}
}
Servos Not Responding
Erratic Servo Movements
Communication Errors
Overheating
Can I use this driver with analog servos?
What is the maximum cable length for the servo bus?
How do I change the baud rate of the driver?
Can I control servos with different IDs simultaneously?
This documentation provides a comprehensive guide to using the Waveshare Serial Bus Servo Driver effectively. For further details, refer to the manufacturer's datasheet or support resources.