# gpio

Configure a `gpio` servo to integrate a hobby servo controlled by general-purpose input/output (GPIO) pins on a non-`viam:raspberry-pi:rpi` model [board](https://docs.viam.com/reference/components/board/) into your machine.

- [JSON Template](https://docs.viam.com/reference/components/servo/gpio/#configure-a-gpio-servo-0)
- [JSON Example](https://docs.viam.com/reference/components/servo/gpio/#configure-a-gpio-servo-1)

The following attributes are available for `gpio` servos:

| Name                       | Type   | Required?    | Description                                                                                                                                                       |
|----------------------------|--------|---------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `pin`                       | string | **Required**  | The pin number of the pin the servo’s control wire is wired to on the [board](https://docs.viam.com/reference/components/board/).                               |
| `board`                     | string | **Required**  | `name` of the [board](https://docs.viam.com/reference/components/board/) the servo is wired to.                                                                  |
| `min_angle_deg`            | float  | Optional      | The minimum angle in degrees that the servo can reach.<br>Default = `0.0`<br>Range = [`0.0`, `180.0`]                                                             |
| `max_angle_deg`            | float  | Optional      | The maximum angle in degrees that the servo can reach.<br>Default = `180.0`<br>Range = [`0.0`, `180.0`]                                                           |
| `starting_position_deg`    | float  | Optional      | Starting position of the servo in degrees.<br>Default = `0.0`<br>Range = [`0.0`, `180.0`]                                                                         |
| `frequency_hz`             | int    | Optional      | The frequency of [PWM](https://docs.arduino.cc/learn/microcontrollers/analog-output) pulses sent to the servo, in Hertz ( _Hz_).<br>Default = [`300`]<br>Range = [`0`, `450`] |
| `pwm_resolution`           | int    | Optional      | The resolution of the [PWM](https://docs.arduino.cc/learn/microcontrollers/analog-output) 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](https://docs.arduino.cc/learn/microcontrollers/analog-output) pulse width in microseconds.<br>Range > `450`                     |
| `max_width_us`            | int    | Optional      | Override the safe maximum [PWM](https://docs.arduino.cc/learn/microcontrollers/analog-output) pulse width in microseconds.<br>Range < `2500`                   |

#### Tip

Refer to your servo’s data sheet for [pulse-width modulation (PWM)](https://docs.arduino.cc/learn/microcontrollers/analog-output), rotation, and wiring specifications.

## Test the servo

After you establish the connection to your servo motor, open the servo’s **TEST** panel on the **CONFIGURE** or [**CONTROL**](https://docs.viam.com/monitor/default-interface/#web-ui) tabs. Use the buttons to move the servo motor to the desired angle.
