Boa tarde, gostaria de compartilhar minha experiência na criação de uma aplicação que monitora o fechamento dos pinos 7 e 8 em um adaptador USB-COM chinês comum (RTS - CTS). E se tal evento ocorrer, ele me envia um email.
Inicialmente, o objetivo era fazer um sensor de vazão de água. O que fazer depois do fechamento não é, em geral, importante, mas eu queria mandar o estado para os correios. Como estou aprendendo Java usando JavaRush, foi escolhida a ferramenta adequada – IntelliJ Idea. Claro que correio não é SMS, mas SMS exige trabalhar com uma porta de comunicação, e aqui vamos aprender uma ferramenta muito boa para isso, e quando eu descobrir o modem 3G posso acrescentar um pouco de informação, embora já exista um muito disso na Internet. Então, não vamos focar na parte de hardware, vamos dar uma olhada no conector em si
. O pino 5 é terra, o pino 7 é RTS - em nosso programa sempre haverá 1 pendurado nele (+ 9 V em relação ao pino 5), e o pino 8 é a entrada - puxada por um resistor de 5 quilo-ohms para 0 V. Deve ser dito que quando nosso programa não estiver rodando, a tensão no pino 7 será de -9 V, isso deve ser levado em consideração quando você pegue um sensor de derramamento, você pode aplicá-lo no pino 8, mas existem dispositivos que queimam com tensões negativas. Então, para verificar como nosso programa funcionará, após iniciá-lo fecharemos o contato 7 ao contato 8, nosso programa irá monitorar tal evento uma vez por segundo e enviar uma carta com o texto “Puddle”, e depois abri-lo - e o programa enviará uma carta com o texto “Poça”. Não há poça." Portanto, para instalar o JDK e o IntelliJ Idea e aprender alguns fundamentos do Java, você pode usar as primeiras lições do JavaRush.ru. Começaremos criando um novo projeto. Deixe-me fazer uma reserva desde já que se você já tem um projeto aberto, ao criar um novo projeto você será solicitado a abri-lo em uma nova janela - muito conveniente. (Certa vez tentei trabalhar com o Eclipse, onde todos os projetos abrem em uma janela). A seguir dou muitas fotos sem descrições - e assim fica tudo claro.
Começando pela próxima foto, é muito interessante - sempre vi esse especialista, mas tinha medo de fazer alguma coisa com ele, mas depois tentei - e acabou ficando tudo muito simples - se precisar de uma biblioteca, você só digite seu nome, procure a versão mais recente e faça o download. Olhar. Baixamos a biblioteca http://habrahabr.ru/post/133766/ jSSC E a biblioteca javax:mail - pelo que entendi, foi removida da lista padrão de bibliotecas, mas é fácil de baixar no Maven.
Clique em OK e as bibliotecas serão adicionadas. Voila :)
Digite o texto
mail
Agora quero ter um aplicativo. Aqui, enquanto estudava o material, chorei - é mesmo necessário criar um arquivo de manifesto, registrar um patch de classe... uma coisa terrível. Skipy descreve tudo isso. Quase desisti, mas nas gavetas da minha mesa da cozinha não havia cartões perfurados há muito tempo, e tivemos uma ideia, então fiz um arquivo de jarro de forma muito simples - veja.
Marque a caixa Build on Make - após a próxima compilação da ideia, o resultado estará na pasta out.
Tudo está solto e é tão independente que, em qualquer caso, dentro da máquina é copiado e lançado de qualquer lugar.
Mas se você apenas executá-lo, as cartas serão enviadas, mas não haverá console, e você só poderá encerrar o processo encontrando tal entrada no gerenciador de tarefas.
Transferimos para outra pasta, a partir daí também inicia, e criamos arquivo bat...
Lançamos o arquivo em lote
... Aqui está o console, e usando Ctrl + C - uma solicitação para sair.
Mas se você executar o jar duas vezes, a segunda vez não funcionará - a porta de comunicação estará ocupada. Portanto, é aconselhável fazer uma única aplicação. Instalamos o Launch4j, iniciamos, selecionamos o arquivo de saída - qualquer nome, deve ser exe na janela principal, depois nosso jar, selecionamos o tipo de console, versão mínima 1.4.0 Indicamos que não precisamos de muitas cópias
Clique
no botão com a engrenagem
Somos questionados sobre onde armazenar os arquivos temporários, respondemos
Good Lak - está tudo pronto. Vamos lançar o executável.
É verdade que no despachante ele ainda será executado em javaw.
Cartas estão chegando
Essas coisas, gostei de Java. PS. A melhor coisa mecânica para monitorar vazamentos é http://www.vse-sam.ru/10249-mexanicheskaya-sistema-dlya-kontrolya-i-predotvrashheniya-protechki-vody.html PPS. A saída do console trava o programa após um certo número de linhas, portanto, se você repetir esse algoritmo repentinamente, não se esqueça de desabilitar a saída do console.
![DB9F](https://cdn.javarush.com/images/article/6df7dcd6-b5da-4732-a233-a3dbce2918e0/256.jpeg)
![Fechamos os contatos e recebemos uma carta - 1](https://cdn.javarush.com/images/article/6c28c92f-510a-43bf-b875-5c0ec9cb03da/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 2](https://cdn.javarush.com/images/article/ad038c56-5ab4-4104-b18a-0d37dc2f5c99/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 2](https://cdn.javarush.com/images/article/a190430c-b103-45d0-bd7c-507bbd9e9296/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 4](https://cdn.javarush.com/images/article/1df6a206-786d-4c0d-84ba-82197a2ba403/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 3](https://cdn.javarush.com/images/article/bd913fce-ac0e-414f-b05d-6bdc1ae11f8b/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 6](https://cdn.javarush.com/images/article/2f690730-a7fa-4668-a6ca-001476092794/256.jpeg)
![Fechamos os contactos e recebemos uma carta - 4](https://cdn.javarush.com/images/article/cff824a4-45a4-40c1-b2c7-b9ac55939280/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 8](https://cdn.javarush.com/images/article/0b698376-2442-48db-a0fa-185c7bb79bef/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 5](https://cdn.javarush.com/images/article/e2e9b3c7-5449-4573-9f5d-6c90f6bfbccb/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 6](https://cdn.javarush.com/images/article/ee1e82e7-6531-45b3-812e-0aa7c99cd44a/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 11](https://cdn.javarush.com/images/article/ccd2f06e-241f-4b70-9891-d2493f6ab2df/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 7](https://cdn.javarush.com/images/article/47797952-7dd0-4253-88f8-ce797ed2649b/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 13](https://cdn.javarush.com/images/article/a5d36dee-ae41-4060-b3da-d3475fb48c9b/256.jpeg)
![Fechamos os contactos e recebemos uma carta - 8](https://cdn.javarush.com/images/article/749cc3d7-a5fb-4a1d-9e59-7a6152e7cc57/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 9](https://cdn.javarush.com/images/article/c638d477-fbc0-404e-a2de-d883e9da0c97/512.jpeg)
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 не меняется- можно это использовать How выход +-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 // Создаем address отправителя и прлучателя 76 InternetAddress from = new InternetAddress("*****@yandex.ru", "From"); 77 InternetAddress to = new InternetAddress("****@****.ru", "To"); 78 // Далее создаем т.н. транспорт с определенными параметрами, который 79 // будет "заниматься" отправкой messages 80 Properties props = new Properties(); 81 // Тип протокола, address serverа и номер порта 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 serverа: логин и пароль 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
Defina os endereços e senhas existentes (aliás, é interessante que na ajuda do Yandex sobre smtp está escrito sobre a porta 465, mas na Internet encontrei a porta 25 - e isso acabou sendo correto ). Vamos começar a execução. Fechamos os contatos 7 e 8, após três segundos liberamos 1 – os contatos são fechados, a carta “Puddle” é enviada, 0 – os contatos estão abertos – é enviada a carta “No Puddle”. É isso que está no meu e-
![Fechamos os contactos e recebemos uma carta - 10](https://cdn.javarush.com/images/article/3d85c151-6c8e-460f-930c-e42ac86db52e/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 17](https://cdn.javarush.com/images/article/22db24ee-eb30-4427-b39c-ca93f90a849b/256.jpeg)
![Fechamos os contactos e recebemos uma carta - 11](https://cdn.javarush.com/images/article/a04ea562-e129-4c3e-a676-bf9ad8277c43/256.jpeg)
![Fechamos os contactos e recebemos uma carta - 19](https://cdn.javarush.com/images/article/b70ddc7c-f8af-4337-be00-d8f68b732700/256.jpeg)
![Fechamos os contactos e recebemos uma carta - 12](https://cdn.javarush.com/images/article/93341a0c-6a77-4437-a107-57fe54fed28a/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 21](https://cdn.javarush.com/images/article/8e673df7-7df3-40fa-92a3-b56fb90f1edd/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 13](https://cdn.javarush.com/images/article/71ed632c-82ba-4531-b063-3674ff46705e/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 14](https://cdn.javarush.com/images/article/105d9d4f-37c9-400c-9e11-9755847df7a2/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 15](https://cdn.javarush.com/images/article/31e60b53-2a12-4aa4-a292-8014b14bea2b/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 16](https://cdn.javarush.com/images/article/e01cfba1-4824-4d15-87c6-2e17f946cab7/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 17](https://cdn.javarush.com/images/article/0fb678c3-07fd-4854-bf66-d11c49a1e60c/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 27](https://cdn.javarush.com/images/article/a76ec27a-23b3-4fce-8311-fe70374466b3/original.jpeg)
![Fechamos os contactos e recebemos uma carta - 18](https://cdn.javarush.com/images/article/65e61c61-39dd-44ee-ad6e-c7d64000cfa8/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 29](https://cdn.javarush.com/images/article/a18073ce-c908-4b07-bea1-3fc903b73649/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 19](https://cdn.javarush.com/images/article/6bb4ba31-2e5e-4625-a7fb-845df6d9d863/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 31](https://cdn.javarush.com/images/article/1a2da269-650d-4fa7-909b-d202516f5a3e/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 20](https://cdn.javarush.com/images/article/13770a99-53c8-4734-8387-b27491f159bc/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 33](https://cdn.javarush.com/images/article/0658eb08-cd26-433f-89be-eacfdda82b9b/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 21](https://cdn.javarush.com/images/article/83627373-b790-4094-abd0-43c5d0582065/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 35](https://cdn.javarush.com/images/article/e12f7ebb-d100-4757-927b-cf552cc088aa/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 22](https://cdn.javarush.com/images/article/4e605af3-ac74-4626-9fc0-a1028ace4749/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 37](https://cdn.javarush.com/images/article/6ef52b2f-7bfd-470c-9851-d5c9f44ecd38/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 23](https://cdn.javarush.com/images/article/cd2f5173-8518-4e56-b489-3861994fda05/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 24](https://cdn.javarush.com/images/article/0e12c2aa-6aeb-4e0c-a3e5-876eb61a4d31/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 40](https://cdn.javarush.com/images/article/ff00a977-6e98-4c29-9a6c-d8199f217a69/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 25](https://cdn.javarush.com/images/article/39a75990-ef3e-4b53-a31f-8b8a7e25a0e3/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 26](https://cdn.javarush.com/images/article/439f7c02-8c50-4325-9d90-c1963658926d/512.jpeg)
![Fechamos os contactos e recebemos uma carta - 43](https://cdn.javarush.com/images/article/73162db8-3e2e-49fb-83cd-2b4171e6c5ab/256.jpeg)
GO TO FULL VERSION