Configure a gpio Servo
Configure a gpio
servo to integrate a hobby servo controlled by general-purpose input/output (GPIO) pins on a non-pi
model board into your robot:
Navigate to the Config tab of your robot’s page in the Viam app.
Click on the Components subtab and click Create component.
Select the servo
type, then select the gpio
model.
Enter a name for your servo and click Create.
Copy and paste the following attribute template into your servo’s Attributes box. Then remove and fill in the attributes as applicable to your servo, according to the table below.
{
"pin": "<your-pin-number>",
"board": "<your-board-name>",
"min_angle_deg": <float>,
"max_angle_deg": <float>,
"starting_position_deg": <float>,
"frequency_hz": <int>,
"pwm_resolution": <int>,
"min_width_us": <int>,
"max_width_us": <int>
}
{
"pin": "16",
"board": "local"
}
{
"components": [
{
"name": "<your-servo-name>",
"model": "gpio",
"type": "servo",
"namespace": "rdk",
"attributes": {
"pin": "<your-pin-number>",
"board": "<your-board-name>",
"min_angle_deg": <float>,
"max_angle_deg": <float>,
"starting_position_deg": <float>,
"frequency_hz": <int>,
"pwm_resolution": <int>,
"min_width_us": <int>,
"max_width_us": <int>
}
}
}
{
"components": [
{
"name": "local",
"model": "jetson",
"type": "board",
"namespace": "rdk"
},
{
"name": "my_servo",
"model": "gpio",
"type": "servo",
"namespace": "rdk",
"attributes": {
"pin": "16",
"board": "local"
}
}
]
}
The following attributes are available for gpio
servos:
Name | Type | Inclusion | Description |
---|---|---|---|
pin | string | Required | The pin number of the pin the servo’s control wire is wired to on the board. |
board | string | Required | name of the board the servo is wired to. |
min_angle_deg | float | Optional | The minimum angle in degrees that the servo can reach. Default = 0.0 Range = [ 0.0 , 180.0 ] |
max_angle_deg | float | Optional | The maximum angle in degrees that the servo can reach. Default = 180.0 Range = [ 0.0 , 180.0 ] |
starting_position_deg | float | Optional | Starting position of the servo in degrees. Default = 0.0 Range = [ 0.0 , 180.0 ] |
frequency_hz | int | Optional | The frequency of PWM pulses sent to the servo, in Hertz (Hz). Default = [ 300 ]Range = [ 0 , 450 ] |
pwm_resolution | int | Optional | The resolution of the PWM driver (for example, the number of ticks for a full period). If not specified or given as 0 , the driver will attempt to estimate the resolution. |
min_width_us | int | Optional | Override the safe minimum PWM pulse width in microseconds. Range > 450 |
max_width_us | int | Optional | Override the safe maximum PWM pulse width in microseconds. Range < 2500 |
Tip
Refer to your servo’s data sheet for pulse-width modulation (PWM), rotation, and wiring specifications.
Test the servo
After you establish the connection to your servo motor, navigate to the Control tab and select the dropdown panel dedicated to the motor. Use the buttons to move the servo motor to the desired angle.

Have questions, or want to meet other people working on robots? Join our Community Discord.
If you notice any issues with the documentation, feel free to file an issue or edit this file.
Was this page helpful?
Glad to hear it! If you have any other feedback please let us know:
We're sorry about that. To help us improve, please tell us what we can do better:
Thank you!