สวัสดีตอนบ่ายฉันอยากจะแบ่งปันประสบการณ์ของฉันในการสร้างแอปพลิเคชันที่ตรวจสอบการปิดพิน 7 และ 8 บนอะแดปเตอร์ USB-COM จีนทั่วไป (RTS - CTS) และหากเกิดเหตุการณ์ดังกล่าวเขาจะส่งอีเมลถึงฉัน
ในตอนแรกเป้าหมายคือการสร้างเซ็นเซอร์วัดการไหลของน้ำ โดยทั่วไปแล้วจะทำอย่างไรกับการปิดในภายหลังนั้นไม่สำคัญ แต่ฉันต้องการส่งรัฐไปที่ที่ทำการไปรษณีย์ เนื่องจากฉันกำลังเรียนรู้ Java โดยใช้ JavaRush เครื่องมือที่เหมาะสมจึงถูกเลือก – IntelliJ Idea แน่นอนว่าเมลไม่ใช่ SMS แต่ SMS ต้องทำงานกับพอร์ต com และที่นี่เราจะเรียนรู้เครื่องมือที่ดีมากสำหรับสิ่งนี้ และเมื่อฉันเข้าใจโมเด็ม 3G แล้ว ฉันสามารถเพิ่มข้อมูลเล็กน้อยได้แม้ว่าจะมีอยู่แล้ว มากมายบนอินเทอร์เน็ต ดังนั้นอย่าเน้นที่ส่วนฮาร์ดแวร์ลองดูที่ตัวเชื่อมต่อกันดีกว่า
พิน 5 เป็นกราวด์ พิน 7 คือ RTS - ในโปรแกรมของเราจะมี 1 อันแขวนอยู่บนนั้นเสมอ (+ 9 V สัมพันธ์กับพิน 5) และพิน 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
คลิกตกลงและไลบรารีจะถูกเพิ่ม Voila :)
พิมพ์ข้อความ
ฉัน
ตอนนี้ฉันต้องการมีใบสมัคร ในขณะที่ฉันกำลังศึกษาเนื้อหาอยู่ ฉันก็ร้องไห้ - จำเป็นจริงๆ เหรอที่จะต้องสร้างไฟล์ Manifest ลงทะเบียนแพตช์คลาส... เป็นสิ่งที่แย่มาก Skipy อธิบายทั้งหมดนี้ ฉันเกือบจะยอมแพ้ แต่ในลิ้นชักโต๊ะในห้องครัวของฉันไม่มีบัตรเจาะเมื่อนานมาแล้ว และเรามีความคิดดังนั้นฉันจึงสร้างไฟล์ jar ที่เรียบง่ายมาก - ดูสิ
ทำเครื่องหมายที่ช่อง Build on Make - หลังจากการคอมไพล์แนวคิดครั้งถัดไป ผลลัพธ์จะอยู่ในโฟลเดอร์ออก
ทุกอย่างเป็นระเบียบเรียบร้อย และเป็นอิสระมากจนไม่ว่าในกรณีใดก็ตาม ภายในเครื่องก็สามารถคัดลอกและเปิดใช้งานได้จากทุกที่
แต่ถ้าคุณเพิ่งรันจดหมายจะถูกส่งไป แต่จะไม่มีคอนโซลและคุณสามารถฆ่ากระบวนการได้โดยค้นหารายการดังกล่าวในตัวจัดการงานเท่านั้น
เราถ่ายโอนไปยังโฟลเดอร์อื่นจากนั้นมันก็เริ่มต้นและสร้างไฟล์ค้างคาว
เปิดไฟล์แบตช์
. นี่คือคอนโซลและใช้ Ctrl + C - คำขอออก
แต่ถ้าคุณรัน jar สองครั้ง ครั้งที่สองจะไม่ทำงาน - พอร์ต com จะไม่ว่าง ดังนั้นจึงแนะนำให้ทำการสมัครเพียงครั้งเดียว เราติดตั้ง Launch4j เปิดใช้งาน เลือกไฟล์เอาต์พุต - ชื่อใด ๆ ควรเป็น exe ในหน้าต่างหลัก จากนั้น jar ของเรา เลือกประเภทคอนโซล เวอร์ชันขั้นต่ำ 1.4.0 เราระบุว่าเราไม่ต้องการสำเนาจำนวนมาก
คลิก
ที่ ปุ่มเกียร์
เราก็ถามว่าเก็บไฟล์ชั่วคราวที่ไหน เราตอบ
ดีหลัก - ทุกอย่างพร้อม มาเริ่มปฏิบัติการกันดีกว่า
จริงอยู่ ในโปรแกรมเลือกจ่ายงานนั้นจะยังคงดำเนินการภายใต้ javaw
Letters กำลังมา
ฉันชอบ 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/512.jpeg)
![เราปิดผู้ติดต่อและรับจดหมาย - 43](https://cdn.javarush.com/images/article/73162db8-3e2e-49fb-83cd-2b4171e6c5ab/1024.jpeg)
GO TO FULL VERSION