JavaRush /Blog Java /Random-ES /Cerramos contactos y recibimos una carta.
Izhak
Nivel 22
Москва

Cerramos contactos y recibimos una carta.

Publicado en el grupo Random-ES
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í DB9F . 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. Cerramos los contactos y recibimos una carta - 1 Cerramos los contactos y recibimos una carta - 2 Cerramos los contactos y recibimos una carta - 2 Cerramos los contactos y recibimos una carta - 4 Cerramos los contactos y recibimos una carta - 3 Cerramos los contactos y recibimos una carta - 6 Cerramos los contactos y recibimos una carta - 4 Cerramos los contactos y recibimos una carta - 8 Cerramos los contactos y recibimos una carta - 5 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. Cerramos los contactos y recibimos una carta - 6 Cerramos los contactos y recibimos una carta - 11 Cerramos los contactos y recibimos una carta - 7 Cerramos los contactos y recibimos una carta - 13 Cerramos los contactos y recibimos una carta - 8 Haga clic en Aceptar y se agregarán las bibliotecas. Listo :) Cerramos los contactos y recibimos una carta - 9 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 Cerramos los contactos y recibimos una carta - 10 correo Cerramos los contactos y recibimos una carta - 17 Cerramos los contactos y recibimos una carta - 11 Cerramos los contactos y recibimos una carta - 19 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. Cerramos los contactos y recibimos una carta - 12 Cerramos los contactos y recibimos una carta - 21 Cerramos los contactos y recibimos una carta - 13 Marque la casilla Build on Make: después de la siguiente compilación de la idea, el resultado estará en la carpeta de salida. Cerramos los contactos y recibimos una carta - 14 Todo es jar, y es tan independiente que, en cualquier caso, dentro de la máquina se copia y se ejecuta desde cualquier lugar. Cerramos los contactos y recibimos una carta - 15 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. Cerramos los contactos y recibimos una carta - 16 Lo transferimos a otra carpeta, desde allí también se inicia y creamos un archivo bat. Cerramos los contactos y recibimos una carta - 17 Cerramos los contactos y recibimos una carta - 27 Ejecutamos el archivo por lotes Cerramos los contactos y recibimos una carta - 18 Cerramos los contactos y recibimos una carta - 29 ... Aquí está la consola y usando Ctrl + C - una solicitud para salir. Cerramos los contactos y recibimos una carta - 19 Cerramos los contactos y recibimos una carta - 31 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 Cerramos los contactos y recibimos una carta - 20 Cerramos los contactos y recibimos una carta - 33 Cerramos los contactos y recibimos una carta - 21 Cerramos los contactos y recibimos una carta - 35 clic Cerramos los contactos y recibimos una carta - 22 Cerramos los contactos y recibimos una carta - 37 en botón con el engranaje Cerramos los contactos y recibimos una carta - 23 Nos preguntan dónde almacenar archivos temporales, respondemos Cerramos los contactos y recibimos una carta - 24 Cerramos los contactos y recibimos una carta - 40 Good Lak: todo está listo. Lanzamos el ejecutable. Cerramos los contactos y recibimos una carta - 25 Es cierto que en el despachador todavía se ejecutará bajo javaw. Cerramos los contactos y recibimos una carta - 26 Están llegando cartas. Cerramos los contactos y recibimos una carta - 43 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.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION