Inicio Noticias Raspberry Pi IoT en C: el controlador GPIO de Linux

Raspberry Pi IoT en C: el controlador GPIO de Linux

Índice de artículos Raspberry Pi IoT en C: el controlador GPIO de Linux El dispositivo de caracteres GPIO

Página 1 de 2

Si conoce Sysfs, es posible que se haya perdido que el enfoque de Sysfs para GPIO está obsoleto, entonces, ¿cómo debería hacerlo? Este es un extracto de la última publicación. Raspberry Pi IoT en C, segunda edición.

Raspberry Pi e IoT en C Segunda edición

Por Harry Fairhead

Compra en Amazon.

Contenido

¿Por qué Pi para IoT?

Empezar

Comience con GPIO

Salida simple

Un poco de electrónica

Entrada simple

Modulación de ancho de pulso: servos y más

Uso del bus I2C

El sensor DHT22 que implementa un protocolo personalizado

1 – Conceptos básicos del bus de cables

Usando iButtons

Sensor de temperatura DS18B20

El bus multipunto de 1 cable

Comience con el bus SPI

De A a D con el bus SPI

Conexión con la Web – Socket

GPIO mapeado en memoria

Linux casi en tiempo real

Apéndice I Interfaz GPIO de Sysfs

GPIO al estilo Linux

Hasta hace poco, la forma estándar de trabajar con GPIO en Linux era usar la interfaz sysfs y verá muchos artículos que respaldan su uso y encontrará muchos programas que lo utilizan. Sysfs quedó obsoleto en Linux 4.8 a finales de 2016 y se espera que se elimine del kernel en 2020. Por supuesto, las distribuciones de Linux toman tiempo para usar los últimos kernels. En el momento de escribir este artículo, Pi OS, anteriormente Raspbian, usa Linux 4.19 lanzado dos años antes. Sin embargo, pronto se eliminará Sysfs gpio y, aunque todavía necesita saberlo para hacer frente al software heredado, no debe usarlo para nuevos proyectos. Puede averiguar cómo funciona en el Apéndice I.

Su reemplazo es el dispositivo de caracteres GPIO, y aunque superficialmente se parece a la antigua interfaz sysfs, tiene muchas diferencias importantes. Si bien tiene algunas ventajas, también es un poco más complejo y ya no se puede usar desde la línea de comandos: es una interfaz de solo programa. Dicho esto, existen algunas utilidades simples que son bastante estándar y permiten el control GPIO desde la línea de comandos. Estos se tratan en la primera parte del capítulo, aunque es poco probable que sean la forma principal de trabajar con la nueva interfaz. También hay una biblioteca contenedora llamada gpiod que no es necesaria para un acceso simple a las líneas GPIO. Si desea saber más, consulte: Raspberry Pi IOT en C con controlador de Linux, ISBN: 9781871962642

¿Por qué integrar GPIO con Linux?

Podría preguntar, dado que tenemos la biblioteca BCM 2835, ¿por qué molestarse con un enfoque basado en Linux? La respuesta es que el controlador de fuentes GPIO está estandarizado en Linux. Es decir, su programa debería funcionar quizás con pequeños ajustes si lo mueve de una Raspberry Pi a otra máquina con hardware GPIO. Además, acceder al controlador GPIO no requiere permisos especiales y no se requiere acceso directo a la memoria. También es una forma muy fácil de usar eventos de E / S desde el espacio del usuario, lo que a veces lo hace útil en combinación con la biblioteca BCM 2835.

Un principio clave de Linux es que todo es un archivo o una carpeta. En la medida de lo posible, Linux se ocupa del hardware externo tratándolo como si fuera un sistema de archivos. Esto es razonable porque el hardware externo quiere recibir datos como comandos o algo para almacenar o mostrar o enviar datos como respuestas o entrada del usuario. Entonces, la mayoría del hardware interactúa con Linux como fuente o pozo de datos y eso es exactamente de lo que se trata un archivo.

Este enfoque de «todo es un archivo» solo falla realmente cuando entran en juego problemas de rendimiento. Acceder a una pieza de hardware como si fuera un archivo cuando no lo es puede resultar lento. En uso normal, el acceso directo a la memoria es mucho más rápido y de eso se trata la biblioteca BCM 2835.

Por lo tanto, el acceso al hardware basado en archivos puede ser lento, pero tiene la gran ventaja de ser independiente del idioma. Cada idioma tiene la funcionalidad necesaria para abrir, leer / escribir y cerrar un archivo, así como la funcionalidad necesaria para trabajar con hardware a través del sistema de archivos.

También tiene la ventaja de ejecutar Linux en lugar de simplemente ignorarlo. El sistema conoce los archivos y sabe cómo trabajar con ellos. Esto le permite ofrecer funciones avanzadas como interrupciones a los usuarios de GPIO que se ajustan a la forma en que funcionan otras interrupciones de Linux, más de eso en el próximo capítulo.

Para ser claros, si desea usar interrupciones sin escribir sus propios módulos del kernel, entonces el controlador de caracteres GPIO es la única forma de hacerlo.

Puede parecer absurdo, especialmente si sabe cómo funciona el hardware subyacente, tratar una sola línea GPIO como si fuera un archivo, pero funciona. Los archivos son un tipo de datos fundamental en Linux, y una línea GPIO es algo desde lo que lee o escribe, como un archivo. Desde el punto de vista de Linux, tiene mucho sentido. El gran problema es que los detalles de cómo se representa el hardware como un sistema de archivos están mal documentados y hay que averiguarlo mediante conjeturas, ensayo y error, ingeniería inversa o leyendo el código que lo utiliza.

La forma original de trabajar con líneas GPIO como archivos era el sistema sysfs, que transformó cada línea y varios aspectos del uso del sistema GPIO en archivos y directorios. Ha trabajado con la lectura y escritura del hardware en archivos y puede hacerlo desde la línea de comandos usando cat y echo. Era simple, pero había restricciones y un diseño deficiente.

El reemplazo de sysfs todavía se basa en archivos, pero es un tipo de archivo ligeramente diferente. Los dispositivos como el teclado, el puerto serie, etc. son ejemplos de dispositivos de caracteres y se representan mediante archivos de caracteres. Un archivo genérico admite operaciones como la búsqueda que no tienen sentido para un archivo de caracteres: ¿qué significa rebobinar un puerto serie o un teclado? Los archivos de caracteres son simples, pero para permitir cierto control sobre los dispositivos que representan, necesitamos algo más que leer y escribir archivos. Esto se resuelve usando ioctl, abreviatura de «io-control», llamada al sistema. Esto es simple, pero nos aleja de la idea pura de que los dispositivos son archivos. Ahora son archivos con funciones de control especiales añadidas. Lo difícil es que cada dispositivo tiene su propio conjunto de comandos de control o «solicitudes». Esto hace que trabajar con el dispositivo de caracteres GPIO sea menos intuitivo. Se podría decir que sysfs era intuitivo pero defectuoso y el dispositivo de caracteres GPIO es opaco pero mejor diseñado.

Marc Gomez
Vine a por tabaco y ya me quedé aquí. Cuando no estoy en el sótano de Tecnopasion suelo pasear por las calles de Barcelona.
RELATED ARTICLES