Skip to content
View in the app

A better way to browse. Learn more.

Armbian Community Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

GPIO button press not working properly

Featured Replies

Hello, hope you can help me with my issue. I have an Orange Pi Zero+ with an H5 processor. My requirement is to detect when a button is pressed, my input port is PA1 or pin 11, my pin for 3.3V is 17, I'm using the pyA20 library, have also setup this project: https://github.com/herzig/orangepi_PC_gpio_pyH5. My code is based on the read_button example (https://github.com/herzig/orangepi_PC_gpio_pyH5/blob/master/examples/read_button.py#L46). Bellow I will show the code, but the main problem is that the gpio.input() method is usually returning 0 but every few seconds it returns 1, which is only supposed to happen when button is pressed. I'm a complete newbie in this world so excuse me if this is an easy thing to solve. For the record I have also tried with other libraries an none have worked for me. Thanks in advance.

Example code:

#!/usr/bin/env python
"""Read button.

Make gpio input and enable pull-up resistor.
"""

import os
import sys
import time

import logging


if not os.getegid() == 0:
    sys.exit('Script must be run as root')


from pyA20.gpio import gpio
from pyA20.gpio import connector
from pyA20.gpio import port

__author__ = "Stefan Mavrodiev"
__copyright__ = "Copyright 2014, Olimex LTD"
__credits__ = ["Stefan Mavrodiev"]
__license__ = "GPL"
__version__ = "2.0"
__maintainer__ = __author__
__email__ = "support@olimex.com"

button = port.PA1 #connector.gpio3p40

"""Init gpio module"""
gpio.init()

"""Set directions"""
gpio.setcfg(button, gpio.INPUT)

"""Enable pullup resistor"""
# gpio.pullup(button, gpio.PULLUP)
gpio.pullup(button, gpio.PULLDOWN)     # Optionally you can use pull-down resistor


try:
    while True:
        state = gpio.input(button)      # Read button state
        print (state)
        if state == 1:
            print("button pressed")
            logging.info("button pressed")
        time.sleep(0.2)

except KeyboardInterrupt:
    print ("Goodbye.")

 

58 minutes ago, ALYD said:

my input port is PA1 or pin 11, my pin for 3.3V is 17

Are you sure you are using the right pins ? Because PA1 is the UART RX ... Simply use another pin such PD11 ...

Also, you should normally use it with PULLUP option and bringing the button to GND and printing "pressed" when reading "0" detecting the pull down to GND.

 

  • Author

Hello @martinayo

Thanks for your reply, please according to the image that I'm attaching which is the pin you suggest I should use, because I can't identify the one you say in it.

Orange-Pi-Zero-pinout.jpg

  • Author

Ok, I am using an OPiZeroPlus, not a OpiZeroPlus2, right now I'm trying with PA10 as suggested by @martinayotte and Im also using the PULLUP option and bringing the button to GND, and printing when the value is 0, and the problem persists, it ocassionaly, without the button being put to GND it launches the 0 value. Any suggestions?

30 minutes ago, ALYD said:

Any suggestions?

Do you have long wires or short ones between the board and the button ? Make them shortest as possible ...

I've tested your script with the modification for PULLUP and state == 0 on my OPiZero (PA10) and on my OPiZeroPlus2 (PD14), and I don't have any issue ...

Guest
This topic is now closed to further replies.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.