Construyendo un servidor con Raspberry Pi 4

El día de hoy vamos a ver un ejemplo básico sobre la construcción de un servidor web en nuestra Raspberry Pi 4, el cual nos dará las bases para realizar el control de algún dispositivo que conectemos a nuestro mini ordenador, en este caso se usará un led de prueba pero es claro que podemos reemplazarlo por otro componente como un motor, un relevador entre otros. Como se menciona el ejemplo esta se llevará a cabo en Raspberry Pi 4, pero se puede implementar en cualquiera otra versión de Raspberry Pi, ya sea la 2, 3 o Zero W.

Material a utilizar

El material a utilizar en este ejemplo no es difícil de conseguir ya que es el utilizado por default para crear la mas básica de las aplicaciones, de hecho parte del material lo puedes encontrar en nuestra tienda virtual o incluso puede ser que ya se tenga en casa, el material seria el listado a continuación:

Tomando en cuenta este material procederemos a realizar nuestro servidor web, mencionando todas las tecnologías que utilizaremos para ello, además se asume que ya se cuenta con el sistema operativo instalado de no ser así los invitamos a ver el POST anterior donde explicamos cómo hacerlo.

¿Que es Node.js?

Se sabe que hay muchas tecnologías para implementar servidores web como Apache, IIS, Nginx, Flask, entre otras, pero nosotros construiremos el nuestro con Nodejs porque no requiere de configuraciones especiales para levantar los servicios que nos proporciona, y es fácil de instalar, pero ¿Qué es Nodejs?.

Nodejs: Es un entorno de programación en la capa del servidor basado en el lenguaje de programación Javascript con entradas y salidas de datos desde una arquitectura orientada a eventos.
En términos más simples, se pueden crear servidores web con Javascript sin depender de un navegador como chrome, mozilla o IE, además de ser código abierto.

Instalando Node.js en Raspberry Pi

1.- El procesador en Raspberry Pi es de arquitectura ARM, pero dependiendo del modelo puede ser ARMv7 o ARMv8. Estas 2 versiones de ARM son compatibles con Node.js. Así que para saber cual maneja nuestro mini ordenador abriremos la terminal y escribimos el siguiente comando:

uname -m

Si la respuesta es armv7, esta será la versión que necesitaremos descargar de la sección de descargas perteneciente a sitio oficial de node.js. En Raspberry Pi 4 nos aparece armv7 como se ve en la figura 1.

2.- Vamos a ir a la página de descarga de node.js, elegiremos la versión que nos corresponde (armv7) y daremos clic con el botón derecho del mouse para copiar dirección de enlace (figura 2).

3.- Después de eso en la terminal usaremos wget, para descargar el archivo tar.xz para esa versión. Simplemente escribiremos wget y pegaremos el enlace copiado antes asegurandonos de que la url este completa y con la terminación .tar.xz. para corregirla si es el caso y damos enter como podemos ver en la siguiente figura.

4.- Ya teniendo instalado los paquetes de node.js solamente daremos clic derecho sobre el mismo para extraer los archivos en la ubicación donde se descargo

5.- Abriremos de nuevo nuestra terminal si es que se cerró, y sino es así simplemente escribiremos “ls” (sin las comillas) para asegurarnos del nombre de la carpeta que se extrajo ya que será necesario para ejecutar los siguientes comandos e instalar nodejs

cd node-v12.13.1-linux-armv7l/ 
sudo cp -R * /usr/local/

Sabremos que todo se instaló de manera correcta si no aparecen errores y si al escribir en la terminal node -v y npm -v nos arroja su el número de la versión instalada así como se aprecia enseguida.

Levantando el servidor Node.js

Ahora que tenemos instalado todo lo necesario para generar un servidor web vamos a crear un primer código para verificar que si funciona de manera correcta, yo me crearé una carpeta que se llamará “nodejs” para no mezclar mis demás archivos con estos códigos de node.js, asi que no es necesario pero si recomendable como una buena practica.

Para hacer un programa que no sea Python en Raspberry Pi, podemos usar una herramienta que tenemos disponible de nombre “Geany” la cual se encuentra en el apartado de Programación.

Ya en Geany creamos un nuevo archivo que guardaremos con el nombre de app.js en nuestra carpeta nodejs, aunque también se pude optar por cualquier otro nombre, y escribimos el siguiente código:

De esta forma solo bastará con navegar a nuestra carpeta nodejs y escribimos el comando node app.js y enter, cabe mencionar que siempre que se desee ejecutar un programa de nodejs hay que anteponer la palabra node y el nombre del programa. Ahora abrimos el navegador Chronium de Raspberry Pi y escribimos la dirección especificada en el código http://127.0.0.1:3000/ y veremos algo como en la siguiente figura:

Control de los pines GPIO de Raspberry Pi con Nodejs

Después de este pequeño test vamos a encender y apagar un LED mediante unos botones que se desplegarán en una página web que también vamos a hacer con la ayuda de una librería para hacer sitios web llamada Bootstrap y que también es de código abierto.

Para ello crearemos dos archivos en nuestra carpeta de nodejs el primero sera le llamaré index.html y el segundo ServerLed.js o pueden colocar el nombre que deseen.
Empezaremos por la interfaz que verá el usuario es decir el archivo index.html el cual debería verse como en esta figura

El segundo archivo ServerLed.js será el de la siguiente imagen, solo recordemos que debe estar en la misma ubicación donde está el archivo index.hml

Nótese que el programa escrito para levantar el servidor (ServerLed.js) ya no es tan sencillo como el de hola mundo, sin embargo ya esta definida la estructura para escribir un pin en alto o bajo, en mi caso el GPIO17 pero puede agregar más pines u otro diferente, para este caso solo hay que agregar o cambiar los pines con una instrucciones como esta:

const led = new Gpio(17, {mode: Gpio.OUTPUT}); 

Donde led es una variable que almacenará básicamente el pin que elijamos que en mi caso fue el GPIO17 para la conexión del ánodo (+) del LED y cualquier GND para el cátodo (-) como vemos en la siguiente figura .

También podemos notar en el archivo index.html que los botones son los que realizan como tal la interacción con nuestro servidor web (ServerLed.js) mediante la funciones LEDon() y LEDoff() las cuales envían un 1 o un 0 respectivamente con una variable testigo entre los dos archivos que es “state” la cual comunica la interacción de los botones con el servidor el cual a su vez de la orden a Raspberry Pi de que pin colocar en 5V o 0V.

Antes de ejecutar el programa del servidor para ver como funciona tenemos que instalar una libreria de nodejs ya que se importan 3 librerias en nuestro codigo que son fs, http y GPIO, en donde las primeras dos son nativas de nodejs pero la tercera no y es por ello que tenemos que instalarla, por lo cual ejecutaremos los siguientes 3 comandos.

1. sudo apt-get update
2. sudo apt-get install pigpio

3. npm install pigpio

Al final de la instalacion veriamos algo como esto:

También veamos que en nuestra carpeta se han creado 2 archivos json y una carpeta que contendrá todos los módulos que estemos instalando en nuestros proyectos por ejemplo esta carpeta tendrá el modulo de pigpio, por lo que no debemos de borrarlos ya que esto podría provocar errores en nuestra aplicación.

Ahora simplemente para ver como funciona nuestro proyecto basta con abrir la terminal e ir a la ubicación de la carpeta /home/pi/nodejs para ejecutar el programa con privilegios de super usuario ya que trabajaremos con el hardware de la Raspberry Pi y es necesario tener estos permisos, para ello el comando seria sudo node ServerLed.js y enter.
Entonces abrimos el navegador de nuestra PC, Teléfono o de la misma Raspberry y tecleamos la IP de la Raspberry Pi + el puerto 8080 en mi caso tengo que abrir esta url http://192.168.12.28:8080/

Para saber la ip de su Raspberry Pi bastará con abrir otra terminal y escribir el comando ifconfig que nos regresa algunos datos de la red, pero el que nos interesa es la variable inet si conectamos la raspberry pi por ethernet o wlan0 si es de forma inalámbrica.

Finalmente podremos ver como enciente o apaga nuestro led si presionamos el botón Encender/Apagar, desde cualquier navegador que este dentro de nuestra red en el trabajo, escuela u hogar.

Con esto tenemos lo básico para poder hacer un servidor web que controle objetos de la casa como una lámpara, abrir o cerrar una puerta, encender el televisor o tener alertas si tocan el timbre, claro que hay que manejar otras funciones por esta razón les proporciono la documentación de la librería pigpio https://github.com/fivdi/pigpio para que logren hacer lo que necesiten, sin mas por ahora espero la entrada les de una idea para concretar algún proyecto y si tienen alguna duda no duden en comentarla, además proporciono mi e-mail por si requieren el código fuente o tienen dudas, ademas dejo los enlaces de nuestras redes sociales, hasta la próxima.

iot.aplicaciones@outlook.com
https://www.facebook.com/AGElectronicaMexico/
https://www.instagram.com/ag_electronica/?hl=es-la

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s