Port szeregowy (serial port) pozwala na transmisje danych w postaci ciągu bitów. Jest on wykorzystywany do połączenia komputera z różnymi sprzętami np.:
- drukarka
- modem USB
- CD-ROM
Przygotwanie do połączenia
W celu pozyskania portu przez jaki należy się komunikować z urządzeniem należy przejść do Menadżera urządzeń i wyszukać sprzęt, z którym zaczynamy prace. W jego właściwościach sprawiamy port.

Połączenie
Do skomunikowania się z urządzeniem można wykorzystać oprogramowanie Putty. Obrazek poniżej pokazuje, jak skonfigurować połączenie zgodnie z wybranym sprzętem.

Komendy AT
Modem GSM pozwala na komunikowanie się poprzez komendy AT.
Lista podstawowych komend:
AT+CGMI // pokazuje informacje o producencie AT+CGMM // pokazuje informacje o modelu urządzenia AT+CMGF=? // pokazuje tryby pracy urządzenia AT+CMGR=0 // wczytanie wiadomości SMS pobranej ze sektora 0 AT+CMGS="+48000000000" // wysłanie SMS na numer +48000000000
Przykład wykorzystania komend AT w terminalu Putty:

Oprogramowanie
Do projektu należy dodać bibliotekę pozwalającą za wykorzystanie połączenia szeregowego:
<dependency>
<groupId>org.scream3r</groupId>
<artifactId>jssc</artifactId>
<version>2.8.0</version>
</dependency>
Inicjalizacja połączenia z Serial Port może wyglądać w następujący sposób:
public ModemConnection() throws SerialPortException, InterruptedException {
SerialPort serialPort = new SerialPort("COM3");
serialPort.openPort();
serialPort.setParams(SerialPort.BAUDRATE_9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
}
Metody odpowiedzialne na wysyłkę SMS i odczyt SMS zgodnie z komendami AT:
private static final byte NEW_LINE = 0x0D;
private static final byte END_OF_LINE = 0x1A;
public String readSms(String memoryPlace) {
String message = "";
try {
serialPort.writeString("AT+CMGF=1");
Thread.sleep(1000);
serialPort.writeByte(NEW_LINE);
Thread.sleep(1000);
serialPort.writeString("AT+CMGR=" + memoryPlace);
Thread.sleep(1000);
serialPort.writeByte(NEW_LINE);
Thread.sleep(1000);
message = serialPort.readString();
} catch (SerialPortException | InterruptedException e) {
e.printStackTrace();
}
return message;
}
public void sendSms(String phoneNumber, String message) {
try {
serialPort.writeString("AT+CMGF=1");
Thread.sleep(1000);
serialPort.writeByte(NEW_LINE);
serialPort.writeString("AT+CMGS=\"" + phoneNumber + "\"");
Thread.sleep(1000);
serialPort.writeByte(NEW_LINE);
Thread.sleep(1000);
serialPort.writeString(message);
Thread.sleep(1000);
serialPort.writeByte(NEW_LINE);
Thread.sleep(1000);
serialPort.writeByte(END_OF_LINE);
} catch (SerialPortException | InterruptedException e) {
e.printStackTrace();
}
}
Wywołanie metod z odpowiednimi argumentami spowoduje odczytanie lub wysłanie SMS.
Materiały dodatkowe
Zapraszam Cię do obejrzenia filmu w trakcie którego prezentuje krok po kroku pełną implementacje własnej bramki SMS działającą jako usługa webowa:
Szkolenia live dla developerów • praktyczna wiedza, realne case’y, zero lania wody 

