Conexiones y configuración del servidor.
Contenido:
- Introducción
- Componentes
- Esquema
- El circuito integrado SN74HC595N
- Conexiones del SN74HC595N
- Instalación de Apache
- Cambios en el directorio raíz de Apache
- Instalación de PHP
- Últimos cambios en el servidor
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:
Patilla | Conectado a… / Descripción |
1 (Q1) Salida | Al segundo led (rojo) |
2 (Q2) Salida | Al tercer led (amarillo) |
3 (Q3) Salida | Al cuarto led (verde) |
4 (Q4) Salida | Al quinto led (azul) |
5 (Q5) Salida | Al sexto led (rojo) |
6 (Q6) Salida | Al séptimo led (amarillo) |
7 (Q7) Salida | Al octavo led (verde) |
8 (GND) | Conectado a masa |
9 (Q7′) Salida | Permite conectar otro integrado en cascada. En este caso no lo vamos a usar. |
10 (MR) Master reset | Conectado a 5V Permite resetear los valores almacenados al recibir un valor bajo. Lo mantenemos en alto para que no actue. |
11 (SH) Clock | Pin 15 de la GPIO |
12 (ST) Latch | Pin 13 de la GPIO |
13 (OE) Output enabled | Permite 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) Salida | Al 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í.