Buenas tardes, me gustaría compartir mi experiencia en la creación de una aplicación que monitorea el cierre de los pines 7 y 8 en un adaptador USB-COM chino normal (RTS - CTS). Y si ocurre tal evento, me envía un correo electrónico.
Inicialmente, el objetivo era fabricar un sensor de caudal de agua. Qué hacer con el cierre más tarde, en general, no es importante, pero quería enviar el estado a la oficina de correos. Como estoy aprendiendo Java usando JavaRush, elegí la herramienta adecuada: IntelliJ Idea. Por supuesto, el correo no es SMS, pero SMS requiere trabajar con un puerto COM, y aquí aprenderemos una muy buena herramienta para esto, y cuando descubra el módem 3G, puedo agregar un poco de información, aunque ya hay un mucho en Internet. Entonces, no nos centremos en la parte del hardware, veamos el conector en sí
. El pin 5 es tierra, el pin 7 es RTS; en nuestro programa siempre habrá 1 colgando de él (+ 9 V con respecto al pin 5) y el pin 8 es la entrada: una resistencia de 5 kiloohmios la eleva a 0 V. Hay que decir que cuando nuestro programa no se está ejecutando, el voltaje en el pin 7 será -9 V, esto debe tenerse en cuenta al Tome un sensor de derrame, puede aplicarlo al pin 8, pero hay dispositivos que se queman con voltajes negativos. Entonces, para verificar cómo funcionará nuestro programa, después de iniciarlo, cerraremos el contacto 7 con el contacto 8, nuestro programa monitoreará dicho evento una vez por segundo y enviará una carta con el texto "Puddle", y luego lo abrirá, y el programa enviará una carta con el texto “Puddle”. No hay ningún charco." Entonces, para instalar JDK e IntelliJ Idea y aprender algunos conceptos básicos de Java, puede utilizar las primeras lecciones de JavaRush.ru. Empezaremos creando un nuevo proyecto. Permítame hacer una reserva de inmediato: si ya tiene un proyecto abierto, cuando cree un nuevo proyecto se le pedirá que lo abra en una nueva ventana, lo cual es muy conveniente. (Una vez intenté trabajar con eclipse, donde todos los proyectos se abren en una ventana). A continuación muestro muchas imágenes sin descripción, para que quede todo claro.
Comenzando con la siguiente imagen, es muy interesante: siempre he visto a este experto, pero tenía miedo de hacer algo con él, pero luego lo probé y todo resultó ser muy simple: si necesitas una biblioteca, simplemente ingrese su nombre, busque la última versión y descárguela. Mirar. Descargamos la biblioteca http://habrahabr.ru/post/133766/ jSSC y la biblioteca javax:mail; según tengo entendido, se eliminó de la lista estándar de bibliotecas, pero es fácil de descargar en Maven.
Haga clic en Aceptar y se agregarán las bibliotecas. Listo :)
Escriba el texto
comRun.java 1 package ru.example.comTest.Test1; 2 3 import jssc.*; 4 5 import java.io.UnsupportedEncodingException; 6 import java.util.Properties; 7 import javax.mail.*; 8 import javax.mail.internet.*; 9 10 /** 11 * Created by ipolma on 8/12/2014. 12 */ 13 14 public class comRun { 15 16 17 private static SerialPort serialPort; 18 19 public static void main(String[] args) { 20 21 22 String[] retPorts = SerialPortList.getPortNames(); 23 //for (String port: retPorts){System.out.println(port);} 24 25 serialPort = new SerialPort(retPorts[1]);//"COM4"); указываем второй порт 26 System.out.println(serialPort.getPortName()); 27 try { 28 //Открываем порт 29 if (serialPort.isOpened()) serialPort.closePort(); //Здесь бывает ситуация Busy, которую не обработаешь - только если ожидать 30 serialPort.openPort(); 31 //Выставляем параметры 32 serialPort.setParams(SerialPort.BAUDRATE_9600, 33 SerialPort.DATABITS_8, 34 SerialPort.STOPBITS_1, 35 SerialPort.PARITY_NONE); 36 //Включаем аппаратное управление потоком 37 serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN | 38 SerialPort.FLOWCONTROL_RTSCTS_OUT); 39 40 int tempData0 = 0; 41 42 while(true){ 43 Thread.sleep(1000); 44 int[] data = serialPort.getLinesStatus();//readString(event.getEventValue()); 45 //7 и 8 контакты замыкаются - 1010 46 //разомкнуты - 0010 47 //7 и 6 контакты замыкаются - 0110 48 //data[0] - 12 В на 8 (CTS) 49 //data[1] - 12 В на 6 (DCE) 50 //serialPort.setDTR(status); //Меняется напряжение только на 4 контакте - но и это хорошо 51 //serialPort.setRTS(status); // На 7 не меняется- можно это использовать Cómo выход +-7В. 52 53 if (data[0] == 1){ 54 tempData0 = 1; 55 sendEmail("Лужа"); 56 System.out.println("1"); 57 } 58 if (data[0] == 0 && tempData0 == 1){ 59 tempData0 =0; 60 System.out.println("0"); 61 sendEmail("Нет лужи"); 62 } 63 } 64 } 65 catch (SerialPortException ex) { 66 System.out.println(ex); 67 } 68 catch (InterruptedException ty){} 69 70 } 71 72 private static void sendEmail(String text){ 73 74 try { 75 // Создаем DIRECCIÓNа отправителя и прлучателя 76 InternetAddress from = new InternetAddress("*****@yandex.ru", "From"); 77 InternetAddress to = new InternetAddress("****@****.ru", "To"); 78 // Далее создаем т.н. транспорт с определенными параметрами, который 79 // будет "заниматься" отправкой mensajes 80 Properties props = new Properties(); 81 // Тип протокола, DIRECCIÓN servidorа и номер порта 82 props.put("mail.transport.protocol", "smtp"); 83 props.put("mail.smtp.host", "smtp.yandex.ru"); 84 props.put("mail.smtp.port", "25"); 85 Session session = Session.getDefaultInstance(props); 86 Transport transport = session.getTransport(); 87 // Теперь создаем сообщение 88 MimeMessage message = new MimeMessage(session); 89 message.setText(text, "utf-8"); 90 message.setFrom(from); 91 message.setRecipient(Message.RecipientType.TO, to); 92 message.setSubject("Тема", "utf-8"); 93 // При подключении указываем параметры для smtp servidorа: логин и пароль 94 transport.connect("*****@yandex.ru", "**Password***"); 95 transport.sendMessage(message, new Address[]{to}); 96 transport.close(); 97 } catch (UnsupportedEncodingException ex) { 98 ex.printStackTrace(); 99 } catch (NoSuchProviderException ex) { 100 ex.printStackTrace(); 101 } catch (MessagingException ex) { 102 ex.printStackTrace(); 103 } 104 } 105 106 } 107
Configure las direcciones y contraseñas existentes (por cierto, es interesante que en la ayuda de Yandex sobre smtp está escrito sobre el puerto 465, pero en Internet encontré el puerto 25, y resultó ser correcto ). Comencemos la ejecución. Cerramos los contactos 7 y 8, después de tres segundos soltamos 1 – los contactos están cerrados, se envía la carta “Puddle”, 0 – los contactos están abiertos – se envía la carta “No Puddle”, esto es lo que hay en mi
correo
Ahora quiero tener una aplicación. Aquí, mientras estudiaba el material, lloré: ¿es realmente necesario crear un archivo de manifiesto, registrar un parche de clase... algo terrible? Skipy describe todo esto. Casi me doy por vencido, pero en los cajones de mi escritorio de la cocina hace mucho que no había tarjetas perforadas y tuvimos una idea, así que hice un archivo de frascos de manera muy simple: mira.
Marque la casilla Build on Make: después de la siguiente compilación de la idea, el resultado estará en la carpeta de salida.
Todo es jar, y es tan independiente que, en cualquier caso, dentro de la máquina se copia y se ejecuta desde cualquier lugar.
Pero si simplemente lo ejecuta, se enviarán las cartas, pero no habrá consola y podrá finalizar el proceso solo encontrando dicha entrada en el administrador de tareas.
Lo transferimos a otra carpeta, desde allí también se inicia y creamos un archivo bat.
Ejecutamos el archivo por lotes
... Aquí está la consola y usando Ctrl + C - una solicitud para salir.
Pero si ejecuta el jar dos veces, la segunda vez no funcionará: el puerto de comunicación estará ocupado. Por tanto, es recomendable realizar una única solicitud. Instalamos Launch4j, lo ejecutamos, seleccionamos el archivo de salida - cualquier nombre, debe ser exe en la ventana principal, luego nuestro jar, seleccionamos el tipo de consola, versión mínima 1.4.0 Indicamos que no necesitamos muchas copias Haga
clic
en botón con el engranaje
Nos preguntan dónde almacenar archivos temporales, respondemos
Good Lak: todo está listo. Lanzamos el ejecutable.
Es cierto que en el despachador todavía se ejecutará bajo javaw.
Están llegando cartas.
Cosas así, me gustó Java. PD. La mejor herramienta mecánica para monitorear fugas es http://www.vse-sam.ru/10249-mexanicheskaya-sistema-dlya-kontrolya-i-predotvrashheniya-protechki-vody.html PPS. La salida de la consola bloquea el programa después de una cierta cantidad de líneas, por lo que si de repente repite este algoritmo, no olvide desactivar la salida de la consola.
GO TO FULL VERSION