I’ve ran into the following problem trying to use the RPi.GPIO edge detection functions with a BPi M2 Berry:
First, some informations of the OS:
root@BPI-A:/home/pi/RPi.GPIO_BP# lsb_release -a No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 8.0 (jessie) Release: 8.0 Codename: jessie root@BPI-A:/home/pi/RPi.GPIO_BP# uname -a Linux BPI-A 3.10.107-BPI-M2U-Kernel #1 SMP Thu Aug 24 08:01:24 CST 2017 armv7l GNU/Linux root@BPI-A:/home/pi/RPi.GPIO_BP#
The “gpio readall” read-outs all work for the pins i’ve tested: Pins 29 and 31 connected to display LEDs, and pins 33, 35, and 37 are connected with a button switch so that it is connected through a pull-up resistor to 3.3V when the button is not pressed, and ground when the button is pressed.
When I used RPi.GPIO 0.6.3 that was already installed on the BPi, reading from pins 33 and 35 works, with same output shown by “gpio readall”, but neither wait_for_edge nor add_event_detect are triggered by button presses. GPIO.output also works, the LED connected to the pin set to GPIO.HIGH lit up as expected.
When I used RPi.GPIO 0.5.8 from reading from pins 33 and 35 always show 1 even with button pressed, and still neither wait_for_edge nor add_event_detect are triggered by button presses. GPIO.output also does not work, the LED connected to the pin set to GPIO.HIGH did not lit up.
The functions wait_for_edge and add_event_detect both worked with another board, Raspberry Pi 3 Model B. Does the edge detection functions work with BPi M2 Berry?
Here is the test script for inputs I used: (Outputs I just used the python console)
#!/usr/bin/env python2.7 import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BOARD) GPIO.setup(33, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(35, GPIO.IN, pull_up_down=GPIO.PUD_UP) def falling_callback(channel): print "power edge detected." time.sleep(0.5) if GPIO.input(channel) == GPIO.LOW: print "Button was held down." else: print "Button was let go." return GPIO.add_event_detect(33, GPIO.FALLING, callback=falling_callback, bouncetime=100) try: while True: print "GPIO 33: ", GPIO.input(33) print "GPIO 35: ", GPIO.input(35) GPIO.wait_for_edge(35, GPIO.FALLING) print "red edge detected." time.sleep(1) print "Done sleeping." except KeyboardInterrupt: GPIO.cleanup()