Raspberry Pi
Tutorial de Raspberry Pi en español.
- Juan Antonio Villalpando -
Volver al índice del tutorial
____________________________
19.- Servidor Web Apache. PHP. Encendido de LED mediante página web.
- Vamos a instalar un Servidor Web Apache con PHP. Servirá una página web con dos botones, al pulsarlos se encenderá/apagará un LED que estará conectado al terminal GPIO26.
- Con esta instalación de Apache y PHP es suficiente para poner enviar/recibir información desde WiFi o Internet a la Raspberry Pi, en el tutorial 20_apache_php_mysql.htm, veremos cómo hacer una nueva instalación que además tenga base de datos MySQL (MariaDB).
1.- WiringPi.
- Necesitamos la librería WiringPi. Se utiliza para controlar los terminales GPIO.
- Consulta el tutorial
6.- Teclado I2C y pantalla LCD para instalar el WiringPi, en caso que no lo tengas instalado.
- Bajamos: wiringPi-36fb7f1.tar.gz
$ sudo su
# mkdir /home/pi/teclado
# cd /home/pi/teclado# cp /home/pi/Downloads/wiringPi-36fb7f1.tar.gz /home/pi/teclado/
# tar xfz wiringPi-36fb7f1.tar.gz
# cd /home/pi/teclado/wiringPi-36fb7f1
# ./build
- Se generará la librería wiringPi. |
2.- Apache.
- Una vez que tengamos instalado el WiringPi, instalamos el Apache.
sudo apt-get update
sudo apt-get install apache2 -y
- Una vez instalado, vamos a un navegador web y escribimos la IP del Raspberry, ejemplo: http://192.168.1.4
- Deberá salir esta página web:
- Esa página está localizada en: /var/www/html/index.html
- El propietario es el root. Vamos a hacer propietario al usuario pi
sudo chown pi: /var/www/html/index.html
- Ya podemos editar esa página y cambiarle el contenido.
3.- PHP.
- Ahora vamos a instalar PHP que trabajará con los comandos PHP que le suministremos.
sudo apt-get install php libapache2-mod-php -y
- Vamos a borrar esta página:
sudo rm /var/www/html/index.html
- Y vamos a crear esta otra:
sudo nano /var/www/html/index.php
con este contenido:
<?php phpinfo(); ?>
[Para guardar Ctrl-O. Para Salir Ctrl-X]
- Ahora aparecerá esta página con información sobre PHP.
- En el archivo index.php vamos a borrar el <? php phpinfo (); ?>, que acabamos de poner y vamos a pegar este contenido:
- Podemos cambiarle el propietario y abrirlo con un Editor de texto gráfico.
sudo chown pi: /var/www/html/index.php
|
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Encendido y apagado de un LED.</title>
</head>
<body>
<center><h1>Control de un LED mediante página web</h1>
<form method="get" action="index.php">
<input type="submit" style = "font-size: 16 pt" value="Apagar" name="off">
<input type="submit" style = "font-size: 16 pt" value="Encender" name="on">
</form></center>
<?php
shell_exec("/usr/local/bin/gpio -g mode 26 out");
if(isset($_GET['off']))
{
echo "LED apagado";
shell_exec("/usr/local/bin/gpio -g write 26 0");
}
else if(isset($_GET['on']))
{
echo "LED encendido";
shell_exec("/usr/local/bin/gpio -g write 26 1");
}
?>
</body>
</html>
|
4.- Conexión del LED.
- Conectamos un LED al GPIO26
- Mediante las órdenes de la librería WiringPi, podemos ejecutar estos comandos desde el terminal.
/usr/local/bin gpio -g mode 26 out
/usr/local/bin gpio -g write 26 0
/usr/local/bin/gpio -g write 26 1
___________________________________________________________
___________________________________________________________
___________________________________________________________
2.- Obtener el estado de un Pulsador conectado a GPIO15.
- Conectamos un pulsador al terminal GPIO15 de RP y a 3.3V.
- Creamos una página web con un Botón. Cuando pulsemos ese Botón obtendremos el estado del pulsador.
- Además se encenderá un LED conectado a GPIO26. El LED se encenderá/apagará cuando pulsemos el Botón "Consultar".
- 192.168.1.4/pulsador.php
|
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Juan A. Villalpando - KIO4.COM</title>
</head>
<body>
<center><h1>Consulta el estado de un Botón mediante página web</h1>
<a href="http://kio4.com/raspberry/19_servidor_web.htm">kio4.com/raspberry</a><br><br>
<form method="get" action="pulsador.php">
<input type="submit" style = "font-size: 16 pt" value="Consulta">
</form></center>
<?php
shell_exec("/usr/local/bin/gpio -g mode 26 out");
shell_exec("/usr/local/bin/gpio -g mode 15 in");
shell_exec("/usr/local/bin/gpio -g mode 15 down");
$boton = shell_exec("/usr/local/bin/gpio -g read 15");
$boton = trim($boton);
echo $boton;
echo "<br>";
if($boton == "1")
{
echo "Pulsado";
shell_exec("/usr/local/bin/gpio -g write 26 1");
}
else
{
echo "No Pulsado";
shell_exec("/usr/local/bin/gpio -g write 26 0");
}
?>
</body>
</html>
|
- Comentarios.
http://wiringpi.com/
shell_exec("/usr/local/bin/gpio -g mode 26 out"); --> La g indica que el número de pin es GPIO26. Es de out porque conectaremos un LED
shell_exec("/usr/local/bin/gpio -g mode 15 in"); --> Un Pulsador se conectará entre el pin GPIO15 y 3,3V. Es in porque es una entrada, Pulsador.
shell_exec("/usr/local/bin/gpio -g mode 15 down"); --> Si lo hemos conectado a 3,3V, debemos poner su pin GPIO15 a down.
$boton = shell_exec("/usr/local/bin/gpio -g read 15"); --> Lee el estado del Pulsador que está en GPIO15.
$boton = trim($boton); --> La variable $boton tiene espacios, por ejemplo: "1 ". Mediante trim, quitamos ese espacio.
shell_exec("/usr/local/bin/gpio -g write 26 1"); --> Enciende el LED conectado a GPIO26
- Si queremos poner el número de pin en vez del número GPIO, escribiríamos sin -g y cambiamos a su número de pin, en este caso el 37:
shell_exec("/usr/local/bin/gpio mode 37 out");
- En action podríamos poner:
action="<?php print($_SERVER['PHP_SELF']); ?>"
___________________________________________________________
___________________________________________________________
___________________________________________________________
3.- Obtener un número aleatorio generado por el RP.
- El Raspberry genera un número aleatorio comprendido entre 0 y 100, cada 1 segundo.
- Una página web con un Botón. Cuando pulsemos ese Botón obtendremos en la página web el valor del número aleatorio que en ese momento haya generado el Raspberry.
$python_return = exec ( "script.py {$arg1} {$arg2}" );
http://raspberrywebserver.com/cgiscripting/sending-data-to-an-HTTP-server-get-and-post-methods.html
___________________________________________________________
4.- Vamos a instalar MySQL.
http://www.pihome.eu/2017/11/02/install-apache-php-7-0-mysqlmariadb-raspberry-pi-lamp/
sudo apt -get install mariadb-server mariadb-client
sudo mysql_secure_installation
and enter root credentials for MySQL/MariaDB
https://www.rephp.com/phpmyadmin-mbstring-error.html
sudo apt-get remove php*
sudo apt-get install php7.1 php7.1-cli php7.1-common libapache2-mod-php7.1 php7.1-mysql php7.1-fpm php7.1-curl php7.1-gd php7.1-bz2 php7.1-mcrypt php7.1-json php7.1-tidy php7.1-mbstring php-redis php-memcached
sudo service apache restart
sudo phpenmod mbstring
sudo service apache restart
https://es.stackoverflow.com/questions/161109/error-1698-phpmyadmin-access-denied-for-user-rootlocalhost
sudo mysql -p -u root
CREATE USER 'newuser'@'%' IDENTIFIED BY 'you_password_here';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'%' WITH GRANT OPTION;
____________________________________
- Instalación con MySQLi
https://howtoraspberrypi.com/how-to-install-web-server-raspberry-pi-lamp/
___________________________________________________
|