下午好,我想分享一下我创建一个应用程序的经验,该应用程序可监控常规中国 USB-COM 适配器 (RTS - CTS) 上引脚 7 和 8 的闭合情况。如果发生这样的事件,他会给我发一封电子邮件。
最初的目标是制造水流传感器。总的来说,稍后如何处理关闭并不重要,但我想将状态发送到邮局。由于我正在使用 JavaRush 学习 Java,因此选择了合适的工具 – IntelliJ Idea。当然,邮件不是短信,但短信需要使用com端口,在这里我们将学习一个非常好的工具,当我弄清楚3G调制解调器时,我可以添加一些信息,尽管已经有一个互联网上有很多。所以,让我们不关注硬件部分,让我们看看连接器本身
。引脚 5 接地,引脚 7 是 RTS - 在我们的程序中,总会有 1 挂在其上(相对于引脚 5 为 + 9 V),并且引脚8 是输入 - 它通过 5 千欧电阻上拉至 0 V。必须说的是,当我们的程序不运行时,引脚 7 上的电压将为 -9 V,当您使用时必须考虑到这一点。使用溢出传感器,您可以将其连接到引脚 8,但有些设备会因负电压而烧毁。因此,为了检查我们的程序将如何工作,启动后,我们将关闭联系人 7 到联系人 8,我们的程序将每秒监视一次此类事件并发送一封带有文本“Puddle”的信件,然后打开它 - 并且程序将发送一封带有“水坑”文本的信件。没有水坑。” 因此,要安装 JDK 和 IntelliJ Idea 并学习一些 java 基础知识,您可以使用 JavaRush.ru 的第一课。我们将从创建一个新项目开始。让我立即预约,如果您已经打开了一个项目,那么在创建新项目时,您将被要求在新窗口中打开它 - 非常方便。(我曾经尝试使用 eclipse,所有项目都在一个窗口中打开)。接下来我给出了很多没有描述的图片——所以一切都很清楚。
从下一张图片开始,非常有趣 - 我一直看到这个专家,但不敢用它做点什么,但后来我尝试了 - 一切都变得非常简单 - 如果你需要一个库,你只需输入其名称,查找最新版本并下载。看。我们下载了库 http://habrahabr.ru/post/133766/ jSSC 和 javax:mail 库 - 据我了解,它已从标准库列表中删除,但很容易在 Maven 中下载。
单击“确定”即可添加库。瞧 :)
输入文本
内容
现在我想要一个应用程序。在这里,当我学习这些材料时,我哭了 - 真的有必要创建一个清单文件,注册一个类补丁......这是一件可怕的事情。斯基皮描述了这一切。我几乎要放弃了,但是我的厨房桌子抽屉里很久以前就没有打孔卡了,我们有了一个想法,所以我很简单地做了一个罐子档案——看。
勾选Build on Make框——下次在idea中编译后,结果将在out文件夹中。
一切都是 jar 出来的,并且是如此独立,以至于在任何情况下,在机器内它都可以从任何地方复制和启动。
但如果你只是运行它,那么就会发送信件,但不会有控制台,你只能通过在任务管理器中找到这样的条目来杀死该进程。
我们将它转移到另一个文件夹,它也从那里启动,并制作一个bat文件。
启动批处理 文件
。这是控制台,并使用Ctrl + C - 请求退出。
但是如果你运行 jar 两次,第二次将不起作用 - com 端口将繁忙。因此,建议进行单一申请。我们安装 Launch4j,启动它,选择输出文件 - 任何名称,它应该是主窗口中的 exe,然后是我们的 jar,选择控制台类型,最低版本 1.4.0 我们表明我们不需要很多
副本
单击带齿轮的按钮
我们被问到在哪里存储临时文件,我们回答
Good Lak - 一切都准备好了。让我们启动可执行文件。
确实,在调度程序中它仍然会在 javaw 下执行
字母即将到来
这样的事情,我喜欢 Java。附言。监测泄漏的最佳机械装置是http://www.vse-sam.ru/10249-mexanicheskaya-sistema-dlya-kontrolya-i-predotvrashheniya-protechki-vody.html PPS。控制台输出在一定行数后会使程序崩溃,因此如果您突然重复此算法,请不要忘记禁用控制台输出。
![DB9F](https://cdn.javarush.com/images/article/6df7dcd6-b5da-4732-a233-a3dbce2918e0/256.jpeg)
![我们关闭联系并收到一封信 - 1](https://cdn.javarush.com/images/article/6c28c92f-510a-43bf-b875-5c0ec9cb03da/512.jpeg)
![我们关闭联系并收到一封信 - 2](https://cdn.javarush.com/images/article/ad038c56-5ab4-4104-b18a-0d37dc2f5c99/512.jpeg)
![我们关闭联系并收到一封信 - 2](https://cdn.javarush.com/images/article/a190430c-b103-45d0-bd7c-507bbd9e9296/512.jpeg)
![我们关闭联系并收到一封信 - 4](https://cdn.javarush.com/images/article/1df6a206-786d-4c0d-84ba-82197a2ba403/512.jpeg)
![我们关闭联系并收到一封信 - 3](https://cdn.javarush.com/images/article/bd913fce-ac0e-414f-b05d-6bdc1ae11f8b/512.jpeg)
![我们关闭联系并收到一封信 - 6](https://cdn.javarush.com/images/article/2f690730-a7fa-4668-a6ca-001476092794/256.jpeg)
![我们关闭联系并收到一封信 - 4](https://cdn.javarush.com/images/article/cff824a4-45a4-40c1-b2c7-b9ac55939280/512.jpeg)
![我们关闭联系并收到一封信 - 8](https://cdn.javarush.com/images/article/0b698376-2442-48db-a0fa-185c7bb79bef/512.jpeg)
![我们关闭联系并收到一封信 - 5](https://cdn.javarush.com/images/article/e2e9b3c7-5449-4573-9f5d-6c90f6bfbccb/512.jpeg)
![我们关闭联系并收到一封信 - 6](https://cdn.javarush.com/images/article/ee1e82e7-6531-45b3-812e-0aa7c99cd44a/512.jpeg)
![我们关闭联系并收到一封信 - 11](https://cdn.javarush.com/images/article/ccd2f06e-241f-4b70-9891-d2493f6ab2df/512.jpeg)
![我们关闭联系并收到一封信 - 7](https://cdn.javarush.com/images/article/47797952-7dd0-4253-88f8-ce797ed2649b/512.jpeg)
![我们关闭联系并收到一封信 - 13](https://cdn.javarush.com/images/article/a5d36dee-ae41-4060-b3da-d3475fb48c9b/256.jpeg)
![我们关闭联系并收到一封信 - 8](https://cdn.javarush.com/images/article/749cc3d7-a5fb-4a1d-9e59-7a6152e7cc57/512.jpeg)
![我们关闭联系并收到一封信 - 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
设置现有地址和密码(顺便说一句,有趣的是,在 Yandex 关于 smtp 的帮助中,它写的是端口 465,但在互联网上我发现了端口 25 - 结果证明这是正确的)。让我们开始执行吧。我们关闭触点 7 和 8,三秒后我们释放 1 – 触点关闭,发送信件“Puddle”,0 – 触点打开 – 发送信件“No Puddle”。这是我的邮件中的
![我们关闭联系并收到一封信 - 10](https://cdn.javarush.com/images/article/3d85c151-6c8e-460f-930c-e42ac86db52e/512.jpeg)
![我们关闭联系并收到一封信 - 17](https://cdn.javarush.com/images/article/22db24ee-eb30-4427-b39c-ca93f90a849b/256.jpeg)
![我们关闭联系并收到一封信 - 11](https://cdn.javarush.com/images/article/a04ea562-e129-4c3e-a676-bf9ad8277c43/256.jpeg)
![我们关闭联系并收到一封信 - 19](https://cdn.javarush.com/images/article/b70ddc7c-f8af-4337-be00-d8f68b732700/256.jpeg)
![我们关闭联系并收到一封信 - 12](https://cdn.javarush.com/images/article/93341a0c-6a77-4437-a107-57fe54fed28a/512.jpeg)
![我们关闭联系并收到一封信 - 21](https://cdn.javarush.com/images/article/8e673df7-7df3-40fa-92a3-b56fb90f1edd/512.jpeg)
![我们关闭联系并收到一封信 - 13](https://cdn.javarush.com/images/article/71ed632c-82ba-4531-b063-3674ff46705e/512.jpeg)
![我们关闭联系并收到一封信 - 14](https://cdn.javarush.com/images/article/105d9d4f-37c9-400c-9e11-9755847df7a2/512.jpeg)
![我们关闭联系并收到一封信 - 15](https://cdn.javarush.com/images/article/31e60b53-2a12-4aa4-a292-8014b14bea2b/512.jpeg)
![我们关闭联系并收到一封信 - 16](https://cdn.javarush.com/images/article/e01cfba1-4824-4d15-87c6-2e17f946cab7/512.jpeg)
![我们关闭联系并收到一封信 - 17](https://cdn.javarush.com/images/article/0fb678c3-07fd-4854-bf66-d11c49a1e60c/512.jpeg)
![我们关闭联系并收到一封信 - 27](https://cdn.javarush.com/images/article/a76ec27a-23b3-4fce-8311-fe70374466b3/original.jpeg)
![我们关闭联系并收到一封信 - 18](https://cdn.javarush.com/images/article/65e61c61-39dd-44ee-ad6e-c7d64000cfa8/512.jpeg)
![我们关闭联系并收到一封信 - 29](https://cdn.javarush.com/images/article/a18073ce-c908-4b07-bea1-3fc903b73649/512.jpeg)
![我们关闭联系并收到一封信 - 19](https://cdn.javarush.com/images/article/6bb4ba31-2e5e-4625-a7fb-845df6d9d863/512.jpeg)
![我们关闭联系并收到一封信 - 31](https://cdn.javarush.com/images/article/1a2da269-650d-4fa7-909b-d202516f5a3e/512.jpeg)
![我们关闭联系并收到一封信 - 20](https://cdn.javarush.com/images/article/13770a99-53c8-4734-8387-b27491f159bc/512.jpeg)
![我们关闭联系并收到一封信 - 33](https://cdn.javarush.com/images/article/0658eb08-cd26-433f-89be-eacfdda82b9b/512.jpeg)
![我们关闭联系并收到一封信 - 21](https://cdn.javarush.com/images/article/83627373-b790-4094-abd0-43c5d0582065/512.jpeg)
![我们关闭联系并收到一封信 - 35](https://cdn.javarush.com/images/article/e12f7ebb-d100-4757-927b-cf552cc088aa/512.jpeg)
![我们关闭联系并收到一封信 - 22](https://cdn.javarush.com/images/article/4e605af3-ac74-4626-9fc0-a1028ace4749/512.jpeg)
![我们关闭联系并收到一封信 - 37](https://cdn.javarush.com/images/article/6ef52b2f-7bfd-470c-9851-d5c9f44ecd38/512.jpeg)
![我们关闭联系并收到一封信 - 23](https://cdn.javarush.com/images/article/cd2f5173-8518-4e56-b489-3861994fda05/512.jpeg)
![我们关闭联系并收到一封信 - 24](https://cdn.javarush.com/images/article/0e12c2aa-6aeb-4e0c-a3e5-876eb61a4d31/512.jpeg)
![我们关闭联系并收到一封信 - 40](https://cdn.javarush.com/images/article/ff00a977-6e98-4c29-9a6c-d8199f217a69/512.jpeg)
![我们关闭联系并收到一封信 - 25](https://cdn.javarush.com/images/article/39a75990-ef3e-4b53-a31f-8b8a7e25a0e3/512.jpeg)
![我们关闭联系并收到一封信 - 26](https://cdn.javarush.com/images/article/439f7c02-8c50-4325-9d90-c1963658926d/1024.jpeg)
![我们关闭联系并收到一封信 - 43](https://cdn.javarush.com/images/article/73162db8-3e2e-49fb-83cd-2b4171e6c5ab/1024.jpeg)
GO TO FULL VERSION