LEDs remotos (1/3)

Conexiones y configuración del servidor.

Contenido:

Introducción

Esta es la primera entrada de una serie de tres en la que vamos a montar un pequeño servidor que controlará a unos leds. La secuencia para encender o apagar los leds se gestionará de manera remota con una aplicación web.

Vamos a usar:

Python (versión 3) para el control de los leds conectados a la GPIO.

Apache (versión 2) y PHP (versión 7) como tecnología back-end para ejecutar los scripts de Python.

Angular (versión 7) como tecnología Front-end para la aplicación para el control de los leds.

En esta primera entrada vamos a preparar la Raspberry Pi, que será a encargada de controlar los leds, con el servidor web, configuraciones y conexiones necesarias.

Componentes

  • Raspberry Pi
  • 8 leds (2 azul, 2 rojo, 2 amarillo, 2 verde)
  • 8 resistencias de 220 ohms
  • 1 Circuito integrado SN74HC595N
  • Protoboard y cables

Esquema (Fritzing)

El circuito integrado SN74HC595N

El circuito integrado SN74HC595N es un cambiador de registro, o shift register. Admite la entrada de datos en series y los devuelve a una salida paralela, en 8 pins. Para manejar un SN74HC595N sólo hacen falta tres pines de la GPIO y podemos controlar múltiples leds, ya que, además, se pueden conectar varios SM74HC595N en cascada.

La funcionalidad de cada pin es la siguiente:

  • Data: se usa para la entrada de datos.
  • Clock: se usa para indicar cuando se ha de leer el valor recibido en el pin Data
  • Latch: se usa para memorizar y enviar los datos recibidos por el pin Data hacia la salida.

Conexiones del SN74HC595N

Las conexiones serán las siguientes:

PatillaConectado a… / Descripción
1 (Q1) SalidaAl segundo led (rojo)
2 (Q2) SalidaAl tercer led (amarillo)
3 (Q3) SalidaAl cuarto led (verde)
4 (Q4) SalidaAl quinto led (azul)
5 (Q5) SalidaAl sexto led (rojo)
6 (Q6) SalidaAl séptimo led (amarillo)
7 (Q7) SalidaAl octavo led (verde)
8 (GND)Conectado a masa
9 (Q7′) SalidaPermite conectar otro integrado en cascada.
En este caso no lo vamos a usar.
10 (MR) Master resetConectado a 5V
Permite resetear los valores almacenados al recibir un valor bajo. Lo mantenemos en alto para que no actue.
11 (SH) ClockPin 15 de la GPIO
12 (ST) LatchPin 13 de la GPIO
13 (OE) Output enabledPermite habilitar las salidas del integrado. Se activa al recibir un valor bajo. Lo conectamos a masa.
14 (DS) Data Pin 11 de la GPIO
15 (Q0) SalidaAl primer led (azul)
16 (VCC)Conectado a alimentación, 5V.

Instalación de Apache

Para instalar Apache usaremos apt-get. Primero se han de actualizar las listas de paquetes, mediante el comando:

sudo apt-get update

Una vez actualizadas las listas, ejecutamos el siguiente comando para instalar Apache:

sudo apt-get install apache2 -y

Para comprobar si se ha instalado correctamente, basta con acceder, usando un navegador, a http://localhost, desde la Raspberry, o, si lo hacemos desde otro dispositivo de la misma red, accediendo a http://[IP DE LA RASPBERRY]. Aparecerá la página por defecto:

Cambios en el directorio raíz de Apache

Para que el servidor no rechace las peticiones que se harán desde la aplicación de Angular, que se servirá desde su propio servidor, se han de habilitar las solicitudes de recursos de origen cruzado o CORS (https://es.wikipedia.org/wiki/Intercambio_de_recursos_de_origen_cruzado). Se puede hacer creando un fichero .htaccess en la raíz del sitio o editando el fichero /etc/apache2/sites-available/000-default.conf. Editamos el fichero fichero usando nano:

sudo nano /etc/apache2/sites-available/000-default.conf

Buscamos la línea donde se define DocumentRoot y, dentro de la configuración del directorio raíz añadimos lo siguiente:

Header add Access-Control-Allow-Origin "*"

El contenido del fichero quedaría así:

DocumentRoot /var/www/html
<Directory /var/www/html>
    Require all granted
    Header add Access-Control-Allow-Origin "*"
</Directory>

El siguiente cambio es opcional. Se trata de cambiar la ubicación del directorio donde se alojan los ficheros que se mostrarán cuando se haga un petición a Apache. Sin salir del fichero que estamos editando, modificamos la ruta de DocumentRoot por la del directorio que aloje los ficheros a servir. Por ejemplo:

DocumentRoot /home/usuario/servidorWeb
<Directory /home/usuario/servidorWeb>
    ...
</Directory>

Finalmente, se ha de reiniciar el servidor de Apache:

sudo service apache2 restart

Instalación de PHP

Para instalar PHP, volvemos a usar apt-get, esta vez con el siguiente comando:

sudo apt-get install php libapache2-mod-php -y

Reiniciamos el servidor de Apache y probamos la instalación de PHP creando un fichero index.php con la siguiente línea:

<?php phpinfo(); ?>

Si estamos usando el directorio raíz por defecto de Apache, se ha de renombrar o borrar el fichero index.html existente para que Apache no lo tenga en cuenta al hacer la petición desde el navegador. Al acceder debería mostrar la página de información de PHP.

Últimos cambios en el servidor

Por último, modificaremos los derechos del directorio donde se alojan los ficheros para dar derechos de lectura y ejecución para el propietario, grupo y otros, y de escritura para el propietario. También añadiremos al usuario www-data a los usuarios a sudoers, para que pueda ejecutar los scripts de Python.

Para cambiar los derechos del directorio usaremos el siguiente comando:

sudo chmod 755 [directorio]

Para añadir el usuario www-data a sudoers podemos usar la utilidad visudo. Ejecutamos:

sudo visudo

Se abrirá un editor de texto donde añadiremos lo siguiente:

www-data ALL=(ALL) NOPASSWD: ALL

Esta modificación permitirá al usuario www-data ejecutar los scripts de Python como sudo sin tener que introducir la contraseña. Pulsamos Ctrl+X y aceptamos los cambios para guardar.

La siguiente entrada de esta serie se puede consultar aquí y la tercera aquí.

Esta web utiliza cookies propias para su correcto funcionamiento. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Ver
Privacidad