From 65c27b760bcebc74786e7422ba65f6d628a7c156 Mon Sep 17 00:00:00 2001 From: Martin Dagarin Date: Mon, 7 Jun 2021 20:57:08 +0200 Subject: [PATCH] [gpio] Added parameter for pull up/down resistor and other improvements (#10782) --- bundles/org.openhab.binding.gpio/README.md | 7 +++++-- .../configuration/GPIOInputConfiguration.java | 6 ++++++ .../internal/handler/PigpioDigitalInputHandler.java | 4 +++- .../internal/handler/PigpioDigitalOutputHandler.java | 2 +- .../src/main/resources/OH-INF/thing/pigpio-remote.xml | 11 +++++++++++ 5 files changed, 26 insertions(+), 4 deletions(-) diff --git a/bundles/org.openhab.binding.gpio/README.md b/bundles/org.openhab.binding.gpio/README.md index 622cf483582bd..84020f5938c79 100644 --- a/bundles/org.openhab.binding.gpio/README.md +++ b/bundles/org.openhab.binding.gpio/README.md @@ -34,7 +34,7 @@ sudo nano /etc/systemd/system/pigpiod.service.d/public.conf ``` sudo systemctl daemon-reload ``` -Now that Remote GPIO is enabled, get the daemon going: +Now that Remote GPIO is enabled, get the daemon going (even if installed with apt-get): ``` sudo systemctl enable pigpiod sudo systemctl start pigpiod @@ -42,6 +42,8 @@ sudo systemctl start pigpiod In openHAB, set `host` to the address of the pi and the `port` to the port of pigpio (default: 8888). +Note: If you are running Pigpio on same host as openHAB, then set host to **::1**. + ## Channels ### Pigpio Remote @@ -56,6 +58,7 @@ In openHAB, set `host` to the address of the pi and the `port` to the port of pi Set the number of the pin in `gpioId`. If you want to invert the value, set `invert` to true. To prevent incorrect change events, you can adjust the `debouncingTime`. +Using `pullupdown` you can enable pull up or pull down resistor (0 = Off, 1 = Pull Down, 2 = Pull Up). ### GPIO digital output channel @@ -78,7 +81,7 @@ Thing gpio:pigpio-remote:sample-pi-1 "Sample-Pi 1" [host="192.168.2.36", port=88 Thing gpio:pigpio-remote:sample-pi-2 "Sample-Pi 2" [host="192.168.2.37", port=8888] { Channels: Type pigpio-digital-input : sample-input-3 [ gpioId=16, debouncingTime=20] - Type pigpio-digital-input : sample-input-4 [ gpioId=17, invert=true, debouncingTime=5] + Type pigpio-digital-input : sample-input-4 [ gpioId=17, invert=true, debouncingTime=5, pullupdown=2] Type pigpio-digital-output : sample-output-2 [ gpioId=4, invert=true] } ``` diff --git a/bundles/org.openhab.binding.gpio/src/main/java/org/openhab/binding/gpio/internal/configuration/GPIOInputConfiguration.java b/bundles/org.openhab.binding.gpio/src/main/java/org/openhab/binding/gpio/internal/configuration/GPIOInputConfiguration.java index ef1a91153811c..4abad17bd41b2 100644 --- a/bundles/org.openhab.binding.gpio/src/main/java/org/openhab/binding/gpio/internal/configuration/GPIOInputConfiguration.java +++ b/bundles/org.openhab.binding.gpio/src/main/java/org/openhab/binding/gpio/internal/configuration/GPIOInputConfiguration.java @@ -25,4 +25,10 @@ public class GPIOInputConfiguration extends GPIOConfiguration { * Time in ms to double check if value hasn't changed */ public int debouncingTime = 10; + + /** + * Setup a pullup resistor on the GPIO pin + * 0 = PI_PUD_OFF, 1 = PI_PUD_DOWN, 2 = PI_PUD_UP + */ + public int pullupdown = 0; } diff --git a/bundles/org.openhab.binding.gpio/src/main/java/org/openhab/binding/gpio/internal/handler/PigpioDigitalInputHandler.java b/bundles/org.openhab.binding.gpio/src/main/java/org/openhab/binding/gpio/internal/handler/PigpioDigitalInputHandler.java index 06abc8fbabb0a..dfd8dfa7200f3 100644 --- a/bundles/org.openhab.binding.gpio/src/main/java/org/openhab/binding/gpio/internal/handler/PigpioDigitalInputHandler.java +++ b/bundles/org.openhab.binding.gpio/src/main/java/org/openhab/binding/gpio/internal/handler/PigpioDigitalInputHandler.java @@ -56,12 +56,14 @@ public PigpioDigitalInputHandler(GPIOInputConfiguration configuration, JPigpio j if (gpioId == null) { throw new NoGpioIdException(); } - gpio = new GPIO(jPigpio, gpioId, 1); + gpio = new GPIO(jPigpio, gpioId, JPigpio.PI_INPUT); jPigpio.gpioSetAlertFunc(gpio.getPin(), (gpio, level, tick) -> { lastChanged = new Date(); Date thisChange = new Date(); scheduler.schedule(() -> afterDebounce(thisChange), configuration.debouncingTime, TimeUnit.MILLISECONDS); }); + Integer pullupdown = configuration.pullupdown; + jPigpio.gpioSetPullUpDown(gpio.getPin(), pullupdown); } private void afterDebounce(Date thisChange) { diff --git a/bundles/org.openhab.binding.gpio/src/main/java/org/openhab/binding/gpio/internal/handler/PigpioDigitalOutputHandler.java b/bundles/org.openhab.binding.gpio/src/main/java/org/openhab/binding/gpio/internal/handler/PigpioDigitalOutputHandler.java index d0ef7993c35fd..97c5d3d1e8708 100644 --- a/bundles/org.openhab.binding.gpio/src/main/java/org/openhab/binding/gpio/internal/handler/PigpioDigitalOutputHandler.java +++ b/bundles/org.openhab.binding.gpio/src/main/java/org/openhab/binding/gpio/internal/handler/PigpioDigitalOutputHandler.java @@ -62,7 +62,7 @@ public PigpioDigitalOutputHandler(GPIOOutputConfiguration configuration, JPigpio if (gpioId == null) { throw new NoGpioIdException(); } - this.gpio = new GPIO(jPigpio, gpioId, 0); + this.gpio = new GPIO(jPigpio, gpioId, JPigpio.PI_OUTPUT); } @Override diff --git a/bundles/org.openhab.binding.gpio/src/main/resources/OH-INF/thing/pigpio-remote.xml b/bundles/org.openhab.binding.gpio/src/main/resources/OH-INF/thing/pigpio-remote.xml index 3dbda62f10642..402082225c3a1 100644 --- a/bundles/org.openhab.binding.gpio/src/main/resources/OH-INF/thing/pigpio-remote.xml +++ b/bundles/org.openhab.binding.gpio/src/main/resources/OH-INF/thing/pigpio-remote.xml @@ -50,6 +50,17 @@ 10 true + + + Configure Pull Up/Down Resistor of GPIO pin + + + + + + true + 0 +