JavaRush /Java Blog /Random-IT /Chiudiamo i contatti e riceviamo una lettera
Izhak
Livello 22
Москва

Chiudiamo i contatti e riceviamo una lettera

Pubblicato nel gruppo Random-IT
Buon pomeriggio, vorrei condividere la mia esperienza nella creazione di un'applicazione che monitora la chiusura dei pin 7 e 8 su un normale adattatore USB-COM cinese (RTS - CTS). E se si verifica un evento del genere, mi invia un'e-mail. Inizialmente, l'obiettivo era realizzare un sensore del flusso d'acqua. Cosa fare in seguito con la chiusura non è, nel complesso, importante, ma volevo inviare lo stato all'ufficio postale. Dato che sto imparando Java utilizzando JavaRush, è stato scelto lo strumento appropriato: IntelliJ Idea. Naturalmente, la posta non è un SMS, ma gli SMS richiedono di lavorare con una porta com, e qui impareremo un ottimo strumento per questo, e quando avrò capito il modem 3G, posso aggiungere alcune informazioni, anche se c'è già un molto su Internet. Quindi, non concentriamoci sulla parte hardware, diamo un'occhiata al connettore stesso DB9F : il pin 5 è terra, il pin 7 è RTS - nel nostro programma ce ne sarà sempre 1 appeso (+ 9 V rispetto al pin 5) e il pin 8 è l'ingresso - viene portato su 0 V da una resistenza da 5 kiloohm. Va detto che quando il nostro programma non è in esecuzione, la tensione sul pin 7 sarà -9 V, questo deve essere tenuto in considerazione quando si prendi un sensore di versamento, puoi applicarlo al pin 8, ma ci sono dispositivi che bruciano per tensioni negative. Quindi, per verificare come funzionerà il nostro programma, dopo averlo avviato, chiuderemo il contatto 7 con il contatto 8, il nostro programma monitorerà tale evento una volta al secondo e invierà una lettera con il testo "Pozzanghera", quindi la aprirà - e il programma invierà una lettera con il testo "Pozzanghera". Non c'è nessuna pozzanghera." Quindi, per installare JDK e IntelliJ Idea e apprendere alcune nozioni di base su Java, puoi utilizzare le prime lezioni di JavaRush.ru. Inizieremo creando un nuovo progetto. Permettimi subito di prenotare che se hai già un progetto aperto, quando crei un nuovo progetto ti verrà chiesto di aprirlo in una nuova finestra - molto conveniente. (Una volta ho provato a lavorare con Eclipse, dove tutti i progetti si aprono in un'unica finestra). Successivamente fornisco molte immagini senza descrizioni, quindi tutto è chiaro. Chiudiamo i contatti e riceviamo una lettera - 1 Chiudiamo i contatti e riceviamo una lettera - 2 Chiudiamo i contatti e riceviamo una lettera - 2 Chiudiamo i contatti e riceviamo una lettera - 4 Chiudiamo i contatti e riceviamo una lettera - 3 Chiudiamo i contatti e riceviamo una lettera - 6 Chiudiamo i contatti e riceviamo una lettera - 4 Chiudiamo i contatti e riceviamo una lettera - 8 Chiudiamo i contatti e riceviamo una lettera - 5 A partire dall'immagine successiva, è molto interessante: ho sempre visto questo esperto, ma avevo paura di farci qualcosa, ma poi l'ho provato - e tutto si è rivelato molto semplice - se hai bisogno di una libreria, basta inserisci il suo nome, cerca la versione più recente e scarica. Aspetto. Scarichiamo la libreria http://habrahabr.ru/post/133766/ jSSC E la libreria javax:mail: a quanto ho capito, è stata rimossa dall'elenco standard delle librerie, ma è facile da scaricare in Maven. Chiudiamo i contatti e riceviamo una lettera - 6 Chiudiamo i contatti e riceviamo una lettera - 11 Chiudiamo i contatti e riceviamo una lettera - 7 Chiudiamo i contatti e riceviamo una lettera - 13 Chiudiamo i contatti e riceviamo una lettera - 8 Fare clic su OK e le librerie verranno aggiunte. Voilà :) Chiudiamo i contatti e riceviamo una lettera - 9 Digita il testo 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 Imposta gli indirizzi e le password esistenti (a proposito, è interessante che nell'aiuto di Yandex su smtp sia scritto sulla porta 465, ma su Internet ho trovato la porta 25 - e questo si è rivelato corretto ). Iniziamo l'esecuzione. Chiudiamo i contatti 7 e 8, dopo tre secondi rilasciamo 1 – i contatti sono chiusi, viene inviata la lettera “Pozzanghera”, 0 – i contatti sono aperti – viene inviata la lettera “No Puddle”, ecco cosa c'è nella mia Chiudiamo i contatti e riceviamo una lettera - 10 posta Chiudiamo i contatti e riceviamo una lettera - 17 Chiudiamo i contatti e riceviamo una lettera - 11 Chiudiamo i contatti e riceviamo una lettera - 19 Ora voglio avere una domanda. Qui, mentre studiavo il materiale, ho pianto: è davvero necessario creare un file manifest, registrare una patch di classe... una cosa terribile. Skipy descrive tutto questo. Stavo quasi per arrendermi, ma molto tempo fa nei cassetti della scrivania della mia cucina non c'erano le schede perforate e abbiamo avuto un'idea, quindi ho creato un archivio di barattoli in modo molto semplice: guarda. Chiudiamo i contatti e riceviamo una lettera - 12 Chiudiamo i contatti e riceviamo una lettera - 21 Chiudiamo i contatti e riceviamo una lettera - 13 Seleziona la casella Build on Make: dopo la successiva compilazione in idea, il risultato sarà nella cartella out. Chiudiamo i contatti e riceviamo una lettera - 14 Tutto è barattolo, ed è così indipendente che, in ogni caso, all'interno della macchina viene copiato e lanciato da qualunque posto. Chiudiamo i contatti e riceviamo una lettera - 15 Ma se lo esegui semplicemente, le lettere verranno inviate, ma non ci sarà la console e potrai interrompere il processo solo trovando tale voce nel task manager. Chiudiamo i contatti e riceviamo una lettera - 16 Lo trasferiamo in un'altra cartella, da lì si avvia anche e creiamo un file bat. Chiudiamo i contatti e riceviamo una lettera - 17 Chiudiamo i contatti e riceviamo una lettera - 27 Avviamo il file batch Chiudiamo i contatti e riceviamo una lettera - 18 Chiudiamo i contatti e riceviamo una lettera - 29 . Ecco la console e usando Ctrl + C - una richiesta per uscire. Chiudiamo i contatti e riceviamo una lettera - 19 Chiudiamo i contatti e riceviamo una lettera - 31 Ma se esegui il jar due volte, la seconda volta non funzionerà: la porta com sarà occupata. Si consiglia pertanto di presentare un'unica domanda. Installiamo Launch4j, lanciamolo, selezioniamo il file di output - qualsiasi nome, dovrebbe essere exe nella finestra principale, poi il nostro jar, selezioniamo il tipo di console, versione minima 1.4.0 Indichiamo che non abbiamo bisogno di molte copie Chiudiamo i contatti e riceviamo una lettera - 20 Chiudiamo i contatti e riceviamo una lettera - 33 Chiudiamo i contatti e riceviamo una lettera - 21 Chiudiamo i contatti e riceviamo una lettera - 35 Clicca Chiudiamo i contatti e riceviamo una lettera - 22 Chiudiamo i contatti e riceviamo una lettera - 37 su pulsante con l'ingranaggio Chiudiamo i contatti e riceviamo una lettera - 23 Ci viene chiesto dove archiviare i file temporanei, rispondiamo Chiudiamo i contatti e riceviamo una lettera - 24 Chiudiamo i contatti e riceviamo una lettera - 40 Good Lak: è tutto pronto. Lanciamo l'eseguibile. Chiudiamo i contatti e riceviamo una lettera - 25 È vero, nel dispatcher verrà comunque eseguito sotto Javaw. Chiudiamo i contatti e riceviamo una lettera - 26 Le lettere stanno arrivando. Chiudiamo i contatti e riceviamo una lettera - 43 Cose del genere, mi è piaciuto Java. PS. La migliore soluzione meccanica per monitorare le perdite è http://www.vse-sam.ru/10249-mexanicheskaya-sistema-dlya-kontrolya-i-predotvrashheniya-protechki-vody.html PPS. L'output della console blocca il programma dopo un certo numero di righe, quindi se ripeti improvvisamente questo algoritmo, non dimenticare di disabilitare l'output della console.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION