Estamos usando una computadora integrada que ejecuta Xubuntu 16.04 llamada AEC-6612 Rev. B. Esta computadora es capaz de entrada / salida digital usando sus pines DIO. Hemos estado utilizando los siguientes scripts para configurar la configuración de GPIO y obtener el valor actual (0 o 1) del pin o escribir un valor al pin. Estamos utilizando shell para nuestro script que está debajo y Python para nuestras funciones para llamar al script de shell.
show_usage()
{
printf "\ngpio.sh <gpio pin number> [in|out [<value>]]\n"
}
if [ \( $# -eq 0 \) -o \( $# -gt 3 \) ] ; then
show_usage
printf "\n\nERROR: incorrect number of parameters\n"
sudo echo $1 > /sys/class/gpio/unexport
exit 255
fi
#doesn't hurt to export a gpio more than once
sudo echo $1 > /sys/class/gpio/export
if [ \( "$2" != "in" \) -a \( "$2" != "out" \) ] ; then
show_usage
printf "\n\nERROR: second parameter must be 'in' or 'out'\n"
sudo echo $1 > /sys/class/gpio/unexport
exit 255
fi
sudo echo $2 > /sys/class/gpio/gpio$1/direction
VAL=$3
if [ "$VAL" != "0" ] ; then
VAL=1
fi
#echo ${VAL} > /sys/class/gpio/gpio$1/value
if [ "$2" = "in" ] ; then
sudo cat /sys/class/gpio/gpio$1/value
fi
if [ "$2" = "out" ] ; then
#sudo cat /sys/class/gpio/gpio$1/value
sudo echo $3 > /sys/class/gpio/gpio$1/value
fi
sudo echo $1 > /sys/class/gpio/unexport
exit 0
Para usar este script, hemos usado la siguiente función para establecer un valor para el pin. Esta función llama al script que se encuentra en la ruta que se muestra en el comando subprocess.Popen. Cuando se configura un valor, se pasan tres parámetros en el siguiente orden: número de pin, dirección de gpio, valor de pin. La dirección GPIO siempre está fuera cuando estamos configurando pines.
def set_pin(pin1, value):
subprocess.Popen('sudo /home/capstone/doradointegration/sw/python/function/start/gpiotest.sh %s out %s'%(pin1, value), shell=True)
Para obtener el valor actual de un pin, usamos la siguiente función. En este caso solo tenemos dos parámetros porque no necesitamos enviar un valor. Se está leyendo y devolviendo un valor. En este caso, la dirección siempre está en.
def get_pin(pin2):
output = subprocess.Popen('sudo /home/capstone/doradointegration/sw/python/function/start/gpiotest.sh %s in'%(pin2), shell=True, stdout=subprocess.PIPE).communicate()[0]
return output
Hemos logrado exportar y exportar con éxito los archivos pin de gpio en / sys / class / gpio /
En este directorio hemos encontrado la carpeta GPIOChip462 que nos indicó que el número de pin que estamos utilizando debe ser 462+ "número de pin"
La exportación de los archivos pin de gpio nos ayudó a descubrir la adición de 462 que terminamos haciendo porque todos los pines gpio exportados con éxito estaban en el rango entre 462 y 510.
Hemos intentado escribir y leer pines sin éxito. Estamos utilizando un multímetro para leer los pines y escribir todos los pines ha dado lugar a ningún cambio en las lecturas del multímetro.
Esperamos que alguien con más experiencia en Linux incrustado pueda orientarnos en la dirección correcta.
Hemos recibido un diagrama de asignación de pines del fabricante. Los pines que pretendemos utilizar están etiquetados DIO_P0 a DIO_P7. Este diagrama se adjunta a continuación.
Si necesita más información, no dude en preguntar.
Gracias.