Page 1 of 1

python Pin control for all io pins

Posted: Thu Sep 12, 2019 4:01 pm
by dareis
I've just got my NEO AIR and I'm trying to access io. I'm trying to use RPI.GPIO_NP But I can't interface with many of my pins. When I deep dive into WiringNP, only some of the I/O are addressed, others just have -1 on them. I can't figure out when they're functional, and when not. I bought the AIR expecting to use all pins.
look at the source here When I run

Code: Select all

gpio readall
on my NEO AIR and look at the characteristics of the headers, consider the usb/audio header (pic attached). all except 1 of the pins on this header have no mode, and do not work. So when I run the demo "" assigned to pin 32, which should be an i2c pin, one that I need for my project, python spits a value error that the channel is invalid for RPi. Fine. Then when I run assigned to phys pin 31, i same thing. This made me think it is an "off" problem. But when I run the script assigned to physical pin 16, also an 'off' pin, it works. This doesn't make sense. What am i doing wrong? I need help getting IO access to all of the pins, even ones that are not RPi standard ones.


Re: python Pin control for all io pins

Posted: Tue Sep 17, 2019 4:52 pm
by dareis
I'm still having trouble. I need to be able to use these pins: [3, 5, 11, 13, 15, 19, 21, 23, 22, 37, 38] when read under the "physical" numbering of the NEO Air.
Some of them work, but others are in alternative modes. For instance, pin 15, ostensibly in "OUT" mode, does not work.
How can i control whether pins are used in I/O, or some other mode like UART or I2C? I'm starting to get worried. Please help.

Here is my python script:

Code: Select all

import RPi.GPIO as GPIO
import argparse
import time

def blink(i,t=.1):
    GPIO.output(i, GPIO.HIGH) # Set HIGH
    time.sleep(t)             #Pause
    GPIO.output(i, GPIO.LOW)  # Set LOW
    time.sleep(t)             #Wait

if __name__ == '__main__':

    # parse command line
    parser = argparse.ArgumentParser(description='''
        This script takes a pin number and number of blinks''')
    parser.add_argument('-s','--scale', action="store_true", default=False,
                            help='''play a scale of IO pins in sequence''') 
    parser.add_argument('-p','--pin', action="store", type=int, default=5,
                            help='''pick the GPIO pin number for controlling''') 
    parser.add_argument('-b','--blink', action="store", type=int, default=5,
                          help='''how many times to blink''')                         
    args = parser.parse_args()
    # SETUP

    # Routine
    if args.scale:
        # run a scale on all of the important IO
        pins = [3, 5, 11, 13, 15, 19, 21, 23, 22, 37, 38]

        GPIO.setup(pins, GPIO.OUT)
        for j in pins:
            print("blink %d" % j)

        ## pick the blink params
            pin_num =     
        if args.blink:
            num_blink = args.blink
        print("pin %d in mode %d" % (pin_num, GPIO.gpio_function(pin_num)))
        GPIO.setup(pin_num, GPIO.OUT)
        print("pin %d in mode %d" % (pin_num, GPIO.gpio_function(pin_num)))
        ## run blink loop
        for i in range(0,num_blink):            #loop n times
            print("blink %d of %d times" % (i, num_blink))

        print("terminate in state: %d" % GPIO.LOW) 
        GPIO.output(pin_num, GPIO.LOW)


Re: python Pin control for all io pins

Posted: Wed Sep 18, 2019 3:54 pm
by dareis
I'm all confused. I'm a fairly new linux user, so maybe i'm missing something obvious, but I usually can follow online walk-through posts to solve environment setup type problems.
Anyways, after not getting anywhere with different libs i've found on github, I figure I need to go back to basics and get some CLI control working. In that effort I read different tutorials online which lead me to trying to use libgpiod. But i have trouble installing it. I end up needing the header file gpio.h. see for discussion. But now i've started to realize i'm not running armbian, i'm running debian. i'm attaching an image of various commands to learn about my distro/kernel/os. Basically I need to figure out how to get the gpio.h for my NEO air. This would be a complete mapping of the 40 or so available pins.
And in that line of thinking, maybe I need help modifying the WiringNP repo Like, somehow if I could expand the accessible pins in the headers of this repo I could get access to all the pins.

Can someone help?

Re: python Pin control for all io pins

Posted: Wed Sep 18, 2019 3:59 pm
by dareis
Or maybe I just need hardware level control of which pins can be accessed and controlled by RPi.GPIO_NP

Re: python Pin control for all io pins

Posted: Thu Sep 19, 2019 4:41 pm
by dareis

I ended up semi-bricking my Air trying to get some more controls. It gets stuck in the "starting kernel" state of uboot. I don't know what to do (help appreciated). but at least I have a backup neo air.

So I started again with a second neo air and this time I can GPIO control all of the pins!!! My guess is that I had a bad soldering on some of the suspect pins.

Hopefully others can benefit from my lesson.