Archivo de categoría Sin categoría

PorLeón Ramos

Leer un Switch desde la Cubieboard

¡Saludos, comunidad de creadores digitales! En nuestra aventura continua por el cruce entre la programación y la electrónica, hoy vamos a profundizar en cómo utilizar la biblioteca gpiod en Python para interactuar con un switch de dos polos conectado a una Cubieboard A10, implementando una resistencia pull-up. Este tutorial está diseñado para aquellos de ustedes interesados en fusionar el poder del hardware y el software para dar vida a sus ideas electrónicas.

Lo Que Necesitas

Antes de adentrarnos en la mecánica del código, asegúrate de tener a mano:

  • Una Cubieboard A10.
  • Un switch de dos polos.
  • Cables de conexión.
  • Una resistencia pull-up (sugerimos 10KΩ).
  • Python y la biblioteca gpiod instalados en tu Cubieboard.

Preparación del Entorno

Si aún no tienes la biblioteca gpiod, instálala ejecutando el siguiente comando en tu terminal:

pip install gpiod

Esta biblioteca facilita la interacción con los pines GPIO de la Cubieboard A10 de forma eficiente.

Esquema de Conexión: Switch de Dos Polos con Pull-Up

Para garantizar una lectura precisa del estado del switch sin interferencias del ruido eléctrico, utilizaremos una resistencia pull-up. A continuación, te presento el esquema de cómo conectar el switch de dos polos con la resistencia pull-up al pin GPIO 11 (CSI1-D0, línea 196) de tu Cubieboard A10:

 

Este esquema muestra el correcto cableado, incluyendo la resistencia pull-up conectada entre el switch y la fuente de voltaje positivo (VCC), además de la conexión a tierra (GND) desde el switch. Es una configuración ideal para evitar lecturas falsas por el ruido.

 

Script de Python para Leer el Estado del Switch

Ahora que tenemos todo conectado correctamente, veamos cómo leer el estado del switch mediante Python y gpiod:

import gpiod
import time

CHIP_NAME = 'gpiochip0'
PIN_NUMBER = 196

chip = gpiod.Chip(CHIP_NAME)

line = chip.get_line(PIN_NUMBER)
line.request(consumer='read_switch', type=gpiod.LINE_REQ_DIR_IN)

print("Iniciando monitoreo del switch. Presiona CTRL+C para terminar.")

try:
   while True:
      state = line.get_value()
      if state == 1:
         print("Switch abierto (OFF)")
      else:
         print("Switch cerrado (ON)")
      time.sleep(0.5)

except KeyboardInterrupt:
   print("Finalizando monitoreo del switch.")

line.release()

Desglose del Código

El script inicia importando los módulos necesarios y estableciendo el chip GPIO y el número de pin. Accedemos al pin deseado como entrada y entramos en un bucle para leer constantemente el estado del switch, indicando si está abierto o cerrado.

Conclusión

Integrar componentes de hardware como un switch de dos polos con tu Cubieboard A10 abre un mundo de posibilidades para tus proyectos. Este tutorial te brinda los conocimientos básicos para empezar, desde la configuración física hasta la interacción a través de Python.

Nos encantaría ver qué proyectos increíbles puedes crear a partir de este conocimiento. ¡Comparte tus experiencias y aprendizajes con la comunidad!

PorLeón Ramos

Wrapper: Ejecutar un script desde un servidor web en una cubieboard

¡Hola!

En esta ocasión vamos a realizar un wrapper o un script para realizar algunas acciones desde una página web en nuestra cubieboard A10.

IMPORTANTE: Cabe resaltar que esta práctica es altamente insegura y deberán de colocarse controles adicionales como contraseñas o manejo de usuarios para evitar problemas futuros.

Instalar dependencias

  • Lo primero que hay que realizar es asegurarse de que tenemos el servidor web apache instalado:
sudo apt-get install apache2 php

¿Funciona apache?

  • Ahora probaremos que está funcionando, conéctate a la misma red de tu cubieboard y revisa cuál es su dirección ip.
ip a
  • Abre un navegador y deberás ver una página de inicio como la siguiente

 

El script bash

  • Crearemos un script sencillo para probar la ejecución en la carpeta /var/www/html/scripts
sudo mkdir -p /var/www/html/scripts

cd /var/www/html/scripts/

nano script1.sh

El contenido del script será el siguiente:

#!/bin/bash

usuario=$(whoami)
echo "Este es un script BASH!!!! ejecutado por $usuario"

Recuerda darle premisos de ejecución:

sudo chmod 755 script1.sh

La página html

  • Ahora generaremos una página web con un botón en el archivo boton.html
cd /var/www/html

nano boton.html

El contenido del archivo es este:

<!DOCTYPE html>
<html lang="es">
  <head>
  <meta charset="UTF-8">
    <title>Botón para invocar un script Bash</title>
    <script>
      function ejecutarScript() {
        // Realiza una solicitud HTTP POST a un script PHP que ejecutará el script Bash
        console.log("Invocando PHP de fondo");
        var xhr = new XMLHttpRequest();
        xhr.open("POST", "ejecutar_script.php", true);
        xhr.send();
      }
    </script>
  </head>
  <body>
    <h1>Botón para invocar un script Bash</h1>
    <form action="ejecutar_script.php" method="post">
      <input type="submit" value="Ejecutar script redirigiendo"/>
    </form>
    <form action="ejecutar_script_sudo.php" method="post">
      <input type="submit" value="Ejecutar script redirigiendo y sudo"/> 
    </form>
    <button onclick="ejecutarScript()">Ejecutar Script SIN redirigir</button>
  </body>
</html>

El script php

  • Ahora crearemos un script ejecutar_script.php para que lance el script bash
nano ejecutar_script.php

el contenido del archivo es el siguiente:

<?php
// Ruta al script Bash
$scriptPath = "/var/www/html/scripts/script1.sh";

// Ejecuta el script Bash
$output = shell_exec("bash $scriptPath");

// Si deseas imprimir la salida del script Bash, puedes hacerlo aquí
echo "<pre>$output</pre>";
?>

El gemelo malvado

También haremos otro script muy parecido  ejecutar_script_sudo.php pero este lo usaremos para ejecutar el script con permisos de superusuario

nano ejecutar_script_sudo.php

el contenido del archivo es el siguiente:

<?php
// Ruta al script Bash
$scriptPath = "/var/www/html/scripts/script1.sh";

// Ejecuta el script Bash
$output = shell_exec("sudo bash $scriptPath");

// Si deseas imprimir la salida del script Bash, puedes hacerlo aquí
echo "<pre>$output</pre>";
?>

Primera prueba

  • Hasta el momento si abrimos el navegador y escribimos la dirección http://<ip_cubieboard>/boton.html vamos a  ver lo siguiente:

Si damos clic en el primer botón todo funcionará correctamente y nos aparecerá la siguiente leyenda:

Sin embargo, si usamos el segundo botón, que intenta ejecutar el script con permisos de superusuario, nos generará un error, es necesario agregar algo más para que los permisos de superusuario funcionen.

Si damos clic een el tercer botón, se lanzará el script pero de fondo y no sabemos si se ejecutó o no. Para esto abre la consola de desarrollador de tu navegador y al presionar le botón deberás ver una salida como esta:

Donde nos indica que el código javascript efectivamente lanzó la ejecución del script bash pero no vemos la salida en la pantalla.

Permisos de root

  • Para agregar los permisos de super usuario será necesario que escribamos realicemos el siguiente procedimiento:

Abrir la tabla de sudoers con el comando que valida la sintaxis:

sudo visudo

Agregar al final del archivo la siguiente línea:

www-data ALL=(ALL) NOPASSWD: /bin/bash /var/www/html/scripts/script1.sh

Guardar y salir del archivo. Si todo ha salido bien, ahora el segundo botón funcionará y el script bash se habrá ejecutado como root o superusuario.

Happy coding!

PorLeón Ramos

Adiós a los discos duros mecánicos dice Windows

Pues se ha filtrado desde el portal de Tom’s Hardware, que lo fabricantes de laptops o equipos nuevos han sido notificados o sugeridos por Microsoft que incorporen únicamente discos duros de estado sólido en lugar de los discos duros mecánicos tradicionales para que corra correctamente el sistema operativo.

La solicitud no oficial, que por cierto no aparece aún en la lista de requerimientos oficiales del sistema operativo Windows 11, está proyectada para ser efectiva para el 2023. Los fabricantes de hardware no tomaron de muy buena gana esta solicitud por dos cuestiones:

  1. Fallas en las cadenas de suministro
  2. Mayor costo para los segmentos de entrada

Fallas en las cadenas de suministro

Como todos saben, las condiciones actuales del mundo colocan a los fabricantes en un lugar muy incómodo para la fabricación de productos. ¿Han preguntado cuánto tiempo de espera hay en los automóviles nuevos? Es por ello que los fabricantes han solicitado una extensión en el tiempo límite o un periodo de gracia para la implementación de este requerimiento. Es posible que varios de ellos ya cuenten con stock de discos mecánicos que quieren colocar en el mercado y que no están dispuestos a simplemente descartar.

Mayor costo para los segmentos de entrada

Actualmente la proporción de costo de un disco de almacenamiento mecánico vs el costo de almacenamiento de estado sólido es de 1 a 3, es decir, el SSD cuesta tres veces más que un disco mecánico. Esto, para los segmentos altos de mercado no es importante, pero si es una diferencia sustancial para los segmentos de entrada.

¿Qué opinan? ¿Es una solicitud bien intencionada de Microsoft para mejorar la experiencia de usuario en los equipos? ¿Es el momento justo para ser rígidos en este requerimiento? ¿Ya te estás animando a instalar Linux en los equipos que todavía tienen discos mecánicos?

¡Escucho sus propuestas!

 
Foto de Vincent Botta en Unsplash