Te puede intersar
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Un complemento más para el alcoholimetro [JAVA+ARDUINO]
Continuando con el alcoholimetro que realizamos anteriormente, el cual te recomiendo que visites dando clic AQUI para poder seguir lo que haremos a continuación, esta vez realizaremos una conexión de nuestro programa con una interfaz remota en otro ordenador usando una comunicación de cliente servidor.
(Interfaz que realizamos en la entrada anterior)
Para ello utilizaremos la interfaz gráfica que realizamos antes y le adicionaremos un socketServer con la finalidad de monitoriar conexiones entrantes de un software cliente el cual también programaremos, una vez se establezca esta conexión (cliente - servidor) veremos las mediciones realizadas por nuestro alcoholimetro desde la interfaz de nuestro cliente, claro si es que hay mediciones validas, entonces comenzemos.
Realizando los cambios a la interfaz de java
Primero vamos al código que realizamos anteriormente y agregamos el siguiente codigo:
//Hilo para iniciar el servidor
public class iniciarServidor implements Runnable{
//Parametros para el servidor
int puerto = 5000;
ServerSocket serv;
Socket soc;
String mensaje;
//Metodo principal del hilo
public void run (){
//declaramos canales de entrada y salida de datos
DataInputStream entrada;
DataOutputStream salida;
try {
//asignamos el puerto por el cual escucha el servidor
serv = new ServerSocket(puerto);
//Creamos un socket para manejar el servidor
soc = new Socket();
//Ingresamos texto en la caja de incidencias.
txaLog.append("*Servidor iniciado\n");
while(true) {
//Aceptamos la conexion entrante
soc = serv.accept();
//Creamos los canales de entrada y salida
entrada = new DataInputStream(soc.getInputStream());
salida = new DataOutputStream(soc.getOutputStream());
//Enviamos data al cliente
salida.writeUTF(lblDato.getText());
//Cerramos conexion
soc.close();
}
}catch(Exception e) {
System.err.print(e);
}
}
}
Ahora en el metodo public void conectar(String portName) realizamos la siguiente modificacion:
public void conectar(String portName) throws Exception{
CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);
if ( portIdentifier.isCurrentlyOwned() )
System.out.println("Error: Port is currently in use");
else{
CommPort commPort = portIdentifier.open(this.getClass().getName(),2000);
if ( commPort instanceof SerialPort ){
SerialPort puertoSerial = (SerialPort) commPort;
puertoSerial.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
in = puertoSerial.getInputStream();
out = puertoSerial.getOutputStream();
(new Thread(new SerialReader(in))).start();
//Agregamos esta linea para iniciar el hilo de servidor
(new Thread(new iniciarServidor())).start();
}else
System.out.println("Error: Only serial ports are handled by this example.");
}
}
Con estos cambios ya tenemos lista nuestra interfaz principal, ahora realicemos nuestro cliente.Creamos un nuevo proyecto o una nueva clase en java, y escribimos el siguiente código:
//Importamos las librerias necesarias
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class cliente extends JFrame implements ActionListener{
//Variables globales
String host;
int puerto = 5000;
Socket sc;
DataOutputStream salida;
DataInputStream entrada;
JLabel lblIp;
JTextField txtIp;
JButton btnEst;
JButton btnPar;
JLabel lbltxa;
JLabel lblValor;
int l;
//Metodo constructor
public cliente() {
//Especifamos el diseño de nuestra interfaz
setTitle("Alcoholimetro remoto");
setSize(360,200);
setLayout(null);
setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
lblIp = new JLabel("IP SERVIDOR:");
lblIp.setBounds(10, 25, 80, 20);
txtIp = new JTextField();
txtIp.setBounds(90, 25, 120, 20);
btnEst = new JButton("Conectar");
btnEst.setBounds(225,10,100,20);
btnEst.addActionListener(this);
btnPar = new JButton("Parar");
btnPar.setBounds(225, 35, 100, 20);
btnPar.addActionListener(this);
lbltxa = new JLabel("Medida del alcoholimetro:");
lbltxa.setBounds(10, 100, 200, 30);
lbltxa.setFont(new Font("Calibri",3,16));
lblValor = new JLabel();
lblValor.setBounds(200,100,100,30);
lblValor.setFont(new Font("Calibri",3,20));
this.add(lblIp);
this.add(txtIp);
this.add(btnEst);
this.add(lbltxa);
this.add(lblValor);
this.add(btnPar);
}
//Hilo para iniciar cliente
public class iniciarCliente implements Runnable {
//Metodo principal del hilo
public void run() {
//Ejecutamos este bloque hasta que se pulse el boton parar
while(true) {
try {
sc = new Socket(host,puerto);
entrada = new DataInputStream(sc.getInputStream());
salida = new DataOutputStream(sc.getOutputStream());
String mensaje = entrada.readUTF();
if(mensaje.equals("")) {
lblValor.setText("N/A");
}else {
lblValor.setText(mensaje);
}
//Validamos si el boton para se ha pulsado
if(l == 1){
sc.close();
break;
}
sc.close();
}catch(Exception e) {
System.err.print(e);
}
}
}
}
//Metodo principal de nuestro programa
public static void main(String[] args) {
cliente c = new cliente();
c.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
//En caso se presione el boton Conetar
if(e.getSource().equals(btnEst)) {
l = 0;
host = txtIp.getText();
if(host.equals("")) {
JOptionPane.showMessageDialog(null,"Agrege la direccion ip del servidor");
}else {
(new Thread(new iniciarCliente())).start();
}
}
//En caso se presione el boton Parar
if(e.getSource().equals(btnPar)){
l = 1;
lblValor.setText("");
}
}
}
Al ejecutar nuestro programa veremos la siguiente interfaz:
Veamos ahora como funciona:
Primero debemos ejecutar nuestro programa principal de alcoholimetro, le damos en conectar y en iniciar, empezara a tomar mediciones.
Seguidamente vamos al programa de cliente, especificamos la ip del servidor y damos en conectar, ahora veremos la data que esta sensando nuestro alcoholimetro desde nuestro cliente en otro computador.
Si queremos para el programa le damos en Parar y para reanudar nuevamente en continuar.
Y Listo!! con esto acabamos por ahora.
Para finalizar
Como hemos podido ver hasta ahora estos programas son algo simples pero cumplen su objetivo el cual es comunicar un arduino con una interfaz en java y como adicional mandar información a través de red aunque claro hoy en dia existen otras opciones que nos permitirían enviar data por red tales como el shield ethernet de arduino o un modulo esp32 entre otros, sin embargo esta es una opción valida ya que solo necesitamos nuestra pc. Mirando a otra parte en este proyecto hemos usado un sensor MQ3 pero tenemos la libertad de usar otros sensores ademas de no limitarnos a solo 1 dependiendo de la versión de arduino que utilices puedes usar múltiples de ellos. Entonces a partir de ahora podemos jugar con los sensores que tengamos, cambiar nuestra interfaz gráfica y probar con diferentes elementos o conocimientos que tengamos para así hacer nuevos proyectos.
Muchas gracias por tu tiempo.
Descarga el código utilizado dando clic en el botón de abajo
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Entradas populares
RFID con arduino y raspberry pi + base de datos
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Realizando un interfaz grafica en java para arduino + mq3
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Comentarios
Publicar un comentario