Raspberry Pi. Apache. PHP. MySQL. App Inventor.

264 views
Skip to first unread message

Juan Antonio

unread,
Jul 15, 2019, 4:27:31 PM7/15/19
to MIT App Inventor Forum
Helo friends,

I have written some tutorials in Spanish about Raspberry Pi and I would like to share that information in this forum.


The target is to install Raspbian in Raspberry Pi, Apache, PHP, MySQL and work with App Inventor.

I use RPi 3 Model B (price 35$)

[RPi4 is too recent (june 2019), problem with USB-C power connector, microHDMI)]

rpi.png



- INSTALLATION of Raspbian in Raspberry.

1.- Download to PC, NOOBS from: https://www.raspberrypi.org/downloads/noobs/
 NOOBS_v3_2_0.zip (2,2 GB)
 
 2.- Decompress  NOOBS_v3_2_0.zip to SdCard inserted in our PC.
 
 3.- Insert SdCard in Raspberry. Install Raspbian (RECOMMENDED).

raspbian2.png


 
 4.- Default user is: pi
 password: raspberry
 
 5.- To config in a Terminal write:
 
 sudo raspi-config

monitor.png



 
 Config Monitor Screen: Advanced Options / Resolution
 
 Enable VNC (import): Interfacing Option / VNC (enable)
 
 It is important enable VNC because we'll work with remote Desktop.

raspbian4.png


Juan Antonio

unread,
Jul 15, 2019, 4:36:22 PM7/15/19
to MIT App Inventor Forum
If you need format SdCard, use: SdFormatter from: https://www.sdcard.org/downloads/formatter_4/eula_windows/index.html

If you need a image of SdCard, use: Win32 Disk Imager from: https://sourceforge.net/projects/win32diskimager/

Run as Admin.
-----------------------------

Raspbian has Python and Python3

pi@raspberrypi:~ $ python -V
Python 2.7.16
pi@raspberrypi:~ $ python3 -V
Python 3.7.3

----------------------------

Name versions:

Carlos Bieberach

unread,
Jul 15, 2019, 4:37:50 PM7/15/19
to MIT App Inventor Forum
So this will allow me to create and apk using App Inventor that will run on a Raspberry PI just like it does on and Android phone? If yes, I'm very interested.

I have an idea you and I can work on together if you are interested.

Carlos
car...@biesystems.com
Miami FL

Juan Antonio

unread,
Jul 15, 2019, 4:45:29 PM7/15/19
to MIT App Inventor Forum
Hi Carlos, this project is only installation of Apache, PHP, MySQL and phpmyadmin in RPi . From Web or App Inventor we can insert or recovery data to/from data base MySQL (MariaDB).

Carlos Bieberach

unread,
Jul 15, 2019, 4:50:31 PM7/15/19
to MIT App Inventor Forum
Oh yes, I forgot a small detail ... no Android OS lol my bad.

Will follow your link regardless. I'm sure I will find where to use it.

Thanks,

Carlos

Juan Antonio

unread,
Jul 15, 2019, 5:04:11 PM7/15/19
to MIT App Inventor Forum
- INSTALLATION of Apache, PHP, MariaDB (MySQLi) and phpmyadmin in Raspberry Pi.

- In this page in Spanish you can get information about this installation:

1.- Install Apache:

sudo apt-get install apache2 -y

2.- Try in your localhost

http://192.168.1.11 (this is an IP example) 

Local directory: /var/www/html/index.html
Restart: sudo service apache2 restart

2.- Install 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 -y

- Try, create file:
sudo nano /var/www/html/index.php
with this content:
<?php phpinfo(); ?>

3.- Install MariaDB:
MariaDB is as MySQLi (Now MySQLi is Oracle, MariaDB is compatible 99,99% with MySQLi)

sudo apt-get install mariadb-server mariadb-client -y

sudo mysql_secure_installation

mariadb1.png

 

4.- Install phpmyadmin:


 sudo apt-get install phpmyadmin -y
 password: raspberry 

sudo mysql -p -u root 
Enter password: raspberry 

MariaDB [(none)]> CREATE USER 'pi'@'%' IDENTIFIED BY 'raspberry'; 
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'pi'@'%' WITH GRANT OPTION;

MariaDB [(none)]> exit




Juan Antonio

unread,
Jul 15, 2019, 5:14:15 PM7/15/19
to MIT App Inventor Forum
- CREATE A DATA BASE (tutorial) and a TABLE (comercio) with phpmyadmin.

- Data base: tutorial

phpmyadmin6.png

- Table: comercio

mysql_44.png

- You can create this table by Import this file:


-- Juan A. Villalpando
-- kio4.com

CREATE TABLE `comercio` (
  `id` int(6) NOT NULL,
  `nombre` varchar(14) COLLATE utf8_spanish2_ci NOT NULL,
  `producto` varchar(12) COLLATE utf8_spanish2_ci NOT NULL,
  `precio` varchar(6) COLLATE utf8_spanish2_ci NOT NULL,
  `fecha` varchar(10) COLLATE utf8_spanish2_ci NOT NULL,
  `pagado` varchar(5) COLLATE utf8_spanish2_ci NOT NULL,
  `profesional` varchar(5) COLLATE utf8_spanish2_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish2_ci;

ALTER TABLE `comercio`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `comercio`
  MODIFY `id` int(6) NOT NULL AUTO_INCREMENT;
COMMIT;		    

Juan Antonio

unread,
Jul 15, 2019, 5:22:53 PM7/15/19
to MIT App Inventor Forum
- To Insert, Update, Delete and Show data from a web page.

1.- Create this php file to authentication in Data Base:

sudo nano /var/www/html/bd_autentifica.php

<?php
// 1.- IDENTIFICACION nombre de la base, del usuario, clave y servidor
$db_host="localhost";
$db_name="tutorial"; 
$db_login="pi";
$db_pswd="raspberry";
?>	

------------------------------------------------------------------
2.- Create this php long long long  file to insert, delete, update, show data in Data Base:

sudo nano /var/www/html/comercio_insertar_web.php

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
<html>
<head><meta charset="UTF-8"></head>
<body>
<font face="Arial">
<form name="test" method="post" action="comercio_insertar_web.php">
    <b><font face="Arial, Helvetica, sans-serif">- Crear un usuario.</font></b><font face="Arial, Helvetica, sans-serif"><br>
Nombre:  
<INPUT TYPE="text" NAME="nombre" value=""><br><br>
Producto:  
<INPUT TYPE="text" NAME="producto" value=""><br><br>
Precio:  
<INPUT TYPE="text" NAME="precio" value=""><br><br>
Fecha:  
<INPUT TYPE="text" NAME="fecha" value=""><br><br>
Pagado:  
<INPUT TYPE="checkbox" NAME="pagado" value="true"><br><br>
Profesional:  
<INPUT TYPE="checkbox" NAME="profesional" value="true"><br><br>
<INPUT TYPE="submit" name="btnInsertar" value=" Pulsa insertar los datos">
 <br>
 <b><font color="#009900">_________________________________________________________________</font></b>

  <br>
  <b>- Ver el nombre de los usuarios creados.</b><br>
    <INPUT TYPE="submit" name="btnConsultarUsuarios" value="Pulsa para ver un listado de los nombres de los usuarios creados">
    <br>
    <b><font color="#009900">_________________________________________________________________</font></b>

    <br>
    <b>- Borrar un usuario.</b><br>
Escribe el nombre de un usuario para borrarlo. 
<INPUT TYPE="text" NAME="nombre_borrar" value="">
<INPUT TYPE="submit" name="btnBorrar" value=" Pulsa para borrar a ese usuario">

 <br>
 <b><font color="#009900">_________________________________________________________________</font></b>

   <br>
   <b>- Consultar la información de un usuario. (Si no escribes nada, se mostrará las respuesta de todos los usuarios.)</b><br>
Escribe el nombre de un usuario para ver sus respuestas. 
<INPUT TYPE="text" NAME="nombre_consultar" value="">
<INPUT TYPE="submit" name="btnConsultarTodo" value=" Pulsa para ver las respuestas de ese usuario o de todos">

    </font><br>
    <b><font color="#009900" face="Arial">_________________________________________________________________</font></b>
 
   <br>
  <b><font color="#009900" face="Arial"><br>
 _________________________________________________________________</font></b>
</form>
</body>
</html>

<?php
// Juan Antonio Villalpando
// http://kio4.com


// 1.- IDENTIFICACION nombre de la base, del usuario, clave y servidor
require_once('bd_autentifica.php');

// 2.- CONEXION A LA BASE DE DATOS
// mysql_select_db($db_name) or die(mysql_error());
$link = new mysqli($db_host, $db_login, $db_pswd, $db_name);
// Check connection
if ($link->connect_error) {
    die('Connect Error: ' . $mysqli->connect_error);
}

// 3.- INSERTAR USUARIO
////////////////////////////// INSERTAR ////////////////////////////////////
if(isset($_POST['btnInsertar'])){
	$nombre = $_POST['nombre'];
	$producto = $_POST['producto'];
    $precio = $_POST['precio'];
	$fecha = $_POST['fecha'];
	$pagado = $_POST['pagado'];
	$profesional = $_POST['profesional'];

$res=mysqli_query($link, "SELECT nombre FROM `comercio` WHERE `nombre`='$nombre' ");
$row=mysqli_fetch_array($res);
$count = mysqli_num_rows($res);
if( $count == 0 ) { // Si ha contado 0 nombre, es que el usuario no esta registrado. Lo registra y pone los datos.
$query="insert into comercio (nombre, producto, precio, fecha, pagado, profesional) values ('$nombre','$producto','$precio','$fecha','$pagado','$profesional')";
			$result = mysqli_query($link, $query);
			echo 'Registrado y guardado';
	}else{
	echo ' Ya estaba registrado. Guardado';
	// Actualiza
	$query="update comercio set producto='$producto', precio='$precio', fecha='$fecha', pagado='$pagado', profesional='$profesional' WHERE nombre='$nombre' ";
			
	$result = mysqli_query($link, $query);
		}
	
mysqli_close($link);
}
////////////////////////////////////////////////////////////////////////
// 4.- LISTADO DE TODOS LOS USUARIOS ///////////////////////////////////
if(isset($_POST['btnConsultarUsuarios'])){
$resultado= mysqli_query( $link,"SELECT DISTINCT nombre FROM comercio" ) 
or die("SELECT Error: ".mysql_error()); 

print "<table  border='3' cellpadding='4' cellspacing='0' bordercolor='#009900'"; 
while ($row = mysqli_fetch_array($resultado)){ 
$columna= $row['nombre'];
print "<tr>\n"; 
print "\t<td>\n"; 
echo "<font face=arial size=4/>$columna</font>";
print "</td>\n";
print "</tr>\n"; 
} 
print "</table>\n"; 
	
mysqli_close($link);
}
////////////////////////////////////////////////////////////////////////
// 5.- BORRAR USUARIOS ///////////////////////////////////
///////////////////////////////    BORRAR  ////////////////////////////////////
if(isset($_POST['btnBorrar'])){
    $nombre=$_POST['nombre_borrar'];
	echo($nombre);
    $query="delete from comercio where nombre='$nombre'";
$result = mysqli_query($link, $query);
print("Datos borrados.");
mysqli_close($link);
}
///////////////////////////////////////////////////////////////////
//////////////////////////////    CONSULTAR P?GINA WEB. /////////////////////////////////////
if(isset($_POST['btnConsultarTodo'])){

//  RECOGIDA DE DATOS DEL FORMULARIO
$nombre=$_POST['nombre_consultar'];

//  SELECCI?N
if ($nombre==''){
    $hacer = mysqli_query ($link, "SELECT * FROM comercio");
}
else {
    $hacer = mysqli_query ($link, "SELECT * FROM comercio WHERE nombre='$nombre' ");
};

///////////////////////////////////////////////////////////////////////////////
// En los casos que hay SELECT y se debe enviar una respuesta act?a este c?digo

    $resultado = mysqli_query($link, "SHOW COLUMNS FROM comercio");
    $numerodefilas = mysqli_num_rows($resultado);
    if ($numerodefilas > 0) {
      echo ("<table  border='3' cellpadding='4' cellspacing='0' bordercolor='#009900'");
	  echo ("<center>");
	  
	  echo("
<tr>
    <td>id</td>
    <td>nombre</td>
    <td>producto</td>
    <td>precio</td>
	<td>fecha</td>
    <td>pagado</td>
    <td>profesional</td>

  </tr>
	  ");
	  
    while ($rowr = mysqli_fetch_row($hacer)) {
	 echo("<tr>");
     for ($j=0;$j<$numerodefilas;$j++) {
	 echo("<td><center>".$rowr[$j]."</center></td>");
     }
	 echo("</tr>");
    }
     
    }
     
mysqli_close($link);
}

?>
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////




Juan Antonio Villalpando

Juan Antonio

unread,
Jul 16, 2019, 6:19:23 AM7/16/19
to mitappinv...@googlegroups.com
- Now insert, show, delete with App Inventor.



- With this app we can insert, show, delete data in Data Base in Raspberry.

mysql_50.png

mysql_51.png



- Files PHP to INSERT, SHOW and DELETE data in Data Base MariaDB (MySQLi) in Raspberry Pi.

sudo nano /var/www/html/comercio_insertar.php

/////////////////////////////////////////////////////////////////////////////////////////////
<?php
// Juan Antonio Villalpando
// http://kio4.com

// 1.- IDENTIFICACION nombre de la base, del usuario, clave y servidor
require_once('bd_autentifica.php');

// 2.- CONEXION A LA BASE DE DATOS
// mysql_select_db($db_name) or die(mysql_error());
$link = new mysqli($db_host, $db_login, $db_pswd, $db_name);
// Check connection
if ($link->connect_error) {
    die('Connect Error: ' . $mysqli->connect_error);
}
$nombre = $_POST['nombre'];
	$producto = $_POST['producto'];
    $precio = $_POST['precio'];
	$fecha = $_POST['fecha'];
	$pagado = $_POST['pagado'];
	$profesional = $_POST['profesional'];

$res=mysqli_query($link, "SELECT nombre FROM `comercio` WHERE `nombre`='$nombre' ");
$row=mysqli_fetch_array($res);
$count = mysqli_num_rows($res);
if( $count == 0 ) { // Si ha contado 0 nombre, es que el usuario no esta registrado. Lo registra y pone los datos.
$query="insert into comercio (nombre, producto, precio, fecha, pagado, profesional) values ('$nombre','$producto', '$precio', '$fecha','$pagado','$profesional')";
			$result = mysqli_query($link, $query);
			echo 'Registrado y guardado';
	}else{
			echo ' Ya estaba registrado. Guardado';
			// Actualiza
			$query="update comercio set producto='$producto', precio='$precio', fecha='$fecha', pagado='$pagado', profesional='$profesional' WHERE nombre='$nombre' ";
			
			$result = mysqli_query($link, $query);
			}
	
mysqli_close($link);
?>
/////////////////////////////////////////////////////////////////////////////////////////////
sudo nano /var/www/html/comercio_ver.php 
/////////////////////////////////////////////////////////////////////////////////////////////
<?php
// Juan Antonio Villalpando
// http://kio4.com

// 1.- IDENTIFICACION nombre de la base, del usuario, clave y servidor
require_once('bd_autentifica.php');

// 2.- CONEXION A LA BASE DE DATOS
// mysql_select_db($db_name) or die(mysql_error());
$link = new mysqli($db_host, $db_login, $db_pswd, $db_name);
// Check connection
if ($link->connect_error) {
    die('Connect Error: ' . $mysqli->connect_error);
}

    mysqli_query($link, 'SET NAMES utf8');
	$nombre = $_POST['nombre'];


    $hacer = mysqli_query ($link, "SELECT * FROM comercio WHERE nombre='$nombre' ");
$resultado = mysqli_query($link, "SHOW COLUMNS FROM comercio");
    $numerodefilas = mysqli_num_rows($resultado);
	if ($numerodefilas > 0) {


	while ($rowr = mysqli_fetch_row($hacer)) {

		for ($j=0;$j<$numerodefilas;$j++) {

		$datos .= $rowr[$j].",";
		}
		}

	}
	
	echo $datos;
	
    mysqli_close($link);
?>

/////////////////////////////////////////////////////////////////////////////////////////////
sudo nano /var/www/html/comercio_borrar.php

////////////////////////////////////////////////
<?php
// Juan Antonio Villalpando
// http://kio4.com

// 1.- IDENTIFICACION nombre de la base, del usuario, clave y servidor
require_once('bd_autentifica.php');

// 2.- CONEXION A LA BASE DE DATOS
// mysql_select_db($db_name) or die(mysql_error());
$link = new mysqli($db_host, $db_login, $db_pswd, $db_name);
// Check connection
if ($link->connect_error) {
    die('Connect Error: ' . $mysqli->connect_error);
}

	$nombre = $_POST['nombre'];


    $query="delete from comercio where nombre='$nombre'  ";
    $result = mysqli_query($link, $query);


	echo "Borrado: ".$nombre;
	
    mysqli_close($link);
?>
p420_en_mysql_comercio.aia

Juan Antonio

unread,
Jul 21, 2019, 4:55:07 AM7/21/19
to mitappinv...@googlegroups.com
- My Raspberry from Internet. NAT. Port forwarding.


If we want to access our Raspberry from the Internet, we must configure a NAT in our Router. Port forwarding. https://en.wikipedia.org/wiki/Port_forwarding https://portforward.com/ 1.- We enter the configuration of our Router. http://Gateway_IP Example: 192.168.1.1 2.- Authentication in our Router: User / Password. 3.- Search in the configuration: "Port forwarding", write IP_Raspberry ............ Port = 80 Example: 192.168.1.11 .............. 80 Images. 4. Search your Public IP Address: https://whatismyip.network/ 5.- From any browser writing your Public IP can enter your Raspberry: http://your_public_ip 6.- What happens if my internet provider changes my public ip?





Reply all
Reply to author
Forward
0 new messages