> 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"}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://robopipe.gitbook.io/doc/api/rest-api-reference/digital-i-o.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
