Inicio Noticias Pi IoT en C usando el controlador de Linux - controlador de...

Pi IoT en C usando el controlador de Linux – controlador de caracteres GPIO

Índice de artículos Pi IoT en C Uso de controladores de Linux – Ejemplo de controlador de caracteres GPIO Página 1 de 2 Los controladores de Linux facilitan el trabajo con dispositivos, suponiendo que sepa cómo hacerlo. El hardware más básico es GPIO y la forma de trabajar de sysfs ahora está obsoleta. Descubra cuál es la nueva forma de hacer las cosas. Este contenido proviene de mi libro recién publicado:

Raspberry Pi IoT en C usando controladores de Linux

Por Harry Fairhead
Compra en Amazon. Contenido Elección de un controlador de código Pi para IoT C y Visual Studio: un primer programa El controlador de caracteres GPIO
Extracto: Controlador de caracteres GPIO *** ¡¡¡NUEVO !!! GPIO Uso de eventos de GPIO de control de E / S La estructura de los dispositivos
Extracto: DHT22
Algunos dispositivos electrónicos con modulación de ancho de pulso Dispositivos SPI Conceptos básicos de I2C Controladores I2C de Linux Controladores de sensor I2C avanzados – Bus de 1 cable Linux IIO y Hwmon Más allá con controladores Apéndice I En cuanto a IoT, el controlador fundamental de Linux es el controlador GPIO, que le brinda acceso a líneas GPIO individuales. Este es otro controlador incorporado y, por lo tanto, es como el controlador LED presentado en el capítulo anterior, pero es un controlador de caracteres y se usa de una manera ligeramente diferente. En la mayoría de los casos, cuando un dispositivo está conectado a través de un conjunto de líneas GPIO, generalmente se usa un controlador de dispositivo específico. De esta manera, casi puede ignorar las líneas GPIO y lo que están haciendo. Sin embargo, todavía hay situaciones simples en las que un piloto completo sería excesivo. Si desea conectar un botón o LED, el control directo sobre las líneas GPIO es la forma más directa de hacer el trabajo incluso si tiene controladores LED de Linux (consulte el capítulo anterior) e incluso un controlador de entrada. Hasta hace poco, la forma estándar de trabajar con GPIO en Linux era utilizar la interfaz sysfs. Verá muchos artículos que promueven su uso y se encontrará con muchos programas que lo utilizan. Sin embargo, GPIO 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 tardan algún tiempo en utilizar los últimos kernels. En el momento de escribir este artículo, Pi OS ejecuta Linux 4.19, que se lanzó dos años antes. Sin embargo, pronto se eliminará el GPIO de sysfs y, aunque todavía es necesario conocerlo para hacer frente al software heredado, no debe utilizarlo para nuevos proyectos. Puede averiguar cómo funciona en el Apéndice I de Raspberry Pi IoT en C, segunda edición, ISBN: 9781871962635. 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. Aunque no es necesario para un acceso simple a las líneas GPIO, se describe en este capítulo.

Dispositivo de caracteres GPIO – GPIOD

El nuevo enfoque para trabajar con GPIO está preinstalado en la última versión de Pi OS, pero no es compatible con versiones anteriores. Si busca en el directorio / dev, encontrará los archivos correspondientes a cada controlador GPIO instalado. Verá al menos: / dev / gpiochip0 Esto representa el controlador GPIO principal y todas las líneas GPIO que proporciona. Si sabe cómo funciona sysfs, puede esperar instrucciones sobre cómo leer y escribir en el archivo desde la consola. En este caso, leer y escribir en el archivo no servirá de mucho, ya que la mayor parte del trabajo se realiza mediante la llamada al sistema de control de entrada / salida, ioctl (), que no se puede utilizar desde la línea de comandos. El uso de ioctl es típico de un controlador de fuentes, pero significa que el uso del controlador GPIO es muy diferente de los otros controladores orientados a archivos que se describen a continuación. El siguiente capítulo examina el uso de ioctl para controlar directamente el dispositivo de caracteres GPIO. Si desea explorar GPIO desde la línea de comandos, debe instalar algunas herramientas que se crearon principalmente como ejemplos del uso de la nueva interfaz del dispositivo. Para hacer esto, primero debe instalarlos y la biblioteca GPIOD que usará más adelante: sudo apt-get install gpiod libgpiod-dev libgpiod-doc Tenga en cuenta que si no desea usar la biblioteca para acceder al controlador, no debe ‘ No es necesario instalarlo: el controlador GPIO se carga como parte del kernel de Linux y está listo para usar. En el libro, pero no en este extracto.

Instalación de la biblioteca GPIOD

La biblioteca GPIOD se instala junto con las herramientas discutidas al principio de este capítulo, pero no necesita usarla si está satisfecho con las llamadas al sistema ioctl que se describen en el siguiente capítulo. La biblioteca se divide en dos partes, las funciones sin contexto y las funciones de nivel inferior, que se puede considerar que utilizan el contexto. En casi todos los casos, querrá utilizar las funciones de nivel inferior, ya que las funciones sin contexto tienen algunos inconvenientes graves. Echemos un vistazo a cada uno de ellos. Para usar la biblioteca necesitará, si aún no lo ha hecho, instálela: sudo apt-get install gpiod libgpiod-dev libgpiod-doc También debe agregar los encabezados: #define _GNU_SOURCE #include y deberá cargar un archivo de biblioteca. Si está utilizando VS Code, deberá editar settings.json para cargar el archivo: {“sshUser”: “pi”, “sshEndpoint”: “192.168.11.170”, “remoteDirectory”: “/ home / pi / Documents / $ {workspaceFolderBasename} “,” std “:” c99 “,” libs “:” – lgpiod “,” header “:” “} agregando” libs “:” – lgpiod “. Al editar el archivo settings.json en la carpeta de nivel superior, la configuración se aplicará a todas las subcarpetas. Si no desea que este sea el caso, debe buscar en los espacios de trabajo de VS Code, que le permiten configurar configuraciones individuales en cada carpeta. Si recibe algún mensaje de error en VS Code relacionado con el nuevo archivo de encabezado, puede ignorarlo o copiar los encabezados ARM a una subcarpeta usando la tarea copyARMheaders. Copie todos los encabezados estándar en una subcarpeta llamada incluir en la máquina local. Tenga en cuenta que esto solo es necesario para satisfacer la verificación de errores de la máquina local: el programa se ejecutará en la máquina remota sin ningún problema siempre que el encabezado esté disponible allí. Si desea hacer el mismo trabajo en la línea de comando, agregue la opción: -lgpiod

Funciones sin contexto

Todas las funciones sin contexto tienen ctxless en sus nombres y funcionan abriendo los archivos necesarios, ejecutando la operación y luego cerrándolos nuevamente. Esto significa que no tiene que realizar un seguimiento de qué archivos están abiertos y qué líneas GPIO están en uso, pero tiene los efectos generales y secundarios de abrir y cerrar archivos repetidamente. Hay dos funciones simples de obtención / configuración: gpiod_ctxless_get_value (“dispositivo”, desplazamiento, active_low,
“consumidor”); gpiod_ctxless_set_value (“dispositivo”, desplazamiento, valor,
active_low, “consumidor”, callback, param) donde dispositivo es el nombre, ruta, número o etiqueta del gpiochip, generalmente solo 0, y offset es el número GPIO de la línea que desea usar, el valor es 0 o 1 dependiendo sobre si desea que la línea GPIO se establezca en alta o baja y active_low establece el estado de la línea considerada activa. Si se establece en verdadero, 1 establece la línea baja y viceversa. Por lo general, desea establecerlo en 0 para que 1 lo establezca alto. Reemplace consumidor con el nombre del programa / usuario / entidad usando la línea GPIO. Los atributos callback y param trabajan juntos para definir una función callback y los parámetros que se le pasan. La función de devolución de llamada se llama inmediatamente antes de que se cierre la línea. La versión de obtención de la función devuelve el estado actual de la fila como 0 o 1 según el estado de la fila y la configuración de active_low.

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

Dejar respuesta

Please enter your comment!
Please enter your name here