> For the complete documentation index, see [llms.txt](https://robopipe.gitbook.io/doc/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://robopipe.gitbook.io/doc/api/rest-api-reference/digital-i-o.md).

# Digital I/O

**Digital inputs** receive signals from external devices like switches, sensors, or push buttons, indicating whether a condition is active or inactive (e.g., a door is open or closed). **Digital outputs** enable the PLC to control devices such as relays, lights, or solenoids by sending on/off signals to activate or deactivate them. These I/O channels are essential for processes that rely on clear, binary decisions, ensuring reliable control of equipment and systems in automated operations. The main difference between digital I/O and analog I/O is that digital I/O provides binary values (on/off, true/false, ...). Digital I/O API provides interface for controlling all digital inputs and outputs on your controller.

## API Reference

## GET /controller/di

> List All Digital Inputs

```json
{"openapi":"3.1.0","info":{"title":"Robopipe API","version":"0.2.1.dev12"},"servers":[{"url":"http://localhost:8080","description":"Locally running server"}],"paths":{"/controller/di":{"get":{"tags":["controller"],"summary":"List All Digital Inputs","operationId":"List_all_digital_inputs_controller_di_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DigitalInput"},"type":"array","title":"Response List All Digital Inputs Controller Di Get"}}}}}}}},"components":{"schemas":{"DigitalInput":{"properties":{"dev":{"type":"string","title":"Dev"},"circuit":{"type":"string","title":"Circuit"},"counter_modes":{"items":{"$ref":"#/components/schemas/DigitalInputCounterMode"},"type":"array","title":"Counter Modes"},"modes":{"items":{"$ref":"#/components/schemas/DigitalInputMode"},"type":"array","title":"Modes"},"value":{"type":"integer","enum":[0,1],"title":"Value"},"counter":{"type":"integer","title":"Counter"},"counter_mode":{"$ref":"#/components/schemas/DigitalInputCounterMode"},"mode":{"$ref":"#/components/schemas/DigitalInputMode"},"debounce":{"type":"integer","title":"Debounce","default":50}},"type":"object","required":["dev","circuit","counter_modes","modes","value","counter","counter_mode","mode"],"title":"DigitalInput"},"DigitalInputCounterMode":{"type":"string","enum":["Enabled","Disabled"],"title":"DigitalInputCounterMode"},"DigitalInputMode":{"type":"string","enum":["Simple","DirectSwitch"],"title":"DigitalInputMode"}}}}
```

## GET /controller/di/{circuit}

> Get Digital Input

```json
{"openapi":"3.1.0","info":{"title":"Robopipe API","version":"0.2.1.dev12"},"servers":[{"url":"http://localhost:8080","description":"Locally running server"}],"paths":{"/controller/di/{circuit}":{"get":{"tags":["controller"],"summary":"Get Digital Input","operationId":"Get_digital_input_controller_di__circuit__get","parameters":[{"name":"circuit","in":"path","required":true,"schema":{"type":"string","title":"Circuit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DigitalInput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"DigitalInput":{"properties":{"dev":{"type":"string","title":"Dev"},"circuit":{"type":"string","title":"Circuit"},"counter_modes":{"items":{"$ref":"#/components/schemas/DigitalInputCounterMode"},"type":"array","title":"Counter Modes"},"modes":{"items":{"$ref":"#/components/schemas/DigitalInputMode"},"type":"array","title":"Modes"},"value":{"type":"integer","enum":[0,1],"title":"Value"},"counter":{"type":"integer","title":"Counter"},"counter_mode":{"$ref":"#/components/schemas/DigitalInputCounterMode"},"mode":{"$ref":"#/components/schemas/DigitalInputMode"},"debounce":{"type":"integer","title":"Debounce","default":50}},"type":"object","required":["dev","circuit","counter_modes","modes","value","counter","counter_mode","mode"],"title":"DigitalInput"},"DigitalInputCounterMode":{"type":"string","enum":["Enabled","Disabled"],"title":"DigitalInputCounterMode"},"DigitalInputMode":{"type":"string","enum":["Simple","DirectSwitch"],"title":"DigitalInputMode"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## POST /controller/di/{circuit}

> Set Digital Input

```json
{"openapi":"3.1.0","info":{"title":"Robopipe API","version":"0.2.1.dev12"},"servers":[{"url":"http://localhost:8080","description":"Locally running server"}],"paths":{"/controller/di/{circuit}":{"post":{"tags":["controller"],"summary":"Set Digital Input","operationId":"Set_digital_input_controller_di__circuit__post","parameters":[{"name":"circuit","in":"path","required":true,"schema":{"type":"string","title":"Circuit"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DigitalInputUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DigitalInput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"DigitalInputUpdate":{"properties":{"counter":{"type":"integer","title":"Counter"},"counter_mode":{"$ref":"#/components/schemas/DigitalInputCounterMode","default":"Enabled"},"mode":{"$ref":"#/components/schemas/DigitalInputMode","default":"Simple"},"debounce":{"type":"integer","title":"Debounce","default":50}},"type":"object","required":["counter"],"title":"DigitalInputUpdate"},"DigitalInputCounterMode":{"type":"string","enum":["Enabled","Disabled"],"title":"DigitalInputCounterMode"},"DigitalInputMode":{"type":"string","enum":["Simple","DirectSwitch"],"title":"DigitalInputMode"},"DigitalInput":{"properties":{"dev":{"type":"string","title":"Dev"},"circuit":{"type":"string","title":"Circuit"},"counter_modes":{"items":{"$ref":"#/components/schemas/DigitalInputCounterMode"},"type":"array","title":"Counter Modes"},"modes":{"items":{"$ref":"#/components/schemas/DigitalInputMode"},"type":"array","title":"Modes"},"value":{"type":"integer","enum":[0,1],"title":"Value"},"counter":{"type":"integer","title":"Counter"},"counter_mode":{"$ref":"#/components/schemas/DigitalInputCounterMode"},"mode":{"$ref":"#/components/schemas/DigitalInputMode"},"debounce":{"type":"integer","title":"Debounce","default":50}},"type":"object","required":["dev","circuit","counter_modes","modes","value","counter","counter_mode","mode"],"title":"DigitalInput"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## POST /controller/di

> Set All Digital Inputs

```json
{"openapi":"3.1.0","info":{"title":"Robopipe API","version":"0.2.1.dev12"},"servers":[{"url":"http://localhost:8080","description":"Locally running server"}],"paths":{"/controller/di":{"post":{"tags":["controller"],"summary":"Set All Digital Inputs","operationId":"Set_all_digital_inputs_controller_di_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DigitalInputUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DigitalInput"},"type":"array","title":"Response Set All Digital Inputs Controller Di Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"DigitalInputUpdate":{"properties":{"counter":{"type":"integer","title":"Counter"},"counter_mode":{"$ref":"#/components/schemas/DigitalInputCounterMode","default":"Enabled"},"mode":{"$ref":"#/components/schemas/DigitalInputMode","default":"Simple"},"debounce":{"type":"integer","title":"Debounce","default":50}},"type":"object","required":["counter"],"title":"DigitalInputUpdate"},"DigitalInputCounterMode":{"type":"string","enum":["Enabled","Disabled"],"title":"DigitalInputCounterMode"},"DigitalInputMode":{"type":"string","enum":["Simple","DirectSwitch"],"title":"DigitalInputMode"},"DigitalInput":{"properties":{"dev":{"type":"string","title":"Dev"},"circuit":{"type":"string","title":"Circuit"},"counter_modes":{"items":{"$ref":"#/components/schemas/DigitalInputCounterMode"},"type":"array","title":"Counter Modes"},"modes":{"items":{"$ref":"#/components/schemas/DigitalInputMode"},"type":"array","title":"Modes"},"value":{"type":"integer","enum":[0,1],"title":"Value"},"counter":{"type":"integer","title":"Counter"},"counter_mode":{"$ref":"#/components/schemas/DigitalInputCounterMode"},"mode":{"$ref":"#/components/schemas/DigitalInputMode"},"debounce":{"type":"integer","title":"Debounce","default":50}},"type":"object","required":["dev","circuit","counter_modes","modes","value","counter","counter_mode","mode"],"title":"DigitalInput"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /controller/do

> List All Digital Outputs

```json
{"openapi":"3.1.0","info":{"title":"Robopipe API","version":"0.2.1.dev12"},"servers":[{"url":"http://localhost:8080","description":"Locally running server"}],"paths":{"/controller/do":{"get":{"tags":["controller"],"summary":"List All Digital Outputs","operationId":"List_all_digital_outputs_controller_do_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DigitalOutput"},"type":"array","title":"Response List All Digital Outputs Controller Do Get"}}}}}}}},"components":{"schemas":{"DigitalOutput":{"properties":{"dev":{"type":"string","title":"Dev"},"circuit":{"type":"string","title":"Circuit"},"modes":{"items":{"$ref":"#/components/schemas/DigitalOutputMode"},"type":"array","title":"Modes"},"pwm_freq":{"type":"number","title":"Pwm Freq"},"pwm_duty":{"type":"integer","maximum":100,"minimum":0,"title":"Pwm Duty","description":"Mutually exclusive with value. Value must be between 0 and 100"},"value":{"type":"integer","title":"Value"},"mode":{"$ref":"#/components/schemas/DigitalOutputMode"}},"type":"object","required":["dev","circuit","modes","pwm_freq","pwm_duty","value","mode"],"title":"DigitalOutput"},"DigitalOutputMode":{"type":"string","enum":["Simple","PWM"],"title":"DigitalOutputMode"}}}}
```

## GET /controller/do/{circuit}

> Get Digital Output

```json
{"openapi":"3.1.0","info":{"title":"Robopipe API","version":"0.2.1.dev12"},"servers":[{"url":"http://localhost:8080","description":"Locally running server"}],"paths":{"/controller/do/{circuit}":{"get":{"tags":["controller"],"summary":"Get Digital Output","operationId":"Get_digital_output_controller_do__circuit__get","parameters":[{"name":"circuit","in":"path","required":true,"schema":{"type":"string","title":"Circuit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DigitalOutput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"DigitalOutput":{"properties":{"dev":{"type":"string","title":"Dev"},"circuit":{"type":"string","title":"Circuit"},"modes":{"items":{"$ref":"#/components/schemas/DigitalOutputMode"},"type":"array","title":"Modes"},"pwm_freq":{"type":"number","title":"Pwm Freq"},"pwm_duty":{"type":"integer","maximum":100,"minimum":0,"title":"Pwm Duty","description":"Mutually exclusive with value. Value must be between 0 and 100"},"value":{"type":"integer","title":"Value"},"mode":{"$ref":"#/components/schemas/DigitalOutputMode"}},"type":"object","required":["dev","circuit","modes","pwm_freq","pwm_duty","value","mode"],"title":"DigitalOutput"},"DigitalOutputMode":{"type":"string","enum":["Simple","PWM"],"title":"DigitalOutputMode"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## POST /controller/do/{circuit}

> Set Digital Output

```json
{"openapi":"3.1.0","info":{"title":"Robopipe API","version":"0.2.1.dev12"},"servers":[{"url":"http://localhost:8080","description":"Locally running server"}],"paths":{"/controller/do/{circuit}":{"post":{"tags":["controller"],"summary":"Set Digital Output","operationId":"Set_digital_output_controller_do__circuit__post","parameters":[{"name":"circuit","in":"path","required":true,"schema":{"type":"string","title":"Circuit"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DigitalOutputUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DigitalOutput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"DigitalOutputUpdate":{"properties":{"pwm_freq":{"type":"number","title":"Pwm Freq"},"pwm_duty":{"type":"integer","maximum":100,"minimum":0,"title":"Pwm Duty","description":"Mutually exclusive with value. Value must be between 0 and 100"},"value":{"type":"integer","title":"Value"}},"type":"object","required":["pwm_freq","pwm_duty","value"],"title":"DigitalOutputUpdate"},"DigitalOutput":{"properties":{"dev":{"type":"string","title":"Dev"},"circuit":{"type":"string","title":"Circuit"},"modes":{"items":{"$ref":"#/components/schemas/DigitalOutputMode"},"type":"array","title":"Modes"},"pwm_freq":{"type":"number","title":"Pwm Freq"},"pwm_duty":{"type":"integer","maximum":100,"minimum":0,"title":"Pwm Duty","description":"Mutually exclusive with value. Value must be between 0 and 100"},"value":{"type":"integer","title":"Value"},"mode":{"$ref":"#/components/schemas/DigitalOutputMode"}},"type":"object","required":["dev","circuit","modes","pwm_freq","pwm_duty","value","mode"],"title":"DigitalOutput"},"DigitalOutputMode":{"type":"string","enum":["Simple","PWM"],"title":"DigitalOutputMode"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## POST /controller/do

> Set All Digital Outputs

```json
{"openapi":"3.1.0","info":{"title":"Robopipe API","version":"0.2.1.dev12"},"servers":[{"url":"http://localhost:8080","description":"Locally running server"}],"paths":{"/controller/do":{"post":{"tags":["controller"],"summary":"Set All Digital Outputs","operationId":"Set_all_digital_outputs_controller_do_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DigitalOutputUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DigitalOutput"},"type":"array","title":"Response Set All Digital Outputs Controller Do Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"DigitalOutputUpdate":{"properties":{"pwm_freq":{"type":"number","title":"Pwm Freq"},"pwm_duty":{"type":"integer","maximum":100,"minimum":0,"title":"Pwm Duty","description":"Mutually exclusive with value. Value must be between 0 and 100"},"value":{"type":"integer","title":"Value"}},"type":"object","required":["pwm_freq","pwm_duty","value"],"title":"DigitalOutputUpdate"},"DigitalOutput":{"properties":{"dev":{"type":"string","title":"Dev"},"circuit":{"type":"string","title":"Circuit"},"modes":{"items":{"$ref":"#/components/schemas/DigitalOutputMode"},"type":"array","title":"Modes"},"pwm_freq":{"type":"number","title":"Pwm Freq"},"pwm_duty":{"type":"integer","maximum":100,"minimum":0,"title":"Pwm Duty","description":"Mutually exclusive with value. Value must be between 0 and 100"},"value":{"type":"integer","title":"Value"},"mode":{"$ref":"#/components/schemas/DigitalOutputMode"}},"type":"object","required":["dev","circuit","modes","pwm_freq","pwm_duty","value","mode"],"title":"DigitalOutput"},"DigitalOutputMode":{"type":"string","enum":["Simple","PWM"],"title":"DigitalOutputMode"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```
