Está en la página 1de 15

Título de la práctica 17: COMUNICACIÓN VIA SERIAL JAVA-ARDUINO, ESP 32Y BASE DE DATOS EN

MYSQL
Asignatura: Aplicaciones de IoT Fecha de inicio: Hoja: 1 de 9
Unidad temática: Unidad I, II Y III Fecha de entrega: Grupo: T196
No. de participantes recomendados: 1 Elaboró: M.en GTI Yolanda Montes Swain
Duración: 2 hr Lugar Asignado: Laboratorio Tema: sensores actuadores y programación
Alumno:

OBJETIVO: CONOCER LA CONEXIÓN DE ARDUINO A MYSQL USANDO EL LENGUAJE DE PROGRAMACIÓN JAVA Y LA COMUNICACIÓN SERIAL ENTRE
LAS APLICACIONES.

ARMAR EL SIGUIENTE CIRCUITO

En este circuito, el botón hará de sensor que al ser presionado enviará dicho estado (prendido) vía serial a Java y al Mysql.
PARA EL ESP32

INTRODUCIR EL SIGUIENTE CÓDIGO QUE PRENDE Y APAGA UN LED.

int led=9;
int boton=8;
int valor=0;

void setup() {
pinMode(boton,INPUT);
pinMode(led,OUTPUT);
Serial.begin(9600);
}

void loop() {
valor=digitalRead(boton);
if(valor==HIGH){
Serial.println("Prendido"); // este dato del serial se manda a Java
digitalWrite(led,HIGH);
delay(2000);
}else{
Serial.println("Apagado"); // este otro datos se manda a java vía serial
digitalWrite(led,LOW);
delay(2000);
}
}

La salida debe de quedar como se ve en la imagen.


3) Descargar conector Jdbc de java.

Ir a la siguiente dirección

https://www.mysql.com/products/connector/

Dan clic en jdbc Drive en mysql (connector J)


Dan clic en Looking for previous GA versión

Y dan clic en la segunda opción de 4.6M (zip)


Por último le dan clic en donde dice No thanks, just start my download
Descargan el archivo y los descomprimen

Una vez que descomprimen el archivo copian los conectores mysql-connector-java-5.xxx y lo ubican en las siguientes carpetas
dentro de la carpeta Java de eclipse o netbeans en la carpeta jre/lib/ext

C:\Program Files (x86)\Java\jre1.8.0_172\lib\ext

Y también lo mismo en la siguiente carpeta

C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\ext

Terminado este proceso, se tiene listo el conector para que java tenga acceso a mysql.

4) CONFIGURACIÓN DEL DRIVE PARA CONECTAR A BASE DE DATOS (DRIVE JDBC ) Y EL DE COMUNICACIÓN SERIAL (RxTxCOM) DEL IDE DE
DESARROLLO ECLIPSE

PARA ECLIPSE PARA 64 BITS

https://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/2020-09/R/eclipse-java-2020-09-R-win32-
x86_64.zip
ECLIPSE RECOMENDADO PARA LOS QUE TENGAN MÁQUINAS DE 32 BITS

Para los que tienen computadoras a 32 (x86) se puede utilizar el eclipse Neon que corre perfectamente con los drives de 32 bits.

https://www.eclipse.org/downloads/packages/release/neon/3

Una vez instalado el eclipse, es necesario ingresar el código de abajo para realizar y comprobar la configuración de nuestro programa que
recibirá los datos del sensor DHT11, esto se puede ver en la figura de abajo. Si se ejecuta el código, se obtiene en la salida del compilador
errores al no encontrar ni los drives de conexión a la base de datos y también el drive de comunicación RXTX, por lo que se requiere bajar
dichos drive cómo se explican el la práctica e instalarlos en el eclipse o netbeans como se indica.

1) Abrir eclipse y al crear el proyecto Arduino y la Clase ArduinoTempJava, dar clic derecho en el nombre Arduino.
Se agrega el código para establecer la comunicación seria y el acceso al gestor de base de datos.

Posteriormente se tendrá un menú secundario, en él selecciona el Build Path y en el Selecciona Configure Build Path . cómo se ve en la
figura de abajo.

Se abrirá una ventana Properties for Arduino y en ella busca el que dice Java Build Path.
En esa ventana selecciona Add External JARs (en este vamos a dar de alta los driver jdbc para comunicarnos con la base de datos y
también en forma serial con nuestra placa de Arduino. Si esto no queda bien, se tendrá el problema que los datos no llegarán vía cable
serial a la lap ni tampoco se podrá ingresar los datos al gestor mysql.

Una vez en en esta selección te aparece una ventana para localizar los drives, busca mysql-connector-java como se ve en la imagen y
posteriormente darás de alta el RXTxcomm para la comunicación serial (no se te olvide, ya que sin estos drives dados de alta, el código
de Java de dará error al compilar).
En la imagen de abajo puedes observar los drives marcados que debes tener instalados en el eclipse, si usas netbeans, es lo mismo.

Una vez cargados los drivers, se da clic en el botón Apply y posteriormente en Apply and Close.
Automáticamente desaparecen los errores de compilación al no encontrar las librerías.

Posteriormente al compilarlo, si te aparece un error como el marcado en Rojo, quiere decir que la versión de tu drive para la
comunicación es de 32 bits y no de 64 bits (en caso que tu máquina lo sea), por lo que tienen que borrar y cargar el driver de
comunicación serial a 64 bits ( link para obtenerlo correctamente está en la práctica).
6) Instalación de rxtx.
Descargar de la siguiente dirección para tener comunicación vía serial con Arduino y Java. ( para los que tienen máquinas de 32 bits)
descargar del siguiente link

http://rxtx.qbang.org/wiki/index.php/Download

Para los que tienen máquinas de 64 bits puede ser que tengan problemas con la descarga de los anteriores drives, por que
Tienen que descargar estos conectores RxTX del siguiente enlace:

http://fizzed.com/oss/rxtx-for-java
descargar la versión que es para Windows-x64
a) Descomprimir el archivo y ubicar los jar, RXTXcomm y rxtxSerial.dll que están en raíz(RXTXcomm) y otro en la carpeta
Windows(rxtxserial.dll).

b) Ubicar en las siguientes carpetas estos dos archivos en windows

RXTXcomm.jar colocarlo en la siguiente ruta dentro de la carpeta java: java \jre\lib\ext


rxtxSerial.dll colocarlo en: java \jre\bin

5) Crear la base de datos


Posteriormente crear la base de datos siguiente:
Mysql> Create database mayor;
Mysql> Use mayor;

Crear la tabla datos como sigue:

mysql> create table datos(id_dato int(4) not null auto_increment, valor varchar(30), primary key(id_dato));
Query OK, 0 rows affected (0.63 sec)

mysql> describe datos;


+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| id_dato | int(4) | NO | PRI | NULL | auto_increment |
| valor | varchar(30) | YES | | NULL | |
+---------+-------------+------+-----+---------+----------------+
2 rows in set (0.05 sec)

7) Introducir el siguiente código en el ide eclipse, netbeans o en el que usen. (NOTA IMPORTANTE EN LA VARIABLE portName=”COMXX”
debes de poner el puerto que se configuró en tu arduino ejempl String portName=”COM11”)

import gnu.io.*; import


java.io.*; import
java.sql.*;
public class ArduinoTempJava {

public static void main(String[] args) {

String portName = "COM11"; // Aquí ESCRIBE EL PUERTO DE CONEXIÓN DE TU ARDUINO


SerialPort serialPort = null;

try
{
CommPortIdentifier port = CommPortIdentifier.getPortIdentifier(portName);
if (port!=null)
{
CommPort commPort =port.open("MiPuerto",10000);

if ( commPort instanceof SerialPort )


{
serialPort = (SerialPort) commPort;
serialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
InputStream input = serialPort.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(input));
while(true){
while(input.available()>0){
String linea="";
if ((reader.ready()) && (linea = reader.readLine()) != null)
{
System.out.println(linea);
Connection conexion = null;
try {

Class.forName("com.mysql.jdbc.Driver"); // Cargar o llama al driver

// Se obtiene una conexión con la base de datos y se reconecta y elimina la seguridad para SSL

conexion =
DriverManager.getConnection("jdbc:mysql://localhost/mayor?autoReconnect=true&useSSL=false", "root", " SU PASSWORD DE MYSQL");

// Se crea un Statement, para realizar la actualizacion o el insert


Statement s = conexion.createStatement();
// Se hace la consulta. Los resultados se guardan en la variable rs del ResultSet
s.executeUpdate("insert into datos values("+0+",'"+linea +"')");
} catch (SQLException e) {
System.out.println(e.getMessage());
} catch (ClassNotFoundException e) {
System.out.println(e.getMessage());
} finally { // Se cierra la conexión con la base de datos.
try {
if (conexion != null) {
conexion.close();
}
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
}

}
}
}

}
else
{
System.out.println("No se tienen acceso al puerto");
}
} else
{
System.out.println("No sé encontró el puerto");
}
}
catch(Exception ex)
{
System.out.println(ex.getMessage());
}
finally
{
if(serialPort!=null)
serialPort.close();
}

6) Ejecutar el programa en java y observar los datos en su consola y también en mysql.


NOTA: AL EJECUTARLO SI TE MARCA ERROR EN EL ARDUINO INDICANDO QUE ESTÁ OCUPADO EL PUERTO, CIERRA EL
MONITOR SERIAL DEL ARDUINO PARA QUE NO TENGAS PROBLEMAS .

Si se observa en la imagen de abajo al oprimir el botón, el estado se muestra prendido y si se deja de apretar aparece
apagado en la salida de la consola de eclipse y en la base de datos.
RETO:

A) AGREGAR A LA BASE DE DATOS OTRO CAMPO CON UN SEGUNDO BOTÓN.


B) MOSTRAR LA TABLA DATOS EN PHP.

También podría gustarte