mirror of https://github.com/pikvm/pikvm.git
Update gpio.md
This commit is contained in:
parent
3d00729024
commit
f00878428d
165
pages/gpio.md
165
pages/gpio.md
|
|
@ -9,99 +9,102 @@ that can also be used transparently by emulating abstract GPIO API.
|
||||||
# Configuration
|
# Configuration
|
||||||
Setting up GPIO is quite complex. The interface is divided into several layers for flexibility. All configuration is performed using a file `/etc/kvmd/override.yaml` which has the [YAML syntax](https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html). We will look at each part of the configuration separately in a small test example.
|
Setting up GPIO is quite complex. The interface is divided into several layers for flexibility. All configuration is performed using a file `/etc/kvmd/override.yaml` which has the [YAML syntax](https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html). We will look at each part of the configuration separately in a small test example.
|
||||||
|
|
||||||
* **Drivers** is the first layer that reflects the hardware that represents the IO ports (standard GPIO of Raspberry Pi, USB relay, and so on). Each driver has a type (a plugin that implements the hardware support) and an unique name. Multiple drivers of the same type can be defined at the same time.
|
### Drivers
|
||||||
|
The first layer that reflects the hardware that represents the IO ports (standard GPIO of Raspberry Pi, USB relay, and so on). Each driver has a type (a plugin that implements the hardware support) and an unique name. Multiple drivers of the same type can be defined at the same time.
|
||||||
|
|
||||||
For example, you can connect multiple relays and give each one its own name. By default, one driver is configured with the name `__gpio__`, representing the physical GPIO interface of the Raspberry Pi.
|
For example, you can connect multiple relays and give each one its own name. By default, one driver is configured with the name `__gpio__`, representing the physical GPIO interface of the Raspberry Pi.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
kvmd:
|
kvmd:
|
||||||
gpio:
|
gpio:
|
||||||
drivers:
|
drivers:
|
||||||
# This example shows how the __gpio__ driver is defined. You don't need to write it in your configuration.
|
# This example shows how the __gpio__ driver is defined. You don't need to write it in your configuration.
|
||||||
__gpio__: # Names that start and end with two underscores are reserved. You don't have to define similar names yourself.
|
__gpio__: # Names that start and end with two underscores are reserved. You don't have to define similar names yourself.
|
||||||
type: gpio
|
type: gpio
|
||||||
state_poll: 0.1
|
state_poll: 0.1
|
||||||
|
|
||||||
# You can define another gpio driver with a different polling interval
|
# You can define another gpio driver with a different polling interval
|
||||||
my_gpio:
|
my_gpio:
|
||||||
type: gpio
|
type: gpio
|
||||||
state_poll: 1.5
|
state_poll: 1.5
|
||||||
|
|
||||||
# We have HID relay connected to Pi-KVM
|
# We have HID relay connected to Pi-KVM
|
||||||
relay:
|
relay:
|
||||||
type: hidrelay
|
type: hidrelay
|
||||||
device: /dev/hidraw0
|
device: /dev/hidraw0
|
||||||
```
|
```
|
||||||
|
|
||||||
* **Scheme** is the second layer that reflects how the various driver ports are configured. Each port has a unique name, mode (`input` or `output`), a pin number, and refers to the driver that provides it.
|
### Scheme
|
||||||
|
The second layer that reflects how the various driver ports are configured. Each port has a unique name, mode (`input` or `output`), a pin number, and refers to the driver that provides it.
|
||||||
|
|
||||||
Two interaction modes are available for outputs: `pulse` and `switch`. In pulse mode, the output quickly switches its state to logical 1 and back (just like a button). In switch mode, it saves the state that the user set. When KVMD starts and finishes, all output ports are reset to 0. This can be avoided using the `initial` parameter.
|
Two interaction modes are available for outputs: `pulse` and `switch`. In pulse mode, the output quickly switches its state to logical 1 and back (just like a button). In switch mode, it saves the state that the user set. When KVMD starts and finishes, all output ports are reset to 0. This can be avoided using the `initial` parameter.
|
||||||
|
|
||||||
If no driver is specified for the port in the scheme, `__gpio__` will be used as default.
|
If no driver is specified for the port in the scheme, `__gpio__` will be used as default.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
kvmd:
|
kvmd:
|
||||||
gpio:
|
gpio:
|
||||||
scheme:
|
scheme:
|
||||||
# A certain device sends signals to the RPi and we want the Pi-KVM to display this as an led
|
# A certain device sends signals to the RPi and we want the Pi-KVM to display this as an led
|
||||||
led1:
|
led1:
|
||||||
pin: 19
|
pin: 19
|
||||||
mode: input
|
mode: input
|
||||||
led2:
|
led2:
|
||||||
pin: 16
|
pin: 16
|
||||||
mode: input
|
mode: input
|
||||||
|
|
||||||
# Two outputs of RPi's GPIO
|
# Two outputs of RPi's GPIO
|
||||||
button1:
|
button1:
|
||||||
pin: 26
|
pin: 26
|
||||||
mode: output
|
mode: output
|
||||||
switch: false # Disable switching, only pulse available
|
switch: false # Disable switching, only pulse available
|
||||||
button2:
|
button2:
|
||||||
pin: 20
|
pin: 20
|
||||||
mode: output
|
mode: output
|
||||||
switch: false
|
switch: false
|
||||||
|
|
||||||
relay1: # Channel 1 of the relay /dev/hidraw0
|
relay1: # Channel 1 of the relay /dev/hidraw0
|
||||||
pin: 0 # Numerating starts from 0
|
pin: 0 # Numerating starts from 0
|
||||||
mode: output # Relays can't be inputs
|
mode: output # Relays can't be inputs
|
||||||
initial: null # Don't reset the state to 0 when initializing and terminating KVMD
|
initial: null # Don't reset the state to 0 when initializing and terminating KVMD
|
||||||
relay2: # Channel 2
|
relay2: # Channel 2
|
||||||
pin: 1
|
pin: 1
|
||||||
mode: output
|
mode: output
|
||||||
initial: null
|
initial: null
|
||||||
pulse:
|
pulse:
|
||||||
delay: 2 # Default pulse value
|
delay: 2 # Default pulse value
|
||||||
max_delay: 2 # The pulse interval can be between min_pulse (0.1 by default) and max_pulse=5
|
max_delay: 2 # The pulse interval can be between min_pulse (0.1 by default) and max_pulse=5
|
||||||
```
|
```
|
||||||
|
|
||||||
* **View** is the visualization layer of the scheme. It describes what the menu with GPIO functions will look like. It is easier to show by example.
|
### View
|
||||||
|
This is the last layer of the scheme. It describes what the menu with GPIO functions will look like. It is easier to show by example.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
kvmd:
|
kvmd:
|
||||||
gpio:
|
gpio:
|
||||||
view:
|
view:
|
||||||
header:
|
header:
|
||||||
title: Switches # Menu title
|
title: Switches # Menu title
|
||||||
table: # The menu items are rendered in the form of a table of text labels and controls
|
table: # The menu items are rendered in the form of a table of text labels and controls
|
||||||
- ["#Generic GPIO leds"] # Text starting with the sharp symbol will be a label
|
- ["#Generic GPIO leds"] # Text starting with the sharp symbol will be a label
|
||||||
- [] # Horizontal separator and start of a new table
|
- [] # Horizontal separator and start of a new table
|
||||||
- ["#Test 1:", led1, button1] # Text label, one input, one button with text "Click"
|
- ["#Test 1:", led1, button1] # Text label, one input, one button with text "Click"
|
||||||
- ["#Test 2:", led2, button2]
|
- ["#Test 2:", led2, button2]
|
||||||
- []
|
- []
|
||||||
- ["#HID Relays /dev/hidraw0"]
|
- ["#HID Relays /dev/hidraw0"]
|
||||||
- []
|
- []
|
||||||
- ["#Relay #1:", "relay1,Boop 0.1"] # Text label and button with alternative text
|
- ["#Relay #1:", "relay1,Boop 0.1"] # Text label and button with alternative text
|
||||||
- ["#Relay #2:", "relay2,Boop 2.0"]
|
- ["#Relay #2:", "relay2,Boop 2.0"]
|
||||||
```
|
```
|
||||||
|
|
||||||
This will be rendered as:
|
This will be rendered as:
|
||||||
|
|
||||||
<img src="../img/gpio_menu.png" alt="drawing" />
|
<img src="../img/gpio_menu.png" alt="drawing" />
|
||||||
|
|
||||||
Here the rules:
|
Here the rules:
|
||||||
- Text starting with the `#` symbol will be a label.
|
- Text starting with the `#` symbol will be a label.
|
||||||
- To place a port in a cell, just put its name from the scheme.
|
- To place a port in a cell, just put its name from the scheme.
|
||||||
- The inputs are displayed as round LEDs.
|
- The inputs are displayed as round LEDs.
|
||||||
- The outputs are displayed as a switch AND a button.
|
- The outputs are displayed as a switch AND a button.
|
||||||
- If the switch mode is disabled, only a button will be displayed. If pulse is disabled, only a switch will be shown.
|
- If the switch mode is disabled, only a button will be displayed. If pulse is disabled, only a switch will be shown.
|
||||||
- To rename the output button, write some its identifier using comma like `"relay1,My cool relay"`.
|
- To rename the output button, write some its identifier using comma like `"relay1,My cool relay"`.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue