jSSC (Java Simple Serial Connector) — библиотека для работы с последовательными (COM) портами ПК. Библиотека создавалась как простая и надёжная замена уже имеющимся средствам. Своё официальное, публичное начало она берёт в 2010 году и распространяется под лицензией LGPL.
С помощью jSSC можно получать имена портов, читать и писать данные, получать ивенты о произошедших событиях ну и т.д. В отличии от javax.comm, с jSSC можно управлять линиями RTS и DTR. Библиотека разрабатывалась для работы в режиме 24/7 в многопоточных системах и на данный момент успешно используется в системах автоматизации, сбора и регистрации данных.
Библиотеку можно использовать на таких платформах, как:
- Windows x86 и x64;
- Linux x86, x64, armhf и armsf (т.е. Raspberry Pi, Orange Pi, Banana Pi, NanoPi и тп);
- Solaris x86 и x64;
- Mac OS X ppc, ppc64, x86 и x64.
jSSC можно разделить на несколько основных частей:
SerialNativeInterface
– класс, который предоставляет доступ ко всем «нативным» методам jSSC.SerialPort
– класс, с помощью которого мы уже будем непосредственно работать с нужным нам портом.SerialPortEventListener
– интерфейс, который необходимо реализовать, если мы хотим использовать ивенты.
jSSC предоставляет следующий ряд возможностей:
- Чтение и запись данных;
- Управление линиями RTS, DTR;
- Получение статуса линий CTS, DSR, RING, RLSD;
- Получение количества байт в буферах;
- Очистка буферов порта;
- Отправка сигнала Break;
- Управление потоком;
- Получение списка com-портов в системе;
Где скачать jSSC
Последнюю версию скачать можно тут, на этой странице можно найти и исходный код. На данный момент доступна версия 2.8.0: jSSC-2.8.0-Release.zip, в архиве вы найдёте файл jssc.jar, его и добавьте в свои проекты. Если вам удобнее работать в Maven, тогда можете добавить следующую зависимость:
<!-- https://mvnrepository.com/artifact/org.scream3r/jssc --> <dependency> <groupId>org.scream3r</groupId> <artifactId>jssc</artifactId> <version>2.8.0</version> </dependency>
Примеры программ с jSSC
Получение имён последовательных портов
Получить список последовательных портов очень просто с помощью метода getPortNames()
. Метод возвращает массив отсортированы строк.
import jssc.SerialPortList; public class SerialPortListExample { public static void main(String[] args) { String[] portNames = SerialPortList.getPortNames(); for (String portName : portNames) { System.out.println(portName); } } }
Проверяем код:
- создаём java файл и вставляем код:
nano SerialPortListExample.java
- компилируем файл:
javac -classpath .:classes:jssc.jar SerialPortListExample.java
- запускаем программу:
java -classpath .:classes:jssc.jar SerialPortListExample
Результат
Запись строки
Записывать данные в последовательный порт можно при помощи следующих методов:
writeByte
— Запись одного байта в порт;public boolean writeByte(byte singleByte)
writeBytes
— Запись массива байтов в порт;public boolean writeBytes(byte[] buffer)
writeInt
— Запись INT значение (в диапазоне от 0 до 255 (0x00 — 0xFF)) в порт;public boolean writeInt(int singleInt)
writeIntArray
— Запись массива int (в диапазоне от 0 до 255 (0x00 — 0xFF)) в порт;public boolean writeIntArray(int[] buffer)
writeString
— Запись строки в порт;public boolean writeString(String string) public boolean writeString(String string, String charsetName)
Ниже приведённый пример кода будет запускаться на Windows 10 x64 и будет передавать привет Orange Pi PC, который и будет принимать приветы.
import java.io.UnsupportedEncodingException; import jssc.SerialPort; import jssc.SerialPortException; public class SerialTxExample { public static void main(String[] args) { /* * Передаём в конструктор имя порта */ SerialPort serialPort = new SerialPort("COM13"); try { /* * Открываем порт */ serialPort.openPort(); /* * Выставляем параметры */ serialPort.setParams(SerialPort.BAUDRATE_9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); /* * Передаём привет */ serialPort.writeString("Привет", "UTF-8"); } catch (SerialPortException ex) { ex.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } }
Чтение данных с использованием интерфейса SerialPortEventListener
Чтение данных из последовательного порта можно при помощи следующих методов:
public byte[] readBytes() public byte[] readBytes(int byteCount) public byte[] readBytes(int byteCount, int timeout) public String readHexString() public String readHexString(int byteCount) public String readHexString(int byteCount, int timeout) public String readHexString(int byteCount, String separator) public String readHexString(int byteCount, String separator, int timeout) public String readHexString(String separator) public String[] readHexStringArray() public String[] readHexStringArray(int byteCount) public String[] readHexStringArray(int byteCount, int timeout) public int[] readIntArray() public int[] readIntArray(int byteCount) public int[] readIntArray(int byteCount, int timeout) public String readString() public String readString(int byteCount) public String readString(int byteCount, int timeout)
Ниже приведённый пример кода будет запускаться на Orange Pi PC и принимать приветы, отправленные через последовательный порт. Все сообщения будут выводиться в терминал.
import jssc.SerialPort; import jssc.SerialPortEvent; import jssc.SerialPortEventListener; import jssc.SerialPortException; public class SerialPorRxTxSerialPortEventListenerExample { public static void main(String[] args) { /* * Передаём в конструктор имя порта */ SerialPort serialPort = new SerialPort("/dev/ttyS1"); try { /* * Открываем порт */ serialPort.openPort(); /* * Выставляем параметры */ serialPort.setParams(SerialPort.BAUDRATE_9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); /* * Готовим маску, на основании неё мы будем получать сообщения о событиях, * которые произошли. Ну например, нам необходимо знать что пришли * какие-то данные, т.о. в маске должна присутствовать следующая величина: * MASK_RXCHAR. Если нам, например, ещё нужно знать об изменении состояния * линий CTS и DSR, то маска уже будет выглядеть так: * SerialPort.MASK_RXCHAR + SerialPort.MASK_CTS + SerialPort.MASK_DSR */ int mask = SerialPort.MASK_RXCHAR; /* * Выставляем подготовленную маску */ serialPort.setEventsMask(mask); /* * Добавляем собственно интерфейс через который мы и будем узнавать о * нужных нам событиях */ serialPort.addEventListener(new SerialPortReader(serialPort)); } catch (SerialPortException ex) { ex.printStackTrace(); } } static class SerialPortReader implements SerialPortEventListener { private SerialPort serialPort; public SerialPortReader(SerialPort serialPort) { this.serialPort = serialPort; } public void serialEvent(SerialPortEvent event) { /* * Объект типа SerialPortEvent несёт в себе информацию о том какое событие * произошло и значение. Так например если пришли данные то метод * event.getEventValue() вернёт нам количество байт во входном буфере. */ if (event.isRXCHAR()) { if (event.getEventValue() > 0) { try { String buffer = serialPort.readString(); System.out.println(buffer); } catch (SerialPortException ex) { ex.printStackTrace(); } } } else if (event.isCTS()) { /* * Если изменилось состояние линии CTS, то метод event.getEventValue() * вернёт 1 если линия включения и 0 если выключена. */ if (event.getEventValue() == 1) { System.out.println("CTS - ON"); } else { System.out.println("CTS - OFF"); } } else if (event.isDSR()) { if (event.getEventValue() == 1) { System.out.println("DSR - ON"); } else { System.out.println("DSR - OFF"); } } } } }
Проверяем код:
- создаём java файл и вставляем код:
nano SerialExample.java
- компилируем файл:
javac -classpath .:classes:jssc.jar SerialExample.java
- запускаем программу:
java -classpath .:classes:jssc.jar SerialExample
Результат
Материалы
java-simple-serial-connector
Releases · scream3r/java-simple-serial-connector · GitHub
Работаем с COM-портом из Java при помощи jSSC / Хабр
Maven Repository: org.scream3r » jssc
Временная регистрация в СПб: Быстро и Легально!
Ищете, где оформить временную регистрацию в Санкт-Петербурге?
Мы гарантируем быстрое и легальное оформление без очередей и лишних документов.
Ваше спокойствие – наша забота!
Минимум усилий • Максимум удобства • Полная легальность
Свяжитесь с нами прямо сейчас!
Временная регистрация
lisinopril diuretic prinivil lisinopril 3973
how can i get clomid for sale: can i buy cheap clomid for sale — can i get generic clomid prices
https://lisinoprilus.com/# lipinpril
purchase cipro buy generic ciprofloxacin buy cipro no rx
buy semaglutide generic rybelsus tabs buy rybelsus online
prescription drugs canada buy online: ed drugs online from canada — drugs1st
http://semaglutidetablets.store/# buy rybelsus online
Kamagra 100mg price: buy kamagra online usa — Kamagra 100mg price
over the counter ed medication: drugs1st — drugs1st
https://cenforce.icu/# cenforce
ed online meds: ed online pharmacy — online prescription for ed
cheap kamagra: super kamagra — buy Kamagra
Как правильно приобрести диплом колледжа или ПТУ в России, важные моменты
https://semaglutidetablets.store/# rybelsus semaglutide tablets
https://semaglutidetablets.store/# rybelsus semaglutide tablets
Purchase Cenforce Online: cheapest cenforce — Buy Cenforce 100mg Online
cenforce.icu: Purchase Cenforce Online — cenforce for sale
cheap kamagra: Kamagra 100mg — Kamagra 100mg price
https://cenforce.icu/# cenforce
en iyi oyun siteleri canlД± casino oyna katД±lД±m bonusu veren bahis siteleri
http://casinositeleri2025.pro/# yeni casino siteleri
az parayla cok kazandiran slot oyunlar?: slot siteleri — slot oyunlar?
пин ап вход: pinup2025.com — pinup 2025
http://casinositeleri2025.pro/# oyun sitesi oyun sitesi oyun sitesi
пинап казино пин ап казино официальный сайт pinup 2025
katД±lД±m bonusu veren bahis siteleri: en yeni kaГ§ak bahis siteleri — vidobet giriЕџ 2025
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телевизоров hisense адреса, можете посмотреть на сайте: ремонт телевизоров hisense сервис
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
https://casinositeleri2025.pro/# casino bet giriЕџ
deneme bonusu veren bahis siteleri 2025: casino maxi — gГјvenilir deneme bonusu veren siteler
https://slottr.top/# en kazancl? slot oyunlar?
https://pinup2025.com/# пин ап казино
online casino: gerГ§ek paralД± casino oyunlarД± — oyun inceleme siteleri
2024 bahis siteleri bahis siteleei en iyi yasal bahis siteleri
https://casinositeleri2025.pro/# en kaliteli bahis siteleri
pronet giriЕџ curacao lisans siteleri grand pasha bet
https://casinositeleri2025.pro/# welches online casino
slot oyunlar? puf noktalar?: slot siteleri — slot oyunlar?
pinup2025.com: pinup2025.com — пин ап казино
http://casinositeleri2025.pro/# yasal oyun siteleri
canli oyun kumar oynama siteleri tГјm casino siteleri
как найти человека по номеру телефона как найти человека по номеру телефона .