Previous
fake
Configure a gpio
servo to integrate a hobby servo controlled by general-purpose input/output (GPIO) pins into your machine.
Physically connect your servo to your microcontroller and power both on.
Then, configure the servo:
Navigate to the CONFIGURE tab of your machine’s page in the Viam app.
Click the + icon next to your machine part in the left-hand menu and select Component.
Select the servo
type, then select the gpio
model.
Enter a name or use the suggested name for your servo and click Create.
Copy and paste the following attribute template into your servo’s attributes field. 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>",
"frequency_hz": <int>,
"min_angle_deg": <int>,
"max_angle_deg": <int>,
"min_period_us": <int>,
"max_period_us": <int>,
"pwm_resolution": <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>",
"frequency_hz": <int>,
"min_angle_deg": <int>,
"max_angle_deg": <int>,
"min_period_us": <int>,
"max_period_us": <int>,
"pwm_resolution": <int>
}
}
}
{
"components": [
{
"name": "local",
"model": "esp32",
"type": "board",
"namespace": "rdk",
"attributes": {
"pins": [16]
}
},
{
"name": "my_servo",
"model": "gpio",
"type": "servo",
"namespace": "rdk",
"attributes": {
"pin": "16",
"board": "local"
}
}
]
}
The following attributes are available for gpio
servos:
Name | Type | Required? | Description |
---|---|---|---|
pin | string | Required | The GPIO 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. |
frequency_hz | int | Optional | The frequency of PWM pulses sent to the servo, in Hertz (Hz). Default = [ 300 ]Range = [ 0 , 450 ] |
min_angle_deg | int | Optional | The minimum angle in degrees that the servo can reach. Default = 0 Range = [ 0 , 180 ] |
max_angle_deg | int | Optional | The maximum angle in degrees that the servo can reach. Default = 180 Range = [ 0 , 180 ] |
min_period_us | int | Optional | Override the safe minimum PWM pulse width in microseconds. Default: 500 |
max_period_us | int | Optional | Override the safe maximum PWM pulse width in microseconds. Default: 2500 |
pwm_resolution | int | Optional | The resolution of the PWM driver (for example, the number of ticks for a full period). Default: 0 |
esp32
boardsA gpio
servo using a PWM pin leaves you with three remaining PWM frequencies for use on an esp32
.
If the frequency of another PWM signal is unimportant, it can also be set to the same frequency as your servo.
See PWM signals on esp32
pins for more information.
Refer to your servo’s data sheet for pulse-width modulation (PWM), rotation, and wiring specifications.
After you establish the connection to your servo motor, open the servo’s TEST panel on the CONFIGURE or CONTROL tabs. Use the buttons to move the servo motor to the desired angle.
If your servo is not working as expected, follow these steps:
If none of these steps work, reach out to us on the Community Discord and we will be happy to help.
For general configuration and development info, see:
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!