Hi there, I’m reaching out for help with a communication problem between the XIAO ESP32S3 and Feetech servos. I’ve been troubleshooting this for days without success, so I’d really appreciate it if someone could take a look.
Device Information
Main Controller: XIAO ESP32S3
Servos: Feetech serial servos (STS/SMS series, 2 units, IDs set to 1 and 2 respectively)
Power Supply: Servos are powered by an external 5V power source (stable voltage, GND is common-grounded with the XIAO)
Issue Phenomenon
a. The code can send commands to the servos normally: The servos can receive commands and rotate (e.g., the “j/k to adjust angle” function in the official example works, and the servos move properly). However, no feedback signals from the servos can be received: When running the “XIAO-controlled servo bus board” code from the Seeed official website, the serial monitor keeps outputting “Error: Servo with ID 1 is unresponsive! Error: Servo with ID 2 is unresponsive!”.
b. When running Feetech’s official Feedback code, the serial monitor continuously reports errors like “FeedBack err” and “read position err” — I can’t retrieve any servo parameters (position, voltage, etc.) at all.
Troubleshooting Steps Tried (All Ineffective)
a. Baud Rate Matching: I’ve set the servo baud rate to 115200 via the debugging tool, and the serial baud rate in the code is also configured to 115200 accordingly.
b. Wiring Methods:Tried “XIAO TX to Servo TX, XIAO RX to Servo RX” (direct connection);Also tried “XIAO TX to Servo RX, XIAO RX to Servo TX” (cross communication);GND is common-grounded with the XIAO in both wiring setups.
c. Power Supply: Eliminated insufficient power — the servos are connected to an independent external 5V power source.
d. Connection Methods:Tried plugging the XIAO directly into the servo bus board;Also tried connecting the XIAO and servos separately using Dupont wires.
Could the official technical team please help analyze the possible causes, or provide debugging directions for bidirectional communication between the XIAO ESP32S3 and Feetech servos? Thank you so much!
Hi there,
and Welcome here…
So A LOT to unpack here,
First have you consulted the Manual? This One?
Next Confirm for me please the exact servo type you are using: TTL BUS or RS485 BUS (note the word (BUS)
The Servos are not really Full duplex servos in TTL mode.
Feetech comes in both flavors:
- TTL serial (3-wire: V+, GND, DATA or RX/TX depending on board)
- RS485 (differential A/B)
If you’re using RS485 servos and treating them as TTL: write works sometimes via noise/adapter weirdness, read will be dead.
“Look at the exact model number (STS/SMS variant) and confirm if it’s TTL or RS485.”
You’re closer than you think
– the fact the servos move proves your TX path and power are fine. On this Seeed Bus Servo Driver Board, bidirectional comms usually fail for two boring reasons: the board is in the wrong mode (front jumper/back solder pads), or the ESP32-S3 code isn’t actually using D6/D7 as RX/TX.
Put it in UART mode (front 2-pin jumper OFF), use ONE servo, wire board RX←D7 and board TX→D6, and explicitly set your UART pins in code. Then try 1,000,000 baud as well as 115200. Don’t change anything else until readback works.
try this:
- Put the board in UART mode (front jumper OFF). Seeed Studio
- Connect one servo only.
- Wire exactly as Seeed says (crossed): board RX ← D7, board TX → D6. Seeed Studio
- Test three bauds: 1,000,000 (common Feetech default), 115200, 57600.
- If write works but read fails: stop and re-check mode jumpers again before touching anything else.
The board wiring assumes:
- Host TX = D7
- Host RX = D6 Seeed Studio
On ESP32-S3 it’s easy to accidentally use:
Serial1on default pins (not D6/D7),- or pins that conflict with something else,
…and then you end up kind of transmitting but never receiving reliably.
Set the UART pins explicitly to D6/D7 in code and keep it simple (one servo, one baud, one library).
HTH
GL
PJ ![]()
from the manual :
The servo motors use the FT-SCS custom protocol. The factory default serial port configuration is as follows: SMS servos have a default baud rate of 115200 and use RS485 bus communication; STS servos have a default baud rate of 1 Mbps and use TTL single-bus communication, with 8 data bits, no parity, and 1 stop bit. The baud rate is configurable from 38400 to 1 Mbps, and the default communication address (station number) is 1.