Selamat siang, Saya ingin berbagi pengalaman saya membuat aplikasi yang memantau penutupan pin 7 dan 8 pada adaptor USB-COM China biasa (RTS - CTS). Dan jika kejadian seperti itu terjadi, dia mengirimi saya email.
Awalnya tujuannya adalah membuat sensor aliran air. Apa yang harus dilakukan dengan penutupan nanti, pada umumnya, tidak penting, tetapi saya ingin mengirim negara bagian ke kantor pos. Karena saya belajar Java menggunakan JavaRush, alat yang sesuai dipilih – IntelliJ Idea. Tentu saja, email bukanlah SMS, tetapi SMS memerlukan port com, dan di sini kita akan mempelajari alat yang sangat bagus untuk ini, dan ketika saya mengetahui modem 3G, saya dapat menambahkan sedikit informasi, meskipun sudah ada a banyak di Internet. Jadi, jangan fokus pada bagian hardware, mari kita lihat konektornya sendiri
.. Pin 5 adalah ground, pin 7 adalah RTS - dalam program kita akan selalu ada 1 yang tergantung di atasnya (+ 9 V relatif terhadap pin 5), dan pin 8 adalah input - ditarik oleh resistor 5 kilo-ohm menjadi 0 V. Harus dikatakan bahwa ketika program kita tidak berjalan, tegangan pada pin 7 akan menjadi -9 V, ini harus diperhitungkan saat Anda ambil sensor tumpahan, bisa diaplikasikan ke pin 8, tapi ada perangkat yang terbakar karena tegangan negatif. Jadi, untuk memeriksa bagaimana program kami akan bekerja, setelah meluncurkannya, kami akan menutup kontak 7 ke kontak 8, program kami akan memantau peristiwa seperti itu sekali dalam satu detik dan mengirim surat dengan teks "Genangan Air", lalu membukanya - dan program akan mengirimkan surat dengan teks “Genangan”. Tidak ada genangan air." Jadi, untuk menginstal JDK dan IntelliJ Idea serta mempelajari beberapa dasar java, Anda dapat menggunakan pelajaran pertama JavaRush.ru. Kami akan mulai dengan membuat proyek baru. Izinkan saya segera membuat reservasi bahwa jika Anda sudah membuka proyek, maka saat membuat proyek baru Anda akan diminta untuk membukanya di jendela baru - sangat nyaman. (Saya pernah mencoba bekerja dengan gerhana, di mana semua proyek terbuka dalam satu jendela). Selanjutnya saya memberikan banyak gambar tanpa deskripsi - dan semuanya jelas.
Dimulai dengan gambar berikutnya, ini sangat menarik - Saya selalu melihat pakar ini, tetapi takut melakukan sesuatu dengannya, tetapi kemudian saya mencobanya - dan semuanya menjadi sangat sederhana - jika Anda memerlukan perpustakaan, Anda cukup masukkan namanya, cari versi terbaru dan download. Lihat. Kami mengunduh perpustakaan http://habrahabr.ru/post/133766/ jSSC Dan perpustakaan javax:mail - seperti yang saya pahami, itu telah dihapus dari daftar perpustakaan standar, tetapi mudah diunduh di Maven.
Klik OK dan perpustakaan ditambahkan. Voila :)
Ketik teks
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
Tetapkan alamat dan kata sandi yang ada (omong-omong, menarik bahwa dalam bantuan di Yandex tentang smtp tertulis tentang port 465, tetapi di Internet saya menemukan port 25 - dan ini ternyata benar ). Mari kita mulai eksekusi. Kita tutup kontak 7 dan 8, setelah tiga detik kita lepaskan 1 – kontak tertutup, terkirim huruf “Genangan”, 0 – kontak terbuka – terkirim huruf “Tidak Ada Genangan”, Ini yang ada di email
saya
Sekarang saya ingin memiliki aplikasi. Di sini, ketika saya sedang mempelajari materi, saya menangis - apakah benar-benar perlu membuat file manifes, mendaftarkan patch kelas... hal yang buruk. Skipy menjelaskan semua ini. Saya hampir menyerah, tetapi di laci meja dapur saya sudah lama tidak ada kartu berlubang, dan kami punya ide, jadi saya membuat arsip toples dengan sangat sederhana - lihat.
Centang kotak Build on Make - setelah kompilasi ide berikutnya, hasilnya akan ada di folder keluar.
Segala sesuatunya bersifat jar out, dan sangat independen sehingga, bagaimanapun juga, di dalam mesin, semuanya disalin dan diluncurkan dari mana saja.
Tetapi jika Anda hanya menjalankannya, maka surat-surat itu akan terkirim, tetapi tidak akan ada konsol, dan Anda dapat menghentikan prosesnya hanya dengan menemukan entri seperti itu di pengelola tugas.
Kami mentransfernya ke folder lain, dari sana juga dimulai, dan membuat file bat.
Luncurkan file batch
. Ini konsolnya, dan menggunakan Ctrl + C - permintaan untuk keluar.
Tetapi jika Anda menjalankan toples dua kali, yang kedua tidak akan berfungsi - port com akan sibuk. Oleh karena itu, disarankan untuk membuat satu aplikasi. Kami menginstal Launch4j, meluncurkannya, pilih file keluaran - nama apa pun, itu harus exe di jendela utama, lalu toples kami, pilih jenis konsol, versi minimum 1.4.0 Kami menunjukkan bahwa kami tidak memerlukan banyak salinan
Klik
pada tombol dengan roda gigi
Kami ditanya di mana menyimpan file sementara, kami menjawab
Baik Lak - semuanya sudah siap. Mari kita luncurkan file yang dapat dieksekusi.
Benar, di operator itu masih akan dieksekusi di bawah javaw
Surat datang
Hal-hal seperti itu, saya suka Java. PS. Hal mekanis terbaik untuk memantau kebocoran adalah http://www.vse-sam.ru/10249-mexanicheskaya-sistema-dlya-kontrolya-i-predotvrashheniya-protechki-vody.html PPS. Output konsol membuat program crash setelah sejumlah baris tertentu, jadi jika Anda tiba-tiba mengulangi algoritma ini, jangan lupa untuk menonaktifkan output konsol.
GO TO FULL VERSION